29 Dom事件基础
29.1 事件监听(绑定)
事件是在编程时系统内发生的动作或者发生的事情,比如用户在网页上单击一个按钮。
事件监听(绑定事件或者注册事件)就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,比如鼠标经过显示下拉菜单,比如点击可以播放轮播图等等。
事件监听三要素:
- 事件源: 那个dom元素被事件触发了,要获取dom元素
- 事件类型: 用什么方式触发,比如鼠标单击 click、鼠标经过 mouseover 等
- 事件调用的函数: 要做什么事
语法
DOM对象.addEventListener('事件类型',要执行的函数)
//例子
<body>
<button>点击</button>
<script>
// 事件三要素:事件源、事件类型、事件处理函数
btn = document.querySelector('button')
btn.addEventListener('click', function () {
alert('你好呀')
})
</script>
</body>
详见:示例
京东点击关闭顶部广告
需求:点击关闭之后,顶部关闭
详见:示例
随机点名案例
要求:
- 点击开始按钮随机抽取数组的一个数据,放到页面中
- 点击结束按钮删除数组当前抽取的一个数据
- 当抽取到最后一个数据的时候,两个按钮同时禁用(写点开始里面,只剩最后一个数据不用抽了)
详见:示例
事件监听的其他版本
- DOM L0:事件源.on事件 = function() { }
- DOM L2:事件源.addEventListener(事件, 事件处理函数)
- 区别:on方式会被覆盖,addEventListener方式可绑定多次,拥有事件更多特性,推荐使用
29.2 事件类型
- 鼠标事件(鼠标触发)
- click:鼠标点击
- mouseenter:鼠标经过
- mouseleave:鼠标离开
- 焦点事件(表单光标)
- focus:获得焦点
- blur:失去焦点
- 键盘事件(键盘触发)
- Keydown:键盘按下触发
- Keyup:键盘抬起触发
- 文本事件(表单输入触发)
- input:用户输入事件
29.2.1 鼠标事件
<body>
<div></div>
<script>
const div = document.querySelector('div')
// 鼠标经过
div.addEventListener('mouseenter', function () {
div.innerHTML = '轻轻的我来了'
})
// 鼠标离开
div.addEventListener('mouseleave', function () {
div.innerHTML = '轻轻的我走了'
})
</script>
</body>
详见:示例
轮播图完整版案例
需求:当点击左右的按钮,可以切换轮播图;鼠标经过暂停定时器;鼠标离开开启定时器。
详见:示例
29.2.2 焦点事件
<body>
<input type="text" name="" id="">
<script>
const input = document.querySelector('input')
input.addEventListener('focus', function () {
console.log('有焦点触发。');
})
input.addEventListener('blur', function () {
console.log('失去焦点。');
})
</script>
</body>
详见:示例
案例
详见:小米搜索框
29.2.3 键盘事件
<body>
<input type="text">
<script>
const input = document.querySelector('input')
input.addEventListener('keydown', function () {
console.log('键盘按下了');
})
input.addEventListener('keyup', function () {
console.log('键盘弹起了');
})
</script>
</body>
详见:小米搜索框
29.2.4 文本事件
<body>
<input type="text">
<script>
const input = document.querySelector('input')
input.addEventListener('input', function () {
console.log(input.value);
})
</script>
</body>
评论字数统计案例
需求:用户输入文字,可以计算用户输入的字数
详见:小米搜索框
29.3 事件对象
事件对象:也是个对象,这个对象里有事件触发时的相关信息。 例如:鼠标点击事件中,事件对象就存了鼠标点在哪个位置等信息。
使用场景
- 可以判断用户按下哪个键,比如按下回车键可以发布新闻
- 可以判断鼠标点击了哪个元素,从而做相应的操作
语法
dom对象.addEventListener('click', function (e) { //这里的e就是事件对象
})
//例子
<body>
<button>点击</button>
<script>
const btn = document.querySelector('button')
btn.addEventListener('click', function (e) {
console.log(e);
})
</script>
</body>
详见:示例
事件对象的获取
- 在事件绑定的回调函数的第一个参数就是事件对象
- 一般命名为event、ev、e
事件对象常用属性
- type
- 获取当前的事件类型
- clientX/clientY
- 获取光标相对于浏览器可见窗口左上角的像素位置
- offsetX/offsetY
- 获取光标相对于当前DOM元素左上角的像素位置
- key
- 用户按下的键盘键的值
- 现在不提倡使用keyCode
练习:
详见:示例