ホームページ  >  記事  >  ウェブフロントエンド  >  FF の onmouseenter および onmouseleave_javascript スキルと互換性のある JavaScript コード

FF の onmouseenter および onmouseleave_javascript スキルと互換性のある JavaScript コード

WBOY
WBOYオリジナル
2016-05-16 19:02:351055ブラウズ

この問題を解決するために、IE には onmouseenter と onmouseleave があります。
ffにそれがないのは残念です。改めて思ったのですが、なぜこのような優れた関数が ff で引用されないのでしょうか?
ie には onpropertychange もありますが、ff には存在しません。 。 。

FF の onmouseenter および onmouseleave と互換性を持たせるために、比較例に js が導入されています。:
コードをコピー 次のようにコードします:

var xb =
{
evtHash: [],

ieGetUniqueID: function(_elem)
{
if (_elem === window) { return 'ウィンドウ'; }
else if (_elem === document) { return 'theDocument'; }
else { return _elem.uniqueID; }
},

addEvent: function(_elem, _evtName, _fn, _useCapture)
{
if (typeof _elem.addEventListener != '未定義')
{
if (_evtName == 'mouseenter')
{ _elem.addEventListener('mouseover', xb.mouseEnter(_fn), _useCapture); }
else if (_evtName == 'mouseleave')
{ _elem.addEventListener('mouseout', xb.mouseEnter(_fn), _useCapture); }
else
{ _elem.addEventListener(_evtName, _fn, _useCapture); }
}
else if (typeof _elem.attachEvent != '未定義')
{
var key = '{FNKEY::obj_' xb.ieGetUniqueID(_elem) '::evt_' _evtName '::fn_' _fn '}';
var f = xb.evtHash[キー];
if (typeof f != '未定義')
{ return; }

f = function()
{
_fn.call(_elem);
};

xb.evtHash[キー] = f;
_elem.attachEvent('on' _evtName, f);

// IE のメモリ リークをクリーンアップするためにアンロード イベントをウィンドウにアタッチします
window.attachEvent('onunload', function()
{
_elem.detachEvent('on' _evtName 、f)
});

キー = null;
//f = null;   /* これを無効にしないでください。そうしないと、切り離すことができなくなります */
}
else
{ _elem['on' _evtName] = _fn; }
},

removeEvent: function(_elem, _evtName, _fn, _useCapture)
{
if (typeof _elem.removeEventListener != '未定義')
{ _elem.removeEventListener(_evtName, _fn, _useCapture); }
else if (typeof _elem.detachEvent != '未定義')
{
var key = '{FNKEY::obj_' xb.ieGetUniqueID(_elem) '::evt' '::fn_ ' _fn '}';
var f = xb.evtHash[キー];
if (typeof f != 'unknown')
{
_elem.detachEvent('on' _evtName, f);
delete xb.evtHash[キー];
}

key = null;
//f = null;   /* これを無効にしないでください。そうしないと、切り離すことができなくなります */
}
},

mouseEnter: function(_pFn)
{
return function(_evt)
{
var relTarget = _evt.popularTarget;                
if (this == relTarget || xb.isAChildOf(this, relTarget))
{ return; 

_pFn.call(this, _evt);
}
},

isAChildOf: function(_parent, _child)
{
if (_parent == _child) { return false };

while (_child && _child != _parent)
{ _child = _child.parentNode; }

return _child == _parent;
}
};
本篇文章出典 cssrain.cn 翻訳链接:http://www.cssrain.cn/article.asp?id=952
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。