1.JS通过style修改内联样式
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style type="text/css">#box1 {width: 200px;height: 200px;background-color: red;}</style><script type="text/javascript">window.onload = function(){/*点击按钮以后修改box1的大小*///获取box1var box1 = document.getElementById("box1");//为按钮绑定单击响应函数var btn01 = document.getElementById("btn01");btn01.onclick = function(){//修改box1的宽度/*通过JS修改元素的样式:语法:元素.style.样式名 = "样式值"注意:如果CSS的样式名中含有-,这种名称在JS中是不合法的,比如background-color,需要将这种样式名修改成驼峰命名法,去掉-,然后将-后的字母大写border-top-width borderTopWidth我们通过style属性设置的样式都是内联样式,而内联样式有较高的优先级,所以通过JS修改的样式往往会立即显示但是如果在样式中写了!important,则此时样式会有最高的优先级,即使通过JS也不能覆盖该样式,此时将会导致JS修改样式失效,所以尽量不要为样式添加!important*/box1.style.width = "300px";box1.style.backgroundColor = "yellow"; //Uncaught SyntaxError: Invalid left-hand side in assignment};//点击按钮2以后,读取元素的样式var btn02 = document.getElementById("btn02");btn02.onclick = function(){//读取box1的样式/*语法:元素.style.样式名通过style属性设置和读取的都是内联样式无法读取样式表中的样式 */alert(box1.style.width);};};</script>
</head>
<body><button id="btn01">点我一下</button><button id="btn02">点我一下2</button><br/><br/><div id="box1"></div>
</body>
</html>
2.读取元素的样式
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style type="text/css"> #box1 {/* width: 100px; */height: 100px;background-color: yellow;}</style><script type="text/javascript">window.onload = function(){//点击按钮读取box1的样式var box1 = document.getElementById("box1");var btn01 = document.getElementById("btn01");btn01.onclick = function(){//读取box1的宽度//只能读到内联样式//alert(box1.style.width);/*获取元素的当显示的样式语法:元素.currentStyle.样式名它可以用来读取当前元素正在显示的样式如果当前元素没有设置该样式,则获取默认值但是只有IE浏览器支持,其它浏览器都不支持*///alert(box1.currentStyle.width);/*在其它浏览器中可以使用getComputedStyle()这个方法来获取元素当前的样式这个方法是window的方法,可以直接使用需要两个参数第一个:要获取样式的元素第二个:可以传递一个伪元素,一般都传null该方法会返回一个对象,对象中封装了当前元素对应的样式可以通过对象.样式名来读取样式如果获取的样式没有设置,则会获取到真实的值,而不是默认值比如:没有设置width,它不会获取到auto,而是一个长度但是该方法不支持IE8及以下的浏览器通过currentStyle和getComputedStyle()读取到的样式都是只读的,不能修改,如果要修改必须通过style属性*///正常浏览器的方式//var obj = getComputedStyle(box1, null);//alert(obj.width);//IE8的方式//alert(box1.currentStyle.backgroundColor);alert(getStyle(box1, "width"));};};/*定义一个兼容所有浏览器的函数,用来获取指定元素的当前的样式参数:obj 要获取样式的元素name 要获取的样式名*/function getStyle(obj, name){// 方法一://if(getComputedStyle){ //变量在IE8中找不着就报错,依然无法获得属性// if(window.getComputedStyle){ //对象的属性找不着返回undefined,转换为false// //正常浏览器,具有getComputedStyle方法// return getComputedStyle(obj,null)[name];// }else{ // //IE8方式,没有getComputedStyle()方法// return obj.currentStyle[name];// }//方法二:逆向思维,但是还是建议使用上面的方法,IE11既有 currentStyle也有getComputedStyle()// if(obj.currentStyle){// return obj.currentStyle[name];// }else{// return getComputedStyle(obj,null)[name];// }//简单写法return window.getComputedStyle?getComputedStyle(obj,null)[name]:obj.currentStyle[name];}</script>
</head>
<body><button id="btn01">点我一下</button><div id="box1" ></div>
</body>
</html>
3.滚动条练习
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style type="text/css">#info {width: 300px;height: 500px;background-color: #bfa;overflow: auto;}</style><script type="text/javascript">window.onload = function(){/*当垂直滚动条滚动到底时使表单项可用onscroll- 该事件会在元素的滚动条滚动时触发*///获取id为info的p元素var info = document.getElementById("info"); //获取表单项var inputs = document.getElementsByTagName("input");//为info绑定一个滚动条滚动的事件info.onscroll = function(){//检查滚动条是否滚动到底if(info.scrollHeight - info.scrollTop === info.clientHeight){//滚动条滚动到底使表单项可用/*disabled属性可以设置一个元素是否禁用,如果设置为true, 则元素禁用设置为false,则元素可用*/inputs[0].disabled = false; //disabled =false 表示不禁用inputs[1].disabled = false;}};};</script>
</head>
<body><h3>欢迎亲爱的用户注册</h3><p id="info">亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册亲爱的用户,请仔细阅读以下协议,如果你不仔细阅读你就别注册</p><!-- 如果为表单项添加disabled="disabled" 则标单项将变成不可用的状态 -->我已仔细阅读协议,一定遵守<input type="checkbox" disabled="disabled"><input type="submit" value="注册" disabled="disabled">
</body>
</html>
4.div随鼠标移动
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style type="text/css">#box1 {width: 100px;height: 100px;background-color: red;/*开启绝对定位*/position:absolute;}</style><script type="text/javascript">window.onload = function(){/*使div可以跟随鼠标移动*///获取box1var box1 = document.getElementById("box1");//绑定鼠标移动事件document.onmousemove = function(event){//解决兼容问题event = event || window.event;//获取滚动条滚动的距离/*chrome认为浏览器的滚动条是body的,可以通过body.scrollTop来获取2021chrome兼容了,也认为是html的了,不用 var scrollTop = document.documentElement.scrollTop|| window.pageYOffset || document.body.scrollTop火狐等浏览器认为浏览器的滚动条是html的*/var scrollTop = document.documentElement.scrollTop;//获取鼠标的坐标/*clientX和clientY用于获取鼠标在当前的可见窗口的坐标pageX和pageY可以获取鼠标相对于当前页面的坐标但是这两个属性在IE8中不支持,所以如果需要兼容IE8,则不要使用*/var left = event.clientX;var top = event.clientY;//设置div的偏移量,只对开启定位的元素起作用box1.style.left = left + "px";box1.style.top = top + scrollTop + "px";};};</script>
</head>
<body heigtht="height:100000px;width: 20000px;"><div id="box1"></div>
</body>
</html>
5.事件的冒泡
取消冒泡:
event = event || window.event;
event.cancelBubble = true;
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style type="text/css">#box1 {width: 200px;height: 200px;background-color: yellowgreen;}#s1 {background-color: yellow;}</style><script type="text/javascript">window.onload = function(){/*事件的冒泡(Bubble)- 所谓事件的冒泡指的就是事件向上传导,当后代元素上的事件被触发时,其祖先元素的相同事件也会被触发- 在开发中大部分冒泡都是有用的,如果不希望事件冒泡可以通过事件对象来取消冒泡*///为s1绑定一个单击响应函数var s1 = document.getElementById("s1");s1.onclick = function(event){event = event || window.event;alert("我是span的单击响应函数");//取消冒泡//可以将事件对象的cancelBubble设置为true,即可取消冒泡event.cancelBubble = true;};//为box1绑定一个单击响应函数var box1 = document.getElementById("box1");box1.onclick = function(){event = event || window.event;alert("我是div的单击响应函数");event.cancelBubble = true;};//为body绑定一个单击响应函数document.body.onclick = function(){alert("我是body的单击响应函数");};};</script>
</head>
<body><div id="box1">我是box1<span id="s1">我是span</span></div>
</body>
</html>
6.事件的委派
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script type="text/javascript">window.onload = function(){var u1 = document.getElementById("u1");//点击按钮以后添加超链接var btn01 = document.getElementById("btn01");btn01.onclick = function(){//创建一个livar li = document.createElement("li");li.innerHTML = "<a href='javascript:;'>新建的超链接一</a>";//将li添加到ul中u1.appendChild(li);};/*为每一个超链接都绑定单击响应函数这里我们为每一个超链接都绑定了一个单击响应函数,这种操作比较麻烦而且这些操作只能为已有的超哦链接设置事件,而新添加的超链接必须重新绑定*///获取所有的avar allA = document.getElementsByTagName("a");//遍历// for(var i=0; i<allA.length; i++){// allA[i].onclick = function(){// alert("我是a的单击响应函数");// };// }/*我们希望,只绑定一次事件,即可应用到多个的元素上,即使元素是后添加的我们可以尝试将其绑定给元素的共同的祖先元素事件的委派- 将事件统一绑定给元素的共同的祖先元素,这样当后代元素上的事件触发时,会一直冒泡到祖先元素从而通过祖先元素的响应函数来处理事件。- 事件委派是利用了冒泡,通过委派可以减少事件绑定的次数,提高程序的性能*///为u1绑定一个单击响应函数u1.onclick = function(event){event = event || window.event;/*target - event中的target表示触发事件的对象*///如果触发事件的对象是我们期望的元素,则执行,否则不执行if(event.target.className == "link"){alert("我是ul的单击响应函数");}};};</script>
</head>
<body><button id="btn01">添加超链接</button><ul id="u1" style="background-color: #bfa;"><li><p>我是p元素</p></li><li><a href="javascript:;" class="link">超链接一</a></li><li><a href="javascript:;" class="link">超链接二</a></li><li><a href="javascript:;" class="link">超链接三</a></li></ul>
</body>
</html>
7.事件的绑定. 涉及兼容
//大部分浏览器兼容的方式
obj.addEventListener(eventStr, callback, false );
//IE8及以下
obj.attachEvent(“on”+eventStr, callback);//这里是windows调用
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script type="text/javascript">window.onload = function(){/*点击按钮以后弹出一个内容*///获取按钮对象var btn01 = document.getElementById("btn01");/*使用对象.事件 = 函数 的形式绑定响应函数,它只能同时为一个元素的一个事件绑定一个响应函数不能绑定多个,如果绑定了多个,则后边会覆盖掉前面的*///为btn01绑定一个单击响应函数/* btn01.onclick = function(){alert(1);}; *///为btn01绑定第二个响应函数/* btn01.onclick = function(){alert(2);}; *//*第二种绑定事件的方法addEventListener()- 参数:1.事件的字符串,不要写 on2.回调函数,当事件触发时该函数会被调用3.是否在捕获阶段触发事件,需要一个布尔值,一般传false使用addEventListener()可以同时为一个元素的相同事件同时绑定多个响应函数,这样当事件被触发时,响应函数将会按照函数的绑定顺序执行。这个方法不支持IE8及以下的浏览器- 在IE8中可以使用attachEvent()来绑定事件- 参数:1.事件的字符串,要on2.回调函数- 这个方法也可以同时为一个事件绑定多个处理函数,不同的是它是后绑定先执行,执行顺序和addEventListener()相反*///btn01.addEventListener("click",function(){alert(1);}, false);//btn01.addEventListener("click",function(){alert(2);}, false);bind(btn01, "click", function(){alert(1);});bind(btn01, "click", function(){alert(2);});//定义一个函数,用来为指定元素绑定响应函数/*addEventListener()中的this,是绑定事件的对象attachEvent()中的this,是window需要统一两个方法中的this*//*参数:obj 要绑定事件的对象eventStr 事件的字符串(不要on)callback 回调函数*/function bind(obj, eventStr, callback){if(obj.addEventListener){//大部分浏览器兼容的方式obj.addEventListener(eventStr, callback, false );}else{/*this是谁由调用方式决定callback.call(obj)*///IE8及以下//obj.attachEvent("on"+eventStr, callback);//这里是windows调用obj.attachEvent("on"+eventStr, function(){//在匿名函数中调用回调函数callback.call(obj); //修改this指向});}}};</script>
</head>
<body><button id="btn01">点我一下</button>
</body>
</html>