样式属性操作

1)element.style           行内样式操作   js 修改的是行内样式,在css当中权重比较高

        如果修改的样式比较少或者想达到的功能简单的情况下,我们应该使用 元素.style 的方式来进行修改

<div></div>
		
		<script type="text/javascript">
			// 1)获取元素
			var div= document.querySelector('div');
			
			// 2)注册事件和处理程序
			// js 修改的是行内样式,在css当中权重比较高
			var flag = 0;
			div.onclick = function(){
				if(flag == 0){
					// 元素.style后面跟上要修改的属性(但是里面的属性采取的是驼峰命名法
					this.style.backgroundColor = 'yellow';
					this.style.width= '300px';
					flag = 1;
				}else{
					this.style.background = 'pink';
					this.style.width= '200px';
					flag = 0;
				}
			}
			
			
			
		</script>

简单操作案例 1:关闭二维码案例

核心思路:利用样式的显示和隐藏完成,隐藏采用的是display:none 隐藏元素 display:black 是显示元素 
        创建一个点击按钮,当用户点击之后,就可以让二维码的盒子进行隐藏 

<style>
		.box{
			width: 100px;
			height: 100px;
			margin: 100px auto;
			text-align: center;
			border: 1px solid #ccc;
			background-color: pink;
			position: relative;
		}
		.box>img{
			width: 60px;
			margin-top: 10px;
		}
			
		.close-btn{
			position: absolute;
			top: -1px;
			left: -16px;
			width: 14px;
			height: 14px;
			line-height: 14px;
			border: 1px solid #ccc;
			cursor: pointer;
			font-family: Arial, Helvetica, sans-serif;
		}
			
		</style>
	</head>
	<body>
		
		<div class="box">
			淘宝二维码
			<img src="image/tao.png" alt="">
			<i class="close-btn">x</i>
		</div>
		
		
		<script>
			// 1)获取事件
			var box = document.querySelector('.box');
			var btn = document.querySelector('.close-btn');	
			
			// var btn = document.getElementsByClassName('close-btn');
			
			// getElementsByClassName 根据类来获取元素集合 (H5新增的获取元素的方法),
    //使用的时候无法直接使用它获取过来的元素(不建议使用)
			// console.log(btn);
			
			// 2)注册事件和处理程序
			btn.onclick = function(){
				// 使用getElementsByClassName 获取到一个伪数组,
//调用的时候直接在类名后面加上索引号进行使用
				// btn[0].onclick = function(){
				// console.log('dianji');
				
				box.style.display = 'none';
			}
			
			
		</script>
		
	</body>

简单操作案例 2:利用for循环实现一组元素的精灵图背景

案例分析:1)精灵图的图片排列是有规律的
                  2)核心思路:利用for循环,修改精灵图的背景位置background-position
                  3)找寻各个精灵图之间的位置关系
                  4)让循环里面的i索引号*44 就是每个图片的y坐标 

<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			li{
				list-style: none;
			}
			.box{
				width: 250px;
				margin: 100px  auto;
			}
			
			.box>ul>li{
				float: left;
				width: 24px;
				height: 24px;
				background-color: pink;
				margin: 15px;
				background: url(image/sprite.png) no-repeat;
			}

		</style>
	</head>
	<body>
		<div class="box">
			<ul>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
			</ul>
		</div>
		
		<script type="text/javascript">
			// 1)获取元素  所有的li
			var lis = document.querySelectorAll('li');
			// 利用for循环遍历里面的每一个li标签,然后对每一个li标签添加对应的坐标
			for(var i = 0 ; i<lis.length ; i++){
				// 让循环里面的i索引号*44 就是每个图片的y坐标
				var index=i*44;
				// index 就是我们的Y坐标
				lis[i].style.backgroundPosition= ' 0 -'+index+'px'
				// 添加对应的坐标的时候,注意规定的写法' 0 -'+index+'px'  写法也是 引 引 加 加   中间index是一个变量,加上引号就变成一个字符串了
			}	
		</script>
	</body>

简单操作案例 3:显示隐藏文本框的内容  当鼠标点击文本框时,里面的文字隐藏,当鼠标离开文本框的时候,里面的文字显示出来。

案例分析:1)首先表单需要两个事件,获得焦点 onfocus   失去焦点  onblur 
        2)如果获得焦点,判断表单里面的内容是否为默认文字,如果是默认文字,就清空表单内容 
        3)如果失去焦点,判断表单里面的内容是否为空,如果为空,则表单的内容改为默认文字 

		<style>
			input{
				color: #999;
			}
		</style>
	<body>
		<!-- 得到焦点事件和失去焦点事件理解代码 -->
		<!-- <input type="text"  value="手机">
		
		<script>
			// 1)获取元素
			var text = document.querySelector('input');
			// 2)注册事件和处理程序
			// 注册事件,获取焦点
			text.onfocus=function(){
				console.log('得到了焦点')
			}
			// 注册事件,失去焦点
			text.onblur=function(){
				console.log('失去了焦点')
			}
			
		</script> -->

		<input type="text" value="手机">

		<script>
			// 1)获取元素
			var text = document.querySelector('input');
			// 2)注册事件和处理程序
			// 注册事件,获取焦点
			text.onfocus = function() {
					// console.log('得到了焦点')
					// ===  是全等,里面的值和属性都必须是相同的
					if (this.value ==='手机') {
						this.value ='';
					}
					//获得焦点需要把文本框里面的文字颜色变黑
					this.style.color = '#333';
			}
			// 注册事件,失去焦点
			text.onblur = function() {
						// console.log('失去了焦点')
						if (this.value ==='') {
							this.value ='手机'
						}
						//失去焦点需要把文本框里面的文字颜色变浅
						// 赋值的时候后面跟的都是字符串
						this.style.color = '#999';
			}
		</script>
	</body>

2)element.className      类名样式操作  

         适合于样式较多或者功能比较复杂的情况下使用,我们可以通过 修改元素的className 更改元素的样式

<style>
			div{
				width: 300px;
				height: 300px;
				background-color: pink;
			}
			
			.change{
				background-color: yellow;
				color: black;
				font-size: 25px;
				margin-top: 100px;
			}
		</style>
	</head>
	<body>
		<!-- ClassName 修改样式属性 -->

		<div>文本</div>
		<script>
			// 这里是使用  元素.style  获得修改元素样式
			// 如果修改的样式比较少或者想达到的功能简单的情况下,我们应该使用 元素.style 的方式来进行修改
			var text = document .querySelector('div');
			text.onclick=function(){
				// text.style.backgroundColor = 'yellow';
				// this.style.color='black';
				// this.style.fontSize='25px';
				// this.style.marginTop = '100px';
				
				// 让我们当前元素的类名改为change
				// 我们可以通过 修改元素的className 更改元素的样式  适合于样式较多或者功能比较复杂的情况下使用
				this.className = 'change';
				
				
				
				// 如果想要保留原先的类名,(这种方式后面会进行大量的使用)我们可以:
				this.className = ' first change';
				// 这种方式其实就是多类名选择器的使用。
			}	
		</script>

简单操作案例4 :密码框格式提示错误信息的案例

用户如果离开密码框,里面输入的数字不是6-16,则提示错误信息,否则提示输入正确信息

案例分析:1)首先判断的事件是表单失去焦点
                  2)如果输入正确则提示正确的信息颜色伪绿色小图标变化
                  3)如果输入不是6-16位,则提示错误信息,颜色为红色小图标变化
                  4)因为里面的样式变化较多,我们采取className 修改样式

<style>
			div{
				width: 600px;
				margin: 100px auto;
			}
			
			.message{
				display: inline-block;
				font-size: 12px;
				color: #999;
				background: url(image/right.png) no-repeat;
				padding-left: 20px;
			}
			
			.wrong{
				color: red;
				background: url(image/wrong.png) no-repeat;
			}
			
			.right{
				color: green;
				background: url(image/right.png) no-repeat;
			}
		</style>
		
	</head>
	<body>
		<!-- 密码框格式提示错误信息的案例 -->
		<!-- 用户如果离开密码框,里面输入的数字不是6-16,则提示错误信息,否则提示输入正确信息 -->
		<!-- 案例分析:1)首先判断的事件是表单失去焦点
		2)如果输入正确则提示正确的信息颜色伪绿色小图标变化
		3)如果输入不是6-16位,则提示错误信息,颜色为红色小图标变化
		4)因为里面的样式变化较多,我们采取className 修改样式 -->
		
		<div class="register">
			密码:
			<input type="text" class="ipt">
			<p class="message">请输入6-16位密码</p>
		</div>
		<script>
			// 1)获取元素
			// querySelector获取元素的时候,里面的字符串需要带上对应的id符号或者是class符号
			var  ipt = document.querySelector('.ipt');
			var  message = document.querySelector('.message');
			
			// 2)失去焦点事件
			ipt.onblur = function(){
				//根据表单里面值的长度  ipt.value.length
				if(ipt.value.length<6 || ipt.value.length>16){
					message.className = 'message wrong';
					message.innerHTML = '您输入的位数不对要求6-16位';
				}else{
					message.className = 'message right';
					message.innerHTML = '您输入的是正确的';
				}
			}	
		</script>	
	</body>

3.补充知识点:element.classList.toggle('类名')

        切换类采用element.classList.toggle('类名')(支持ie10以上的版本),切换类就是没有就添加,有就移除。
toggle(class, true|false)    在元素中切换类名。
第一个参数为要在元素中移除的类名,并返回 false。如果该类名不存在则会在元素中添加类名,并返回 true。
第二个是可选参数,是个布尔值用于设置元素是否强制添加或移除类,不管该类名是否存在。

开关灯案例1.0  就是没有使用element.classList.toggle('类名')  书写的: 

<button class="btn1">关灯</button>

		<script>
			// 1)获取元素
			var btn1 = document.querySelector('.btn1');
			// 2)注册事件和处理程序
			var flag = 0;
			btn1.onclick = function() {
				if (flag === 0) {
					// 这里的点击判断事件,是需要将整个body的范围都进行更改,所以判断成功后,需要更改的是整个body文件
					btn1.innerHTML = '开灯'
					document.body.style.backgroundColor = '#000';
					flag = 1;
				} else {
					btn1.innerHTML = '关灯'
					document.body.style.backgroundColor = '#fff';
					flag = 0;
				}
			}
		</script>

这个就是单纯的点击按钮实现body的样式进行更改

        当我们使用上面的element.classList.toggle('类名') 进行书写代码,可以对灯光进行更多的设置,可以实现阴影效果等,这种主要使用的知识点就是通过类名样式进行更改,但是这样不需要对里面的每个盒子都进行选中,才能进行操作,这种的选择方式更加简单,但是具有兼容性的问题。

<style>
			*{
				margin: 0;
				padding:0;
				box-sizing: border-box;
			}
			body{
				display: flex;
				justify-content: center;
				align-items: center;
				min-height: 100vh;
				background-color: #222;
			}
			.on body{
				background: radial-gradient(#ccc;#fff);
			}
			.box2{
				position: relative;
				width: 80px;
				height: 80px;
				background-color: #444;
				border-radius: 50%;
				z-index: 2;
			}
			
			.on .box2{
				background: #fff;
				box-shadow:0 0 100px #fff,
				0 0 200px #fff,
				0 0 300px #fff,
				0 0 400px #fff,
				0 0 500px #fff,
				0 0 600px #fff,
				0 0 700px #fff,
				0 0 800px #fff,
				0 0 900px #fff,
				0 0 1000px #fff;
			}
			.box2::before{
				content: '';
				position: absolute;
				top: -50px;
				left: 22.5px;
				width: 35px;
				height: 80px;
				background-color: #444;
				border-top: 30px solid #000;
				border-radius: 10px;
			}
			
			.on .box2::before{
				background-color: #fff;
			}
			
			.on .box2::after{
				content:'';
				position: absolute;
				top: 50%;
				left: 50%;
				transform: translate(-50%,-50%);
				width: 120px;
				height: 120px;
				background-color: #fff;
				border-radius: 50%;
				filter: blur(40px);			
			}
			
			.box2 span:nth-of-type(1){
				position: absolute;
				top: -16px;
				left: -4px;
				display: block;
				width: 30px;
				height: 30px;
				background: transparent;
				transform: rotate(342deg);
				border-bottom-right-radius:40px;
				box-shadow: 20px 20px 0 10px #444;
			}
			
			.on .box2 span:nth-of-type(1){
				box-shadow: 20px 20px 0 10px #fff;
			}
			
			
			.box2 span:nth-of-type(2){
				position: absolute;
				top: -16px;
				right: -4px;
				display: block;
				width: 30px;
				height: 30px;
				background: transparent;
				transform: rotate(16deg);
				border-bottom-left-radius:40px;
				box-shadow: -20px 20px 0 10px #444;
			}
			
			.on .box2 span:nth-of-type(2){
				box-shadow: -20px 20px 0 10px #fff;
			}
			
			.wire{
				position: absolute;
				left: 774px;
				bottom: 50%;
				width: 4px;
				height: 60vh;
				background-color: #000;
				z-index: 1;
			}
			.switch{
				position:absolute;
				bottom: 50px;
				right: 50px;
				width: 80px;
				height: 80px;
				background: linear-gradient(#eee,#ccc,#eee);
				border: 3px solid #000;
				display: flex;
				justify-content: center;
				align-items: center;
			}
			.switch .btn{
				position:relative;
				width: 25px;
				height: 40px;
				background: linear-gradient(#777, #fff, #777);
				border-radius: 6px;
				border: 2px solid #000;
				cursor: pointer;
			}
			.switch .btn::before{
				content: '';
				position: absolute;
				top: 0;
				left: 0;
				width: 100%;
				height: 85%;
				background: linear-gradient(#fff,#fff);
				border-radius: 4px;
			}
			.on .switch .btn::before{
				top: 15%;
			}	
		</style>
	</head>
	<body>
		<div class="box1">
			<div class="wire"></div>
			<div class="box2">
				<span></span>
				<span></span>
			</div>
			<div class="switch">
				<div class="btn"></div>
			</div>
 
		</div>

		<script>
		var btn = document.querySelector('.btn');
		btn.onclick = function(){
			document.body.classList.toggle('on');
		}	
		</script>

通过单击下方的按钮,可以实现灯光的打开与关闭 

操作元素样式总结:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值