最近做的一个项目中需要实现一个功能,判断鼠标停放区域,根据不同的区域范围,滚动鼠标滚轮时,元素移动的距离长短不同。
mouseover事件(){
获取鼠标焦点坐标;
判断鼠标焦点所在区域范围;
mousewheel鼠标滚动事件(){
alert("test");
};
}
在实现的时候,鼠标滚动事件可以用onmousewheel,也可以用addlistener,但实现出来是存在差别的。(先不考虑浏览器兼容问题)
1.当使用addlistener时,如果鼠标移出元素的作用范围,再移动回元素的作用范围后,滚动一下滚轮,会发现会弹出多次alert警告,而且,每移出移回一次,就多出现一次alert。
原因:由于addlistener可以支持给元素绑定多个事件。因此,当鼠标在元素作用范围移入移出时,鼠标虽然没有发生滚动。addlistener却给元素多增加了一次绑定事件。这样,在不移动滚轮的情况下,多移入移出一次,就多绑定一次事件,从而多出现一次alert。
2.在使用onmousewheel时,由于Event 内联事件只会给元素绑定一个事件,前面的会被后面的覆盖掉。因此不会出现随着移入移出,alert次数增多的情况。
可以参考链接中的文章。
跳出这个问题,单独说这类多种事件同时监听的情况:最好还是一个事件单独写成一个函数,避免套用的情况。