JavaScript笔记(17)

2022-09-20 20:14:29 浏览数 (3)

事件委托

事件冒泡本身的特征,会带来坏处,也会带来好处,需要我们灵活掌握.

事件委托

事件委托也称为事件代理,在jQuery里面被称为事件委派

事件委托的原理

不是给每个子节点单独设置事件监听器,而是将事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点 (一定要记住!)

事件委托的作用

我们只操作了一次DOM,提高了程序的性能

那我们可以这么做,给ul加上点击事件:

但是我们可以看到点击li的时候也会弹出警示框,这是为什么呢?

JS中当触发某些具有冒泡性质的事件时,首先在触发元素寻找是否有相应的注册事件,如果没有再继续向上级父元素寻找是否有相应的注册事件作出响应,这就是事件冒泡。

也就是说,由于是冒泡阶段,所以是按照 li->ul->body->html->document的顺序查找的,由于在li中没有找到触发事件,就向上一级(ul)寻找触发事件,ul设置了触发事件,所以会弹出警示框,但由于点击的是li,e.target是li,所以li的背景会变成粉红色.

常用的鼠标事件

1.禁止鼠标右键菜单

contextmenu主要控制应该何时显示上下文菜单,主要用于程序员取消默认的上下文菜单.比如取消显示框选文本后点击右键的复制

这样就不能右键复制了,但是还是可以control c复制,那现在我们再学习一个阻止鼠标选中的方法:

2.禁止鼠标选中 (selectstart)

鼠标事件对象

event对象代表事件的状态,跟事件相关的一系列信息的集合.现阶段我们主要是用鼠标事件对象MouseEvent和键盘事件对象KeyboardEvent

clientX / clientY

我们获取一下在可视区中的点击坐标:(如果页面滚动也不会影响)

但是如果整个页面有有滚动条,我们想要获取点击的位置距离最顶端的坐标呢?我们需要用到 pageX和pageY

实际开发中page用的比较多,重点记page这个

案例: 跟随鼠标移动的天使

我自己做出来啦,看看代码:

这个效果在购物平台很常见,比如放大商品细节时的黄色框框

如果想要居中那就x-盒子宽度的一半,y减去盒子高度的一半

常用的键盘事件

  • keyup和keydown是不区分大小写的,keypress区分大小写
  • 如果同时写了onkeydown和press,会先执行onkeydown再执行press,因为press多了一层判断

案例时间到: 我们做个京东的案例,就算用户点击了页面中的其他地方,只要按下's'键,光标就能回到搜索框:

贴一下我一开始的做法:

但是出现了问题:当我按下s时,s也被输进去了,这不是我们要的效果

这是因为我们一直按着(即使时间很短),所以s也会被输进去,所以我们换个思路,将keydown换成keyup,那么就可以成功实现了:

案例:模拟京东快递查询

我们在输入单号的时候上面会出现一个大的框框,里面的数字字号更加大些,先自己试着做做

千万要注意用的是keyup而不是keydown,因为我们按下键盘时,就已经触发事件,但是文字还没有输入文本框内.

DOM部分到这里就结束啦!接下来学习BOM

0 人点赞