javaScript事件onmouseout 、 onmouseove

onmouseout: 鼠标从某元素移开

onmouseover: 鼠标被移到某元素之上

这两个事件是鼠标滑过元素是的效果,可以触发事件。实现标题栏的下拉及隐藏标题栏的下拉及隐藏常用。

最近做一个简单的网站,涉及到导航栏的下拉及隐藏,导航菜单是多级的,鼠标放到导航上下拉出一级菜单,鼠标放到下拉菜单上右联出二级菜单,移走后收起来。

于是想到javaScript的各种事件,发现onmouseout 、 onmouseove符合想法。

实现时蛋疼的情况出现了,下面上代码。

<div class="logodiv" id="dw1" onmouseout="divout()">
<ul class="ul1">
<c:forEach items="${arrs }" var="arrs1" varStatus="vs">
<li onmouseover="liin1(this.id)" id="li${ vs.index+1}">
<a href="">${arrs[vs.index] }</a>
<ul class="ul11" id="ul1${ vs.index+1}">
<c:forEach items="${varLista[vs.index]}" var="vars" varStatus="livs" step="3">
<li>
<a onclick="change1('${vars.DWNAME }','${vars.DEPTNAME }');">${vars.DEPTNAME }</a>
<a onclick="change1('${vars.DWNAME }','${varLista[vs.index][livs.index+1].DEPTNAME }');">${varLista[vs.index][livs.index+1].DEPTNAME }</a>
<a onclick="change1('${vars.DWNAME }','${varLista[vs.index][livs.index+2].DEPTNAME }');">${varLista[vs.index][livs.index+2].DEPTNAME }</a></li>
</c:forEach>
</ul>
</li>
</c:forEach>
</ul>
</div>

上面代码中dw1是导航栏onmouseove事件过后显示出来的div,绑定onmouseout事件想实现的是鼠标离开后隐藏dw1。同理想的是鼠标滑过里面的li显示下级菜单,

这时候蛋疼的事情来了,鼠标一放到li上dw1的onmouseout事件触发了,dw1没有了,哎我去这啥情况啊!!!!!

实验了半天,觉得是鼠标放到li上时虽然是在dw1里面,但是实际上是聚焦到li上面了,就像是餐桌上的盘子,虽然但是。

又折腾了半天发现了一个好东西bind("mouseleave",function(){})、bind("mouseenter",function(){}),他们的作用是判断鼠标动作时移入、移出的是否是当前元素的内部元素,

注意啊是内部元素不是子元素,这可起飞了!!!!

bind("mouseleave",function(){})、bind("mouseenter",function(){})

于是一番操作下来有了下面的代码。ps:上边dw1上的onmouseout事件监听可以去掉了。

$(document).ready(function(){
console.log("hhhhhhhhhhhhh");
$("#dw1").bind("mouseleave",function(){
//alert("saaaaaaaaa");
console.log("out");
$("#dw1").hide();
});
$("#dw1").bind("mouseenter",function(){
//alert("saaaaaaaaa");
console.log("over");
//$("#dw1").hide();
//$("#dw1").show();
});
});

同时还发现了其他的方法,但是主要是针对IE浏览器,加监控后也不支持火狐,所以没有测试,这里记录一下。

contains

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

当触发onmouseover事件时,判断鼠标离开的元素是否是当前元素的内部元素,如果是,忽略此事件;
$("#popFormDiv").mouseover(function () {
var s = event.fromElement || event.relatedTarget;
if (!this.contains(s)) { $(this).show("slow"); }
});

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

当触发onmouseout事件时,判断鼠标进入的元素是否是当前元素的内部元素,如果是,忽略此事件;
$("#popFormDiv").mouseout(function () {
var s = event.toElement || event.relatedTarget;
if (!this.contains(s)) { $(this).hide("slow"); }
});

js添加如下的代码来为非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;
};
}

javaScript事件onmouseout 、 onmouseove的更多相关文章

  1. JavaScript 事件

    事件 概念:事件是可以被 JavaScript 侦测到的行为. JavaScript 使我们有能力创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触 ...

  2. javascript事件分类解析

    最近在学习javascript,就顺便把常用事件给大家整理整理,也让自己加深印象.不足之处欢迎各位补充. 一般事件 onclick 鼠标点击时触发此事件 ondblclick  鼠标双击时触发此事件 ...

  3. javascript事件与event对象的属性

    javascript事件列表解说 事件 浏览器支持 解说 一般事件 onclick IE3.N2 鼠标点击时触发此事件 ondblclick IE4.N4 鼠标双击时触发此事件 onmousedown ...

  4. jQuery事件和JavaScript事件

    1.JavaScript事件: 属性 当以下情况发生时,出现此事件 FF N IE onabort 图像加载被中断 1 3 4 onblur 元素失去焦点 1 2 3 onchange 用户改变域的内 ...

  5. javaScript事件(四)event的公共成员(属性和方法)

    一.事件 二.事件流 以上内容见:javaScript事件(一)事件流 三.事件处理程序 四.IE事件处理程序 以上内容见javaScript事件(二)事件处理程序 五.事件对象 以上内容见javaS ...

  6. JavaScript事件---事件入门

    内容提纲: 1.事件介绍 2.内联模型 3.脚本模型 4.事件处理函数 JavaScript事件是由访问Web页面的用户引起的一系列操作,例如:用户点击.当用户执行某些操作的时候,再去执行一系列代码. ...

  7. javascript事件大全4

    javascript事件列表解说 事件 浏览器支持 解说 一般事件 onclick IE3.N2 鼠标点击时触发此事件 ondblclick IE4.N4 鼠标双击时触发此事件 onmousedown ...

  8. 谈谈JavaScript事件

    众所周知,web前端包含三个基本技术:html.css和javascript.三者融合,才让网页变得精彩纷呈!如今,web上的操作越来越趋于复杂,JavaScript事件在网页中也遍地开花,有时候也是 ...

  9. 25、Javascript 事件

    Javascript 事件 是指 Javascript 捕获到用户的操作,并做出正确的相应. Javascript 事件一般与DOM元素绑定. Javascript处理事件的基本机制 1.对DOM元素 ...

  10. javascript事件详细说明

    javascript事件列表解说javascript事件列表解说事件 浏览器支持 解说一般事件 onclick IE3.N2 鼠标点击时触发此事件ondblclick IE4.N4 鼠标双击时触发此事 ...

随机推荐

  1. usb 2.0的状态跳转图

  2. vscode 中前端代码不能通过ctrl+鼠标左键点击跳转(亲测可行)

    1.ctrl+p 查找 jsconfig.json文件.如果没有,就在根目录下新建jsconfig.json 2.若已经有文件,如下图新增paths 若没有,复制下面内容到jsconfig.json ...

  3. centos7.4系统: redis配置密码

    背景:因为安全需要,对redis进行密码配置 说明:默认redis没有密码,需要自己配置密码 一.配置临时密码(重启后失效) 以下以密码:wangzy 为例 1.1 连接客户端 [root@wangz ...

  4. Cesium 结合Echarts绘制航线图

    <template> <div id="cesiumContainer"></div> </template> <script ...

  5. [JavaScript]关于prototype继承

    When it comes to inheritance, JavaScript only has one construct: objects. Each object has a private ...

  6. PowerShell学习笔记四_函数、IO操作、字符操作、数组

    使用静态方法 $now = [DateTime]::Now 实例化 $var=New-Object System.DateTime(1991,12,14)#实例化不需要[] 函数定义 Function ...

  7. 【Tomcat】ubuntu系统安装Tomcat

    Tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,支持最新的Servlet 2.4 和JSP 2.0 规范,在中小型系统和并发访问用户不是很多的场 ...

  8. python装饰器中高级用法(函数加参)

    在上一章我们说到装饰器的原则和基本用法,下面来补充一下:如果函数加参,装饰器该如何变化 1,还是用上一章的源代码 2,给test2加个参数name 报错了,本来给test2加一个name参数,为了实现 ...

  9. 获取内存及cpu信息

    <dependency> <groupId>com.github.oshi</groupId> <artifactId>oshi-core</ar ...

  10. 记SpringBoot中 Consider defining a bean of type 'com.xxx.classname' in your configuration 错误的解决办法

    一.背景 笔者项目中.有两个子模块代码.需要分别在不同的包名中运行,假设一个包名为 cn.com.a,另一个包名为cn.com.b.由于启动类只加了@SpringBootApplication注解,所 ...