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

news/2024/5/10 1:51:23/文章来源:https://blog.csdn.net/weixin_30904593/article/details/99545452

话说有一个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

转载于:https://www.cnblogs.com/xwgli/p/3591991.html

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

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

相关文章

处理 Vue 单页面 SEO 的另一种思路

vue-meta-info 官方地址: https://github.com/monkeyWang... (设置vue 单页面meta info信息,如果需要单页面SEO,可以和 prerender-spa-plugin形成更优的配合) 单页面应用在前端正大放光彩。三大框架 Angular、Vue、Rea…

现货!《PHP7实践指南:o2o网站与App后台开发》京东天猫有售

终于发售了,啥也不想说了,喜欢的或需要的就点击 链接 进去购买吧。 另外此书将作为 2017 PHP全球开发者大会 现场活动用书天猫购书包邮 PHP7实践指南:O2O网站与App后台开发 数据库设计 PHP开发工程 适合作为企业内部培训、培训机构和大专院校的教学参考书…

密码学-网站的安全登录认证设计

用户登录是任何一个应用系统的基本功能,特别是对于网上银行系统来说,用户登录的安全性尤为重要。如何设计一个网站的安全登录认证程序,是本文主要讨论的问题。 静态密码存在着比较多的安全隐患,攻击者有很多手段获得静态密码&…

最近跟踪网站,发现还是存在常规网络错误。

先在国内搜索相关问题,没找到特别合适的。 无可奈何之好再去国外的找。这回终于找到正解了。 错误:偶然才发生的错误,大概过了半个小时才会出现的。 错误的原因,大概在于,sql连接池的数据连接由于某些原因变成了bad co…

实现基于LNMP 的电子商务网站

一:准备工作 1.检查防火墙和SELinux是否关闭,如果二者不关闭,会严重影响实验。 关闭防火墙:iptables -F 临时清除 可靠关闭:systemctl stop firewalld 关闭selinux:setenforce 0 永久关闭:修改配置文件vim …

写个网站吧! --Flask+Vue.js+MySQL+Docker(1)--简介

最近花了一星期的时间按照前后端分离的模式写了一个单页面网站,内容没啥新意,就是个todolist, 实现的方法也是大家很熟悉的前端vue.js,后端flask-restful,数据库MySQL,部署方式选择的是流行的docker容器部署。 原本这…

写个网站吧! --Flask+Vue.js+MySQL+Docker(2)--前端

前序内容请观看:点这儿! 写个小站的业务可能大家也不是太关心,反而页面的实现效果是最关心的,这里我就先讲前端的部分。 先说说涉及到的技术栈,首先是Vue.js,作为现在最火的前端框架,不多说啥了&#xff…

写个网站吧! --Flask+Vue.js+MySQL+Docker(3)--后端

前情回顾:写个网站吧! --FlaskVue.jsMySQLDocker(1)--简介 总结:后端好像也没啥要讲的 先说说使用的技术栈: Flask,FLask-Restful,Flask-SQLalchemy, Flask-Cors, Python-dotenv,…

写个网站吧! --Flask+Vue.js+MySQL+Docker(4)--数据库

前情回顾: 写个网站吧! --FlaskVue.jsMySQLDocker(1)--简介 说第三篇写的少,那你还没看第四篇,没错这一篇更少,少到我都想贴几个之前写的mysql的链接来水过去。 老规矩说一下技术栈&#xff…

写个网站吧! --Flask+Vue.js+MySQL+Docker(5)--docker部署

前情回顾:写个网站吧! --FlaskVue.jsMySQLDocker(1)--简介 到了最烦人最烦人的部署阶段,先简单画一个我的思路的图: 思路就是两个docker容器,一个布置前端,一个布置后端&#xff0c…

常用论文检索网站

1、https://dx.doi.org/ DOI本身有很强大的检索网站,拥有非常完善的文献储存与检索系统,进入网站之后,在输入框中粘贴进DOI号,然后点击GO就会回到刚刚那篇论文的所在的网页。也就是说,在只知道DOI的情况下,…

个人博客网站的第一次修改

前言 今天讲博客网站的部分功能修改了一下,在这里记录下来,说不定以后看起来还有点意义。 数据 首先是数据层的修复。 根据分类获取到的文章列表并没有按照事件降序排列的BUG,这个之前没有注意,使用过程中才发现。 关于浏览量…

大型网站图片服务器架构的演进

在主流的Web站点中,图片往往是不可或缺的页面元素,尤其在大型网站中,几乎都将面临“海量图片资源”的存储、访问等相关技术问题。在针对图片服务器的架构扩展中,也会历经很多曲折甚至是血泪教训(尤其是早期规划不足&am…

网站Http升级至Https(基于Tomcat)

由于之前一直忙于服创比赛,然后就导致好久没写博客了。 现在服创结束也有十来天了,感觉不写点什么就对不起自己了。 于是乎,就写写将网站从http升级到https的过程吧。首先域名和服务器自然是必须的,大致流程分为以下几部&#xff…

35个立体动感的视差滚动效果网站作品

这篇文章收集了35个具有立体动感效果的视差滚动网页设计作品分享给大家。视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验。作为今年网页设计的热点趋势,越来…

30个优秀的网站导航设计案例分享

导航是网站最重要的组成部分之一,设计优秀的导航能够引导用户浏览网站中的更多内容。为了能让导航和网页内容完美的融合在一起,设计前需要设仔细分析网页结构。这篇文章收集了30个优秀的网站导航设计案例,希望这些实例能给你带来灵感。 Fully…

分享30个优秀的网站导航设计案例

导航是网站最重要的组成部分之一,设计优秀的导航能够引导用户浏览网站中的更多内容。为了能让导航和网页内容完美的融合在一起,设计前需要设仔细分析网页结构。这篇文章收集了30个优秀的网站导航设计案例,希望这些实例能给你带来灵感。 Fully…

网站出现 502 Bad Gateway 怎么解决?

为什么80%的码农都做不了架构师?>>> 打开某网站出现一个问题如下图(这里就不说是哪个网站了),那么下面就针对这个问题分享下解决思路。 1、什么是 502 badgateway 报错 ? 简单来说 502 是报错类型代码&…

《CSS网站布局实录》读书笔记

从Web标准、HTML标记、CSS语法基础介绍到实用技巧,事无巨细。实体书已不印刷,只能下载电子版 书的背景: 国内第一本web标准的CSS布局书,2006年9月第一版,作者李超。 环境背景: 当时主流浏览器IE6与Firefox&…

谁在使用我的网站——用户行为分析

谁在使用我的网站——用户行为分析 前面根据用户的特征对用户做了分类,设定了一些常用的用户指标和值得关注的用户指标,基于这些分类用户指标的分析可以发现用户运营和推广中的诸多问题,其中活跃用户和流失用户的定义中已经用到了与用户行为相…