也称为事件代理,在jQuery里称为事件委派
是事件冒泡带来的好处
原理:不是给每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点
提高了程序的性能
例:
<body> <ul> <li>点击</li> <li>点击</li> <li>点击</li> <li>点击</li> </ul> <script> var ul = document.querySelector("ul"); ul.addEventListener("click", function (e) { //给ul 设置的事件,但点击每个li 都会弹出对话框 alert("我是li"); //也可给li设置点击后li的背景颜色变换 e.target.style.backgroundColor = "pink"; }); </script> </body>常用的鼠标事件(提升版)
client鼠标在可视区的 X 和 Y 坐标
e.clientX 返回鼠标相对于浏览器窗口可视区的坐标X。
e.clientY 返回鼠标相对于浏览器窗口可视区的坐标Y
page 鼠标在页面文档的 X 和 Y 坐标
e.pageX 返回鼠标相对于页面文档的坐标X IE9+ 支持
e.pageY 返回鼠标相对于页面文档的坐标Y IE9+ 支持
screen 鼠标在电脑屏幕的 X 和 Y 坐标
e.screenX 返回鼠标相对于电脑屏幕的 X 坐标
e.screenY 返回鼠标相对于电脑屏幕的 Y 坐标
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); });案例: 跟随鼠标移动的图片
案例分析:
鼠标不断地移动 使用鼠标事件 mousemove在页面中,给document 注册事件图片要移动距离,而且不占位置,使用绝对定位即可核心原理:每次鼠标移动,我没都会获得新的鼠标坐标,把这个 x 和 y 坐标设为图片 top left 值即可 <style> img { position: absolute; width: 80px; height: 80px; } </style> </head> <body> <img src="images/pig.gif" alt="" /> <script> var img = document.querySelector("img"); document.addEventListener("mousemove", function (e) { //mousemove 只要移动鼠标,都会触发这个事件 var x = e.pageX; var y = e.pageY; //千万不要忘记给x y 加单位 img.style.left = x + "px"; img.style.top = y + "px"; }); </script> </body>keyup keydown 都不区分大小写值 a和A 得到的都是65
keypress 区分大小写值 比如:a和A 得到的都是65
注意:keydown 和 keypress 在文本框里面的特点 : 他们两个事件触发的时候,文字还没有落入文本框中,keyup 事件触发的时候,文本已经落入文本框里了
//键盘事件对象的keyCode属性可以得到想要的ASCII码值 document.addEventListener("keyup", function (e) { if (e.keyCode == 65) { console.log("您按下了a键"); } else { console.log("您没有按下a键"); } });当按下s键,光标就自动定位到搜索框 核心思路:
检测用户是否按下s键,如果按下了,就把光标自动定位到搜索框使用键盘事件对象里面的keyCode来判断用户按下的是否是s键搜索框获得焦点:使用js中的 focus()方法 <input type="text" /> <script> var search = document.querySelector("input"); document.addEventListener("keyup", function (e) { console.log(e.keyCode); if (e.keyCode === 83) { search.focus(); } }); </script>