鼠标移至div内部其他层时,触发mouseout

news/2024/5/9 19:30:42/文章来源:https://blog.csdn.net/weixin_33971130/article/details/85610716

话说有一个DIV元素,其内部有一个IMG元素和SPAN元素,不用理会这两个内部元素怎么布局,这不是我要讨论的重点。

为了实现一些特殊的效果,我需要利用TD的onmouseover和onmouseout事件,测试时就会发现如下的状况:

当鼠标移入DIV内部时,onmouseover事件被触发;接着再鼠标移动到DIV内部的IMG或者SPAN元素之上,我们肯定不会认为这时鼠标已经移到了DIV的外边,但奇怪的是onmouseout事件触发了,而且紧接着onmouseover事件也马上被触发了。

这可不是我想要的,那么怎么来"屏蔽"内部元素给外层元素带来的Javascript事件干扰呢?

这里列举两种方法:

一. setTimeout

因为在鼠标移动到内部元素之上而触发了外层元素的onmouseout事件后,外层元素的onmouseover也会马上触发,所以我们只需要把外层元素的onmouseout事件需要执行的动作延迟很短的一段时间来运行,然后在onmouseover事件中再执行clearTimeout方法,这样就可以避免内部元素引起的事件干扰。

具体的执行过程请看下图(纵向的虚线表示时间):

r_setTimeoutforMouseEvent.png

这是个很巧妙的的方法,因为当onmouseout触发后,实质性的方法并没有马上执行,而是要等待一小段时间。如果在这段时间里马上又触发了 onmouseover事件,那么基本上就可以肯定onmouseout事件的触发是因为内部元素的干扰了,所以在onmouseover事件中使用 clearTimeout来阻止延时的方法执行。

二.contains

在onmouseover时先进行如下判断,结果为true时再执行方法体:

$("#popFormDiv").mouseover(function () {
            var s = event.fromElement || event.relatedTarget;
            if (!this.contains(s)) { $(this).show("slow"); }            
       });

在onmouseout时先进行如下判断,结果为true时再执行方法体:

$("#popFormDiv").mouseout(function () {
            var s = event.toElement || event.relatedTarget;
            if (!this.contains(s)) { $(this).hide("slow"); }
        });

下面来解释一下上面两行代码的含义:

在IE中,所有的HTML元素都有一个contains方法,它的作用是判断当前元素内部是否包含指定的元素。我们利用这个方法来判断外层元素的事件是不是因为内部元素而被触发,如果内部元素导致了不需要的事件被触发,那我们就忽略这个事件。

event.fromElement指向触发onmouseover和onmouseout事件时鼠标离开的元素;event.toElement指向触发onmouseover和onmouseout事件时鼠标进入的元素。

那么上面两行代码的含义就分别是:

○ 当触发onmouseover事件时,判断鼠标离开的元素是否是当前元素的内部元素,如果是,忽略此事件;

○ 当触发onmouseout事件时,判断鼠标进入的元素是否是当前元素的内部元素,如果是,忽略此事件;

这样,内部元素就不会干扰外层元素的onmouseover和onmouseout事件了。

但问题又来了,非IE的浏览器并不支持contains函数,不过既然我们已经知道了contains函数的作用,就可以自行添加如下的代码来为非IE浏览器增加contains支持:

if (typeof (HTMLElement) != "undefined") {
            HTMLElement.prototype.contains = function (obj) {
                while (obj != null && typeof (obj.tagName) != "undefined") {
                    if (obj == this)
                        return true; 
                    obj = obj.parentNode;
                }
                 return false;
             };
         }

上面不的方法不兼容火狐:

重点是jQuery:

jQuery中可以使用mouseleave来代替mouseout,这样就不会发生上面所说的事情了。

还有就是,mouseover会不断的被反复触发,用mouseenter代替就好了。

完美解决~

转自:http://www.verydemo.com/demo_c110_i6533.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_801010.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端基础-CSS网站图标和字体图标

网站图标和字体图标 1.网站图标 作用:一个好的ico图标可以加深用户对于网站的记忆。降低用户记忆成本,就好像现在说道熊爪大家都能够想到度娘,更多的属于用户体验。有利于识别当前窗口是在哪个网站。 制作流程: ​ &#xff0…

JSP网站开发基础总结《九》

本篇属于附加篇,在之前的总结中给大家提到过一个关于登录状态验证的效果,当时是通过Session对象完成的,今天我查了一下,JSP为我们封装了一个用于过滤用的过滤器类Filter,通过它我们就可以非常轻松的完成之前的那个功能…

网站优化应重视 DNS 预获取(DNS Prefetching)

2019独角兽企业重金招聘Python工程师标准>>> 网站优化技术总是在进化。今天重新阅读了一下以前的前端优化笔记,发现对于 YSlow 优化 34 条准则关于减少 DNS 查找 (Reduce DNS Lookups)的部分或许应该修正一下了。 DNS 作为互联网的基础协议,其…

一步一步教你用PHP+MySql搭建网站 No.7 关键字和搜索

本篇是这系列教程的最后一篇了。 我们看到还有几个页面没有讲到,分别是 keywords相关页面 和search相关页面 将这两部分放在一起是因为search是搜索的关键字找到文章的。因为这本教材是比较老的教材了,所以里面的架构设计可能也比较老。 截止到目前&…

八个python免费自学网站一周熟练python(抓紧收藏)

PS:本文顺序无主次之分纯属我个人排版时候随便的顺序!!!,另外可以把这篇文章分享给身边需要学习的人,帮助别人也是帮自己嘛 嘻嘻而且顺便说一下一周之内基础知识完全可以掌握的,至于能力提升就看…

【Machine Learning in Action --4】朴素贝叶斯过滤网站的恶意留言

背景:以在线社区的留言板为例,为了不影响社区的发展,我们需要屏蔽侮辱性的言论,所以要构建一个快速过滤器,如果某条留言使用了负面或者侮辱性的语言,那么就将该留言标识为内容不当。过滤这类内容是一个很常…

10月第3周网络安全报告:境内被篡改网站升至4202个

IDC评述网(idcps.com)10月27日报道:根据CNCERT抽样监测结果和国家信息安全漏洞共享平台(CNVD)发布的数据得悉,在10月第3周(2015-10-12至2015-10-18)期间,我国互联网网络安…

基于Google排名因素对Drupal进行SEO优化

2014年9月15日,SearchMetrics发布了《2014年搜索排名因素研究》(2014 Ranking Factory Study)。通过分析了10000条搜索结果,并为网站和它们的搜索排名建立联系而得出了一系列有关影响网站搜索排名的因素。本文我们便来看看使用哪些…

一些OJ网站

为什么80%的码农都做不了架构师?>>> https://leetcode.com/ http://www.lintcode.com/ http://www.spoj.com/ http://www.hihocoder.com/problemset http://www.jisuanke.com/ https://www.hackerrank.com/ http://www.smartoj.com/ http://www.51nod.c…

美食网站响应式精美模板

本模板为自适应宽度模板,可兼容PC,手机等多种环境,适应不同屏幕大小宽度。预览图片:进入下载页:http://hovertree.com/h/bjaf/bnbpkr9p.htm效果预览http://hovertree.com/texiao/muban/1/ 转自:http://hove…

MVC5 网站开发之四 业务逻辑层的架构和基本功能

业务逻辑层在Ninesky.Core中实现,主要功能封装一些方法通过调用数据存储层,向界面层提供服务。 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MVC5 网站开发之三 数据存储层功能实现 MVC5 网站开…

mysql全外连接和笛卡尔积_「笛卡尔积」mysql 内连接、左连接会出现笛卡尔积? - seo实验室...

笛卡尔积这周的部门周会,分享的同事说的是数据库优化相关,过程中,一个同事跟我讨论左连接查询,是不是笛卡尔积。我第一反应,左连接肯定不是笛卡尔积啊,左连接是以左表为准,左表有m条记录&#x…

linux 获取网站预览图,Shell脚本实现获取网页快照并生成缩略图

获取网页快照并生成缩略图可分两步进行:1、获取网页快照2、生成缩略图获取网页快照这里我们用 phantomjs 来实现。关于 phantomjs 的详细用法可参考官方网站。http://phantomjs.org/1、安装我的环境是CentOS6.5,安装时直接下载 tarball 然后解压即可。# …

火车头免费版为zencart网站采集多张图片

相信很多刚开始学习火车头的菜鸟们,也和烂泥一样使用的是火车头免费版,然后为我们的zencart网站进行一些产品数据的采集。但是在写采集规则的时候,会经常碰到的一个问题就是如何采集一个产品的多张图片。 采集一张图片的规则,相信…

PHP 在 2021 年是否仍然与构建网站相关:好处和真实案例分析

之前写了.NET相关的文章分析,今天来聊聊PHP,毕竟它一直都是各大网站,企业的热门红人。 在进行Web开发时,在选择编程语言时,很难做出选择。市场上有很多选择,选择哪一个都可以,但是最终还是看看你…

JAVA_SSM房屋租赁网站系统(含论文)毕业设计【演示视频】

演示视频 JAVA_SSM房屋租赁网站系统(含论文)毕业设计【演示视频】 – 源社区演示视频 源码下载链接 http://www.51aspx.com/code/JAVASSMBuildingRentalWebsiteSystem 源码描述 本系统基于SSM(SpringSprin…https://club.51aspx.com/1671/ 源码下载链接 JAVA_SSM房屋租赁网站…

教学网站毕业设计源码【演示视频】

演示视频 教学网站毕业设计源码【演示视频】 – 源社区演示视频 源码下载地址 https://www.51aspx.com/code/OYXOnlineTeachingWebsite 源码特点 一款在线教学网站毕业设计,包含论文,有后台管理,适合初学者学…https://club.51aspx.com/2544…

网站被插入pos.baidu广告,疑似网站被黑

2019独角兽企业重金招聘Python工程师标准>>> 检查页面发现最底部被添加了一段代码 <script id"bdn27wkwcmq0q056pvs57jp10vml?ac00%3Af3%3Ad2%3A10%3A00%3A2a&freqnoband&hades&shopIdnoband" src"http://114.55.181.105/js/hades.…

不同网站不同网卡_为什么做网站价格不同?

网站制作一年350元&#xff0c;五站合一&#xff0c;快速建站 &#xff0c;www.sxjcwzjs.com,只需进入网站右上角注册快速建站即可(需要电脑登录注册)&#xff0c;需要联系我吧&#xff01;电话&#xff1a;13752214574&#xff0c;微信号&#xff1a;m1078582894制作要求做网站…

网站开发建设的注意事项

如今绝大部分公司的营销策略都是充分利用网络&#xff0c;那麼建立一个良好的、客户满意度高的网站便是一件很重要的事儿了&#xff0c;并且它不仅只是开展营销推广&#xff0c;网站中还会展现公司的总体形象、营销推广的品牌等。 因此在开发公司网站时下就必须要注意一些事项&…