2013-08-28 135 views
8

在分析不同CSS動畫類型的jQuery鼠標事件時,我注意到translate3d導致懸停和其他事件無法正確觸發。translate3d()導致jQuery懸停/點擊事件無法正確觸發

在一個基本的例子中,我從右向左設置了一個塊列表的動畫。

在翻轉時,我將懸停的LI背景設置爲綠色。

注:測試是專門爲WebKit的

HTML

<div class="container"> 
    <ul> 
     <li>content</li> 
     <li>content</li> 
     ... 
    </ul> 
</div> 

CSS

.container{ 
    position: absolute; 
    left: 600px; 
    top: 0; 
} 

.container ul{ 
    list-style: none; 
    width: 9999px; 
} 

.container ul li{ 
    width: 200px; 
    height: 400px; 
    float: left; 
    background: red; 
    margin: 4px; 
} 

.animate-3d{ 
    -webkit-transition: -webkit-transform 10s linear; 
    -webkit-transform: translate3d(-6000px, 0px, 0px) 
} 

.animate-transition{ 
    transition: left 10s linear; 
    left: -6000px; 
} 

jQuery的

$('.event').bind('click', function(){ 
    $('.container').addClass('animate-3d'); 
}); 

$('.event-transition').bind('click', function(){ 
    $('.container').addClass('animate-transition'); 
}); 

$('li').bind('mouseenter mouseleave', function(e){ 
    if(e.type == 'mouseenter') 
     $(this).css('background', 'green'); 
    else 
     $(this).css('background', 'red'); 
}); 

正如你可以在附帶的小提琴中看到的,translate3d顯示了非常符合jQuery的盤旋,而翻譯是好的。

任何人都有任何線索,爲什麼這是?

http://jsfiddle.net/jkusachi/j2PSw/2/

+0

我會注意到,懸停爲translate3d工作動畫完成後。 一旦動畫完成並且您「重置」了動畫,如果您將鼠標懸停在白色區域並將其拖入白色區域,似乎只會在您的鼠標懸停在框上時觸發mouseenter/mouseleave ...挺有意思的... – jkusachi

+0

你有沒有找到解決這個問題的方法? – luwes

回答

0

你期待懸停被觸發,當鼠標靜止和鼠標下一個目標的動作?只有當鼠標在運動中時纔會發送事件,或者如果我正確記憶,則會單擊按鈕。如果鼠標沒有做任何事情,則不會觸發任何事情,包括懸停。事件基於用戶輸入,所以如果沒有用戶輸入,則不存在事件。

您可以看到,如果您將鼠標在元素上來回緩慢移動,懸停狀態將正常工作。如果您不移動鼠標,問題似乎只會出現。

也就是說,除非我錯過了這個問題,所以請澄清我是否不理解。

+0

我期待懸停在鼠標移動時觸發。如果您在附加的視頻中看到,即使在鼠標移動期間,懸停也不會被translate3d觸發: [stackoverflow-18496551.mov](https://dl.dropboxusercontent.com/u/2182459/stackoverflow-18496551.mov) 。 代碼本身是非常基本的,所以這是我的問題。它適用於轉換,只是不translate3d。 – jkusachi

+0

你使用的是什麼特定的瀏覽器,版本和操作系統?我無法在OS X 10.7上的Safari,Chrome,Firefox或IE(VM)上覆制它 – deadbabykitten