您的位置:首页> 前端教程> JS教程
文章导航

JavaScript mouseenter 事件

2019-2-13 15:52| 作者: admin| 查看: 988| 评论: 0|来自: 蚂蚁部落

当鼠标指针进入指定元素时触发mouseenter事件。

需要说明一点,不一定非得是鼠标设备,也可能是其他设备,最为常见的当然是鼠标。

关于事件处理函数注册,可以参阅如何注册事件处理函数一章节。

此事件的功能从它的名称也可以猜测出来,它的名称有两个单词构成,分别如下:

(1).mouse:翻译成汉语具有"鼠标"的意思。

(2).enter:翻译成汉语具有"进入"的意思。

mouseenter事件与mouseover事件非常类似,当然区别也是很明显的,本文不做过多介绍。

关于两个事件的区别可以参阅mouseenter事件与mouseover事件区别一章节。

此事件虽然简单,但具有一些特点需要特别注意,主要特点如下:

(1).此事件不具有事件冒泡现象,也就是子元素的事件不会通过冒泡方式传达到父元素。

(2).鼠标指针从子元素移动到父元素,此事件不会触发。

浏览器支持:

(1).IE浏览器支持此事件。

(2).edge浏览器支持此事件。

(3).火狐浏览器支持此事件。

(4).Opera浏览器支持此事件。

(5).谷歌浏览器支持此事件。

(6).safria浏览器支持此事件。

代码实例:

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style>
#ant{
  width:200px;
  height:100px;
  background-color:#ccc;
}
</style>
<script>
window.onload=function(){
  let odiv=document.getElementById("ant");
  odiv.onmouseenter=function(){
    this.style.backgroundColor="green";
  }
}  
</script>  
</head>
<body>
  <div id="ant"></div>                   
</body>
</html>

上面简单演示了此事件的基本功能,当鼠标移入div元素时,mouseenter 事件就会触发。

于是最后将div元素的背景颜色动态设置为绿色。下面再来介绍一下前面列举的mouseenter的特点。

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style> 
#outer{
  position: relative;
  width: 200px;
  height: 200px;
  margin: 100px;
  background-color:green;
}
#inner{
  position: absolute;
  left: -50px;
  top: 0;
  width: 100px;
  height: 100px;
  background-color:blue;
}       
</style>
<script>
window.onload=function(){
  let outer=document.getElementById("outer");
  outer.onmouseenter = function(ev){
    console.log(ev.target.id)
  }
} 
</script>
</head>
<body>
  <div id="outer">    
    <div id="inner"></div>
  </div>
</body>
</html>

首先对代码进行一下简单分析:

(1).inner是outer的子元素,通过定位方式将其移出父元素。

(2).虽然在视觉上子元素脱离父元素,但是在文档树中,依然是其子元素,有固有从属关系。

(3).当鼠标移入子元素的时候,虽然在视觉上看起来没有移入父元素,其实已经移入父元素了。

(4).上述代码的能够打印出事件触发的源对象,以此证明此事件并没有冒泡现象。

当鼠标移入子元素的时候,谷歌开发者工具控制台会打印出如下结果:

a:3:{s:3:\"pic\";s:43:\"portal/201902/13/194806l0h8ddrah3jajz7j.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

如果如果此事件支持冒泡,那么打印结果必然是"inner",由此可以证明此事件不支持冒泡。

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style> 
#outer{
  position: relative;
  width: 300px;
  height: 200px;
  margin: 10px;
  background-color:green;
}
#inner{
  position: absolute;
  left: 80px;
  top: 60px;
  width: 100px;
  height: 50px;
  background-color:blue;
}       
</style>
<script>
window.onload=function(){
  let outer=document.getElementById("outer");
  outer.onmouseenter = function(ev){
    console.log(ev.target.id)
  }
} 
</script>
</head>
<body>
  <div id="outer">    
    <div id="inner"></div>
  </div>
</body>
</html>

先说结论,鼠标指针从子元素移入父元素的时候,mouseenter事件不会触发。

首先,鼠标指针移入inner元素,然后在从inner元素移入外层outer元素,不再触发事件。

这很容易理解,虽然鼠标指针在子元素,事实上也是出于父元素中,这个事实已经存在。

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style>
#ant{
  width:200px;
  height:100px;
  background-color:#ccc;
}
</style>
<script>
window.onload=function(){
  let odiv=document.getElementById("ant");
  let count=0;
  odiv.onmousemove=function(){
    count=count+1;
    odiv.innerHTML=count;
  }
}  
</script>  
</head>
<body>
  <div id="ant"></div>                   
</body>
</html>

上面是对于mousemove事件的演示,在元素中移动鼠标指针,事件会不断触发。

当然两个事件的区别十分明显,最为相似的是mouseover事件,两者区别本文不再做介绍,可以参阅文章开头推荐的关于两个事件区别的文章。

1

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (1 人)

最新评论

返回顶部