2011-12-18 13 views
6

olmadan her yere aramıştım ve ben güvenilir mouseenter olayı bulmak gibi olamaz.Güvenilir "MouseEnter" jQuery

buldum en yakın:

_mouseEnterLeave(ele, 'mouseenter', function(){ 
    console.log('test'); 
}); 

I (her seferinde farklı) bir kez her zaman infaz 40-47ish olsun: mouseenter without JQuery

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; 
} 

tek sorun bunu çalıştırdığınızda olmasıdır dinleyici ateş ediyor.

Ben de Quirksmode bir çalıştı:

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 
} 

http://www.quirksmode.org/js/events_mouse.html#mouseenter Ancak bu son derece güvenilmez ve sadece bu değil, bunun üst/eleman bir DIV olduğunu düşünmüştüm. Bu daha dinamik olmalı. Bu bir kütüphane/komut dosyası için jQuery içeremem. Kısacası

, ben fare hareketleri kadar gizlenir bir elementi vardır. Hareket ettikten sonra, fare hareket ettiği sürece VEYA öğenin kendisi üzerinde geziniyorsa görünür. yalnızca WebKit doğal mouseenter desteklemediği çünkü az kod harika olurdu ve ilk örnek kod büyük bir yığın sadece küçük UI şey için Chrome'u desteklemeye buna sahip bir atık gibi hissediyor.

+1

Kitaplığınız/komut dosyanız neden jQuery gerektirmiyor? – SLaks

+0

Bunu işe almak için çalışırken atlamakta olduğunuz çemberler göz önüne alındığında - neden sadece jQuery kullanmıyorsunuz? En azından fare operatörünün kullanımı için kaynak kodun ilgili bölümlerini çekebilirsiniz. o jQuery işe gitmek için MooTools dahil gibi olurdu Çünkü –

+2

... Bu yüzden * sadece * bir MouseEnter saçma çalıştırmak için komut başka 30k dahil olmak üzere, oldukça büyük Markdown editör kütüphanesidir. –

cevap

3

sadece mouseenter hurda ve bunun yerine yerine mousemove kullanmak mümkün mü? Bu, fare hareket ettiğinde bunu göstermeye özen gösterir. Doğrudan öğenin üzerinde gezindiğinde görünür kalmasını sağlamak için, bunun yerine CSS'yi kullanın.

#your_element { 
    display: none; 
} 

#your_element:hover { 
    display: block; 
} 
+0

Hmm, güzel fikir. Bunu deneyeyim ... –

+0

Bunu gizlemek için JavaScript'i geçersiz kılmak önemliydi ama işe yaradı! Hiç ek JS yok :) –

İlgili konular