传统事件:基本方法是绑定一个function,但是有一个缺陷,就是一个元素只能绑定一个事件,绑定多个,只能最后一个 事件有效
下面介绍的监听事件就可以绑定多个事件,让我们开始吧
addEVentListener
node.addEventListener('事件',fn,boolean)
第三个是选择捕获还是冒泡,默认是false-冒泡,改成true-捕获,看下面的事件流就知道啥意思了
Dom事件流
捕获阶段
从最高的节点,一直向下捕获到执行事件的节点
当前目标阶段
node完成事件函数
冒泡阶段
node完成事件后,向上执行所有node
部分事件没有冒泡,如:onblur,onfocus,onmouseenter,onmouseleave
事件对象
传统事件,或者监听事件,会传入一个参数event,就是在事件触发的时候会调用这个参数,
<body>
<button onclick="run(event)">push</button>
</body>
<script>
function run(e){
console.log(e)
}
</script>
输出的是事件对象,下面有很多属性,方法
主要属性
target
返回的就是执行事件的当前元素
console.log(e.target)
输出的就是
<button onclick="run(event)">push</button>
type
console.log(e.target)输出的是click,对了type就是事件类型
主要方法
阻止默认行为
<body>
<button onclick="run(event)">push</button>
<a href="one.html">1212</a>
</body>
<script>
let a = document.querySelector('a')
a.onclick=function (e){
e.preventDefault() //这样就阻止了a的默认链接行为了
}
</script>
阻止冒泡
在上面我们讲到了监听事件默认是冒泡,但我们是可以阻止冒泡的stopPropagation()
e.stopPropagation()
这样就可以阻止冒泡了
事件委托
其实很简单,给我们的父node添加监听,然后利用冒泡事件达到效果,
<body>
<ul>
<li>12</li>
<li>12</li>
<li>12</li>
<li>12</li>
<li>12</li>
</ul>
</body>
<script>
let a =document.querySelector('ul')
function change(e){
e.target.style.backgroundColor='blue'
}
a.addEventListener('click',change)
</script>
这样我们就不需要给每一个子元素设置了,直接设置父node
常用的鼠标事件
名称 | 触发条件 |
---|---|
onclick | 鼠标点击 |
onfocus | 获得鼠标焦点触发 |
onblur | 鼠标焦点离开触发 |
onmouseover | 鼠标经过触发 |
onmouseout | 鼠标离开触发 |
onmousemove | 鼠标移动触发 |
onmouseup | 鼠标弹起触发 |
onmousedown | 鼠标按下触发 |
contextmenu | 鼠标右击事件 |
selectstart | 鼠标选中文字 |
鼠标事件对象
MouseEvent
留着下次整理
键盘事件
onkeyup 键盘弹起
onkeydown 键盘按下
onkeypress 也是按下但是不包含功能键如:alt,ctrl,shift,方向等
<script>
function ru(){
console.log('xixi')
}
document.addEventListener('keydown',ru)
</script>
顺序
onkeydown--onkeypress--onkeyup
键盘事件对象
keycode
返回按键的ascll码值
<script>
function ru(e){
console.log(e.keyCode)
}
document.addEventListener('keydown',ru)
</script>
keyup,keydown不区分大小写
keypress区分大小写