首先补充个知识点:在发生mouseover和mouseout事件时,都会涉及把鼠标从一个元素的边界之内移到另一个元素边界之内。
对mouseover事件而言,事件的主目标是获得光标的元素,而相关元素就是那个失去光标的元素;类似地,对mouseout事件而言,事件的主目标是失去光标的元素,而相关元素则是获得光标的元素。
DOM通过event对象的relatedTarget属性提供了相关元素的信息。这个属性只对于mouseover和mouseout事件才包含值;对于其他事件,这个属性的值是null。 IE不支持realtedTarget属性,但提供了保存着同样信息的不同属性。在mouseover事件触发时,IE的fromElement属性中保存了相关元素;在mouseout事件触发时,IE的toElement属性中保存着相关元素。
obj.contains()方法,返回true或者false,当obj集合中含有特定元素或对象时返回true。
页面布局如下:
<div id="div1">
<h2 id="h2">我是H2</h2>
</div>
js代码如下:
window.onload = function (){
var oDiv = document.getElementById('div1');
oDiv.onmouseover = function (ev){
var oEvent = ev || event;
var from = oEvent.fromElement || oEvent.relatedTarget;
console.log(this);
if(this.contains(from)) return;
alert('移入div了');
};
oDiv.onmouseout = function (ev) {
var oEvent = ev || event;
var to = oEvent.toElement || oEvent.relatedTarget;
if(this.contains(to)) return;
alert('移除div1了');
};
};
展示效果:
给div加一个mouseover事件和一个mouseout事件,当鼠标在div内移入h2中(由于h2是div的子级,冒泡机制,h2移入时也会触发div的mouseover事件);当鼠标从h2移出时,相当了从div移出,所以会触发div的mouseout事件(判断去哪)