Osc*_*son 6 javascript javascript-events mouseevent
我一直在寻找各处,我似乎找不到可靠的mouseenter事件.
我发现最接近的是:没有JQuery的mouseenter
function contains(container, maybe) {
return container.contains ? container.contains(maybe) : !!(container.compareDocumentPosition(maybe) & 16);
}
var _addEvent = window.addEventListener ? function (elem, type, method) {
elem.addEventListener(type, method, false);
} : function (elem, type, method) {
elem.attachEvent('on' + type, method);
};
var _removeEvent = window.removeEventListener ? function (elem, type, method) {
elem.removeEventListener(type, method, false);
} : function (elem, type, method) {
elem.detachEvent('on' + type, method);
};
function _mouseEnterLeave(elem, type, method) {
var mouseEnter = type === 'mouseenter',
ie = mouseEnter ? 'fromElement' : 'toElement',
method2 = function (e) {
e = e || window.event;
var related = e.relatedTarget || e[ie];
if ((elem === e.target || contains(elem, e.target)) &&
!contains(elem, related)) {
method();
}
};
type = mouseEnter ? 'mouseover' : 'mouseout';
_addEvent(elem, type, method2);
return method2;
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,当我运行它:
_mouseEnterLeave(ele, 'mouseenter', function(){
console.log('test');
});
Run Code Online (Sandbox Code Playgroud)
每次听众开火时,我都会立即执行40-47(每次不同)的执行.
我也尝试过Quirksmode:http://www.quirksmode.org/js/events_mouse.html#mouseenter
function doSomething(e) {
if (!e) var e = window.event;
var tg = (window.event) ? e.srcElement : e.target;
if (tg.nodeName != 'DIV') return;
var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
while (reltg != tg && reltg.nodeName != 'BODY')
reltg= reltg.parentNode
if (reltg== tg) return;
// Mouseout took place when mouse actually left layer
// Handle event
}
Run Code Online (Sandbox Code Playgroud)
然而,这个非常不可靠,不仅如此,它假设父/元素是一个DIV.这必须更具活力.这是一个库/脚本,所以我不能包含jQuery.
简而言之,我有一个隐藏的元素,直到鼠标移动.移动后,只要鼠标移动或鼠标悬停在元素本身上,它就会出现.更少的代码将是非常棒的,因为只有WebKit本身不支持,mouseenter并且从第一个示例获得大量代码只是为了支持Chrome用于小UI的事情感觉很浪费.
是否可以直接废弃mouseenter并使用mousemove?它负责在鼠标移动时显示它。要使其在直接悬停在元素上时保持可见,只需使用 CSS 即可。
#your_element {
display: none;
}
#your_element:hover {
display: block;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |