跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明

2019-06-06 07:53:44王振洲

                // 当前状态值 与 要去掉的状态值做 ^运算 即删除状态
            }
        },
        clear: function() {
            this._status = 0;
        },
        hasStatus: function(sFlags) {//sFlags "状态1,状态3.....状态 n.检查当前状态标识 是否同时 具备状态1和状态3 以及状态n
            sFlags = sFlags.split(',');
            for (var i = 0, len = sFlags.length; i < len; i++) {
                this._check(sFlags[i]);
                if ((this._status & this._flags[sFlags[i]]) != this._flags[sFlags[i]]) return false;

                //当前状态值 与输入的状态做 & 运算  如果返回值 不等于 改状态 的标识值 则 return false .

               //比如 010101 & 010000 返回010000则 说明当前标识值具备 010000这个状态.

            }
            return true;
        },
        _check: function(sFlag) {
            if (!sFlag in this._flags) throw new Error(" 当前 flag 中不存在" + sFlag + "标识");

            //检查当前输入状态字符串 是否是合法值.
        }
    }

 

 用法:

var fileStatus=new flag('readOnly,hidden,otherStatus');

fileStatus.setStatus('readOnly,hidden');

alert(fileStatus.hasStatus('readOnly'))//true;

alert(fileStatus.hasStatus('hidden'))//true;

alert(fileStatus.hasStatus('otherStatus'))//false;

 

 

最后 我们回到正题 我们借助 compareDocumentPosition 来模拟 mouseenter mouseleave

 

DOM结构:

<div id="dd" style="background-color:#369;width:50%;height:50%;position:absolute;left:25%;top:25%;" >
    <div style="background-color:#ff0;width:50%;height:50%;position:relative;left:25%;top:25%" >
        <div style="background-color:#789;width:50%;height:50%;position:relative;left:25%;top:25%" >