JS中子元素的oumouseover触发父元素onmouseout -很像继承

一、什么叫事件对象?javascript

  • 能够获取事件对象的一系列属性,在事件中写一个参数,便可经过参数获取。代码以下(wrap是一个对象):
wrap.onmouseover = function(e) {
 e = window.event || e;        // window.event是为了兼容ie下获取事件对象,而e为标准浏览器直接获取
 }

二、事件对象的相关对象java

在触发onmouseover及onmouseout时,一定会涉及到其它对象,如:onmouseover的相关对象,即为哪一个对象进入的。onmouseout的相关对象即为进入到哪一个对象。获取方法以下(wrap是一个对象):浏览器

wrap.onmouseover = function(e) {
     e = window.event || e;
     var s = e.fromElement || e.relatedTarget;    //e.fromElement为IE下onmouseover获取相关对象方法,relatedTarget为标准浏览器下获取方法
 }
 wrap.onmouseout = function(e) {
     e = window.event || e;
     var s = e.toElement || e.relatedTarget;        //e.toElementIE下onmouseout获取相关对象方法,relatedTarget为标准浏览器下获取方法
 }

三、判断一个元素是否包含另外一个元素this

IE下能够使用a.contains(b)判断a是否包含bcode

标准浏览器下a.compareDocumentPosition(b)有5个值,若为0表示为同一节点,若为2表示a位于b后面,若为4表示a位于b前面,若为10表示a为b的后代,若为20表示a为b的祖级。对象

兼容写法:seo

function contains (a,b) {
    if (a.contains(b)) {
        a.contains(b);
    }else{
        a.compareDocumentPosition(b);
    }
}

当触发onmouseover时,多是从对象之外移入的,也有多是父级移入到子级,以及子级移出到父级,刚才也说过,onmouseover的相关对象是获取从哪一个对象进入的。若是是从外面的对象进入的,咱们就执行所需的代码。若是是从父级移入到子级或是由子级移出到父级时,则直接跳过。事件

wrap.onmouseover = function(e) {
     e = window.event || e;
     var s = e.fromElement || e.relatedTarget;
     if (document.all) {    //判断浏览器是否为IE,若是存在document.all则为IE
         if (!this.contains(s)) {    // 判断调用onmouseover的对象(this)是否包含自身或子级,若是包含,则不执行
             console.log('IE will over');
        }    
     } else {    //标准浏览器下的方法
         var reg = this.compareDocumentPosition(s);
         if (!(reg == 20 || reg == 0)) {
             console.log('Browser will over');
         }
     }
 }

当触发onmouseout时,多是从父级移到子级,也可能由子级移到父级,或是移出至父级以外。ip

父级称到子级,则相关对象为子级,子级称到父级,则相关对象为父级。get

代码以下:

wrap.onmouseout = function(e) {
     e = window.event || e;
     var s = e.toElement || e.relatedTarget;
     if(document.all) {
         if (!this.contains(s)) {
             console.log('IE will out');
        }
     } else {
         var reg = this.compareDocumentPosition(s);
         if (!(reg == 20 || reg == 0)) {
             console.log('Browser will out');
         }
     }
 }

问题获得了解决。

以上有什么不懂的能够给我发消息,我会第一时间回复的!

相关文章
相关标签/搜索