-
目录
原理:不是给每个子节点单独设置事件监听,而是事件监听器设置在父节点上,然后利用冒泡原理影响设置每个子节点
语法:document.addEventListener('selectstart',function(e){e,preventDafult();})
onkeypress某个键盘被按下时触发(但是他不识别功能键,如ctrl,shift,箭头等)
三个事件执行顺序:keydown--keypress--keyup
-
事件对象
-
event就是 事件对象,通常写在侦听器函数的小括号里面,当形参来看
-
事件对象只有有了事件才会发生
-
事件对象是系统给我们创建的,不需要传递参数
-
事件对象是事件的一些列相关数据集合,跟时间相关。例如鼠标点击里面就包含了鼠标点击的坐标相关信息
-
-
事件对象可以自己命名:event、evt、e
-
事件对象有兼容性问题。IE678需要通过window.event
-
解决兼容性问题e||window.event
-
案例
<!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> </head> <body> <div> 123 </div> <script> var div = document.querySelector('div'); //1.传统写法 /* div.onclick = function (event) {//event就是一个事件对象,写到侦听器里面,当做形参来看 console.log(event); } */ //2.高级写法 div.addEventListener('click', function (event) { console.log(event); }) </script> </body> </html>
-
结果
-
e.target和this的区别
-
e.target指向我们点击了哪个元素,就返回哪个元素(IE678不兼容)
-
this哪个元素绑定了点击事件,就返回哪个元素
-
currentTarget与this非常相似(IE678不兼容)
-
案例
<!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> </head> <body> <div>123</div> <ul> <li>abc</li> <li>abc</li> <li>abc</li> </ul> <script> //1.e.target返回的是触发事件对象(元素) this返回的是绑定事件对象(元素) var div = document.querySelector('div'); div.addEventListener('click', function (e) { console.log(e.target); console.log(this); }) //2.区别 var ul = document.querySelector('ul'); ul.addEventListener('click', function (e) { //给ul绑定事件,那么无论点击哪个li,this都指向ul console.log(this); console.log(e.target);//此时如果点击li,则返回的是li }) </script> </body> </html>
-
结果
-
-
e.type返回事件类型
-
就是什么样的事件触发了函数
-
-
e.preventDefault()方法阻止默认行为。
-
让连接不跳转,提交按钮不提交
-
-
e.returnValue阻止默认行为
-
这是一个属性
-
-
return false也能阻止默认行为
-
但是return false后面的代码不在执行,而且只限于传统的注册方式
-
案例
<!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> </head> <body> <div>123</div> <a href="http:/www.baidu.com">百度</a> <form action="http:/www.baidu.com"> <input type="submit" name="sub" id="" value="提交"> </form> <script> //1.返回事件类型 var div = document.querySelector('div'); div.addEventListener('click', fn); div.addEventListener('mouseover', fn); div.addEventListener('mouseout', fn); function fn(e) { console.log(e.type); } //2.阻止默认行为 让链接不跳转 让提交按钮不提交 var a = document.querySelector('a'); a.addEventListener('click', function (e) { e.preventDefault();//这是一个方法 }) /* //3.传统方式阻止默认行为 a.onclick = function (e) { e.preventDefault;//这是一个方法 } //4.考虑兼容性问题的传统方式阻止默认行为 a.onclick = function (e) { e.returnValue;//这是一个属性 } //5.return false阻止默认行为 */ </script> </body> </html>
-
结果
-
-
阻止事件冒泡
-
事件冒泡:开始时由最具体的元素接收,然后逐级向上传播到DOM最顶层节点
-
标准写法:stopPropagation()方法 ;
-
stop停止,Propagation传播
-
-
e.cancelBubble = true;
-
cancel取消,bubble泡泡
-
-
-
案例
<!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> </head> <body> <div class="father"> <div class="son">son盒子</div> </div> <script> //2.冒泡阶段 如果addEventListener第三个参数是false那么则处于冒泡阶段 var son = document.querySelector('.son'); son.addEventListener('click', function (e) { alert('son'); e.stopPropagation(); }, false); var father = document.querySelector('.father'); father.addEventListener('click', function (e) { alert('father'); }, false); </script> </body> </html>
-
结果
-
-
事件委托、事件代理(事件委派)
-
原理:不是给每个子节点单独设置事件监听,而是事件监听器设置在父节点上,然后利用冒泡原理影响设置每个子节点
-
作用:只操作一次DOM,提高程序性能
-
- 案例
<!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> </head> <body> <ul> <li>多云</li> <li>多云</li> <li>多云</li> <li>多云</li> </ul> <script> //给父节点添加一个侦听器,利用事件冒泡影响每个子节点 var ul = document.querySelector('ul'); ul.addEventListener('click', function (e) {//点击li,但是li会有事件冒泡,会往上传给ul,ul会执行下面代码 //alert('多云'); e.target.style.backgroundColor = 'pink'; }) </script> </body> </html>
- 结果
- 案例
-
-
鼠标事件
-
-
禁止鼠标右键菜单contextmenu
-
控制何时显示上下文菜单
-
语法:document.addEventListener('contextmenu',function(e){e.preventDefault();})
-
-
禁止鼠标选中(selectstart开始选中)
-
语法:document.addEventListener('selectstart',function(e){e,preventDafult();})
- 案例
<!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> </head> <body> 我是一段不愿意分享的文字 <script> //1.contextmenu禁用右键菜单 document.addEventListener('contextmenu', function (e) { e.preventDefault(); }) //2.禁止选中文字 document.addEventListener('selectstart', function (e) { e.preventDefault(); }) </script> </body> </html>
- 结果
-
-
-
鼠标事件对象
-
event对象代表事件状态,跟事件相关的一系列信息集合
-
MouseEvent鼠标事件对象
-
KeyboardEvent键盘事件对象
-
e.client x(y)鼠标在可视区的x与y坐标
-
e.pagex(y)鼠标相对于文档页面的x与y坐标
-
e.screenx(y)返回鼠标相对于电脑屏幕的x与y坐标
- 案例
<!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> body { height: 3000px; } </style> </head> <body> <script> document.addEventListener('click', function (e) { //1.client 鼠标在可视区的x与y坐标 ,不能根据滚动条显示坐标 console.log(e.clientX); console.log(e.clientY); //2.page 相对于文档页面的x与y坐标 ,能根据滚动条显示坐标 console.log(e.pageX); console.log(e.pageY); //3.screen 鼠标在电脑屏幕的x与y坐标 console.log(e.screenX); console.log(e.screenY); }) </script> </body> </html>
- 结果
-
-
跟随鼠标的图片案例
-
鼠标移动事件:mousemove 只要鼠标移动1px,就会触发事件
-
在页面中移动,给document注册事件
-
图片要移动距离,而且不占位置,使用绝对定位
-
核心原理:每次移动鼠标,会获得最新的鼠标坐标,把这个x坐标和y坐标作为图片的top值和left值
-
注意:一定要给left和top拼接一个'px'单位
-
如果想要鼠标在图片中间,则需要将图片往上(往左)走高度和宽度的一半
-
案例
<!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> img { position: absolute; } </style> </head> <body> <img src="images/maomi.jpg" alt=""> <script> var pic = document.querySelector('img'); document.addEventListener('mousemove', function (e) { //1.mousemove只要鼠标移动1px 就会触发事件 // console.log(1); //2.得到最新鼠标坐标 var x = e.pageX; var y = e.pageY; console.log('x坐标是' + x, 'y坐标是' + y); //3.一定要给left和top拼接'px' pic.style.left = x - 131 + 'px';//-131指图片往左走宽度的一半 pic.style.top = y - 131 + 'px';//-131指图片往上走高度的一半 }) </script> </body> </html>
-
结果
-
-
常见键盘事件
-
onkeyup:某个键盘按键被松开时触发
-
onkeydown某个键盘按键被按下时触发
-
onkeypress某个键盘被按下时触发(但是他不识别功能键,如ctrl,shift,箭头等)
-
三个事件执行顺序:keydown--keypress--keyup
-
addEventListener不需要加on
-
onkeypress和前面2个的区别是,他不识别功能键
-
案例
-
结果
-
-
02-23
1725
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交