JavaScript中阶 事件

本文详细介绍了JavaScript中的事件驱动,包括事件源、事件类型和事件处理函数。讲解了DOM0级和DOM2级事件监听器的使用,以及如何添加和删除事件监听器。此外,还阐述了事件流的概念,包括冒泡流和捕获流,并展示了如何阻止事件冒泡。同时,提到了事件对象event的重要属性,如target和this,以及鼠标事件的相关属性。最后,讨论了键盘事件及其相关属性,如keydown、keypress和keyup。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事件驱动三要素

1、事件源:绑定事件的元素

2、事件类型:被JS监测到的行为

3、事件处理函数:记录事件发生时要进行的操作(事件句柄或者事件监听器),根据DOM级别不同,写法和功能也有所区别

事件添加监听器

1、DOM0级HTML事件监听器

2、标准DOM0级事件监听器

兼容性好,但是一个事件源只能绑定一个事件,若有两个,后面会覆盖前面

<input type="button" id='btn'/>
<script>
        btn.onclick=function(){}
</script>

3、DOM2级事件监听级addEventListener('type', callback, boolean)

类型没有关键字on

参数 boolean(可选) 默认false 冒泡

可以同一元素添加多个同类型事件

<input type="button" id='btn'/>
<script>
        btn.addEventListener('click', function() {}, false)
</script>
​
<script>
function foo() {}
        btn.addEventListener('click', foo, false)
</script>
​

事件删除监听器

1、删除DOM0级监听器

将节点对象的事件处理属性赋值为null

<input type="button" id='btn' value='点击'/>
<script>
        btn.onclick=null
</script>

2、删除DOM2级监听器

需要把事件单独写,保障新增和删除的参数一样,才会删除掉

<input type="button" id='btn'/>
​
<script>
function foo() {}
        btn.addEventListener('click', foo, false);//添加
        btn.removeEventListener('click', foo, false);//删除
</script>
​
​
这样新增和删除的就不是同一个函数,所以删除不了
<script>
        btn.addEventListener('click', function foo() {}, false);//添加
        btn.removeEventListener('click',function foo() {}, false);//删除
</script>
​

事件分类-window事件(ul事件)

事件类型描述其他
onload页面加载完成时触发的事件,加载完成后触发也叫入口函数,可以减少全局变量的声明,js文件如果在DOM树加载之前执行,无法获取到元素
onscroll文档被滚动是触发的事件
onresize窗口大小被调整时触发的事件

事件分类-鼠标事件 HTML onclick 事件属性 | 菜鸟教程

事件类型描述
onclickonclick 属性在单击鼠标时触发
ondblclickondblclick 属性在元素上双击鼠标时触发
onmousedown、onmouseup属性在按下/松开鼠标按钮时触发
onmousemove属性在鼠标指针移动到元素时触发
onmouseenter、onmouseleave只在事件源触发并只触发一次,不冒泡
onmouseover、onmouseout从子元素也会触发这个事件,冒泡

事件分类-键盘事件

键盘事件只能绑定在特定元素上

1、输入框

2、document

3、设置属性为<div contenteditable></div>或<div tabindex='1'>的元素

顺序:down-press-up

事件类型描述其他
onkeydown键盘按下时触发
onkeypress键盘输入事件不适用于所有按键(alt/ctrl/shift/esc/方向键/delete键)、区分大小写onkeypress
onkeyup键盘被松开是触发
属性含义其他
key键盘按下时触发
keyCode键值码onkeypress区分捕获到的keyCode字母大小写,该主要获取数字键中的符号
altKey ctriKey shiftKey指示在指定的事件发生时,Alt ctrl shift键是否按下,返回布尔值

事件流

事件在页面上的传播顺序

DOM事件流、冒泡流(常用)和捕获流

IE 冒泡型事件流:由里到外,直到触发document或window的事件后停止

网景 捕获型事件流:由外到里,直到触发中心元素的事件后停止

阻止冒泡:event.stopPropagation()

阻止捕获:event.stopImmediatePropagation()

祖先和后代的事件类型相同,一般情况下点击后,会一次触发外面的父元素事件,如果只触发一次本身,祖先元素不触发,需要在当前需要的事件上阻止冒泡。

事件流的设置

1、DOM0级事件监听方式只支持冒泡

2、DOM2级事件监听方式可以通过设置addEventListener('type', callback, boolean)的第三个参数控制

false:默认值,冒泡型事件流

true:捕获型事件流

事件对象event

获取事件对象

现代浏览器、IE9+:通过事件处理函数的形参得到event对象

<input type="button" id='btn' value='点击'/>
<script>
        btn.onclick=function(event){
        log(event);
        }
</script>

事件目标 event.target

用于捕获触发事件的目标元素

   <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
<script>
 let ul = document.querySelector('ul');
        ul.onclick = function(event) {
            console.log(event.targer); //具体触发事件的目标元素
        }
<script

事件目标 this

指代事件源,绑定该事件的标签元素

  <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
    <script>
        let ul = document.querySelector('ul');
        ul.onclick = function(event) {
            console.log(this); //ul标签
        }
    </script>

鼠标事件

属性含义
clientX,clientY返回事件被触发时,鼠标与浏览器文档显示区域的X,Y坐标
pageX,pageY返回事件被触发时,鼠标指针向对于html文档页面的x,y坐标,页面越长,pageY的值就越大
screenX,screenY返回事件发生时,鼠标指针相对于屏幕的X,Y坐标
offsetX,offsetY返回事件发生时,鼠标指针相对于事件源的X,Y坐标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值