父组件加mouseout,mouseover监听,鼠标经过子元素触发事件的问题

http://www.mamicode.com/info-detail-928135.html

今天遇到这个样一个问题,右侧的这个列表想鼠标划出的时候设为不可见。于是给列表加了监听,mouseout


但是,鼠标滑到上面具体某一项的时候也会触发监听的方法。原因是,由父元素划入子元素也触发了mouseover事件。本来想通过事件冒泡的方式来解决,但是并不能满足完全要求。解决办法如下:

1.把mouseout改为mouseleave,mouseover改为mouseenter【最佳】

先看一下区别:

mouseover与mouseenter:

不论鼠标指针穿过被选元素或其子元素,都会触发mouseover;

只有鼠标指针从元素外穿入被选元素(到元素内)时,才会触发mouseenter。

mouseout与mouseleave:

不论鼠标指针离开被选元素或其子元素,都会触发mouseout;

只有鼠标指针从元素内穿出被选元素(到元素外)时,才会触发mouseleave。

真的是很神奇,姿势点get了吧?试了试果然好使!

2.不是办法的办法(实现了最终的效果,有点歪)

思路就是先打印一下这个event,看有啥可用的属性没。

然后操作看打印,找规律:


然后写判断条件。

这个办法比较繁琐,需要多次操作找规律,看打印结果,虽然功能实现了,但不提倡。

3.事件冒泡的解决办法(没实现最后我们想要的,差一步)

利用e.stopPropagation()阻止事件近一步传播。

调用该方法后,事件停止冒泡,可以阻止把事件分派到其他节点。

给每个子元素加mouseout的监听,在处理方法中,调用e.stopPropagation();父元素的mouseout正常。

结果就是从子元素上移出时,mouseout事件不会冒泡,不会在父元素上被捕获。

但是从父元素移到子元素上时,会触发父元素的mouseout,这就是不符合我们项目的地方。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,543评论 1 11
  • 总结: 鼠标事件 1.click与dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r阅读 1,640评论 2 10
  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 1,370评论 0 8
  • 第1章 鼠标事件 1-1 jQuery鼠标事件之click与dbclick事件 用交互操作中,最简单直接的操作就是...
    mo默22阅读 1,308评论 0 6
  • Dom事件 事件是一种异步编程的实现方式,本质上是程序各个组成部分之间的通信。DOM支持大量的事件 (一) Eve...
    woow_wu7阅读 1,807评论 0 1