2014-07-16 113 views
4

我用Tweenlite動畫框做了一個codepen。該框有一個:懸停在CSS中。 如果您將鼠標放在動畫框的路徑中,以便點擊鼠標,您將看到懸停效果不會發生。只有當鼠標移動它時纔會發生。懸停不起作用於動畫div

我該如何解決這個問題?

http://codepen.io/anon/pen/EfAGn

.box { 
    width:50px; 
    height:50px; 
    position:relative; 
    margin-bottom:2px; 
} 

.red { 
    background-color:red; 
} 

.red:hover{ 
    background-color: white; 
} 
+0

它爲我的Firefox版本30.0,但無法在Chrome 35.0。 – kbirk

+0

對於Chrome 35中的我,只有在第一次觸發':hover'事件後才能使用。 – RevanProdigalKnight

回答

2

這裏的Jcubed的回答的延續:

基本上就是計算鼠標位置,並檢查它針對的對象的位置,然後看是否兩者之間的距離每100ms小於25px。

如果對象小於25px(對象寬度的一半),那麼它就在它的內部,並將添加懸停類。如果它更大,它將刪除懸停類。

CodePen

(function() { 


    $("#restart").on("click", function() { 
     tl.restart(); 
    }) 
    var mX, mY, distance, mousePosition, 
     $distance = $('#distance span'), 
     $element = $('#redBox'); 
    // Movement 
    var tl = new TimelineLite() 
    tl.to($element, 15, {x:550}); 

    setInterval(function() { 

     function calculateDistance(elem, mouseX, mouseY) { 
      return Math.floor(Math.sqrt(Math.pow(mouseX - (elem.offset().left+(elem.width()/2)), 2) + Math.pow(mouseY - (elem.offset().top+(elem.height()/2)), 2))); 
     } 

     $(document).mousemove(function(e) { 
      mX = e.pageX; 
      mY = e.pageY; 
      mousePosition = (mX, mY); 
      $distance.text(distance); 
     }); 
     distance = calculateDistance($element, mX, mY); 
     if(distance < 25){ 
      console.log("Mouse Has Entered"); 
      //adding hovered class 
      $($element).addClass('hovered'); 
     } 

     else{ 
      // removing hovered class 
      $($element).removeClass('hovered'); 
     } 
    // Setting Timeout 
    }, 100); 
})(); 

Here's some additional information from Chris Coyier

+0

謝謝MathiasaurusRex - 那會很好。 – Torben

2

這可能是一個瀏覽器的bug。看起來瀏覽器只是在鼠標移動時重新評估懸停狀態,而不是動畫改變時。

您需要做的是可能需要手動檢查框的位置以及用戶的鼠標在每幀的位置,然後通過JavaScript更新CSS,而不是依靠:hover

或者,等待瀏覽器修復這個錯誤。作爲@Pondwater指出的那樣,在Firefox 30

+0

是的,當你將鼠標懸停在元素上並且不移動鼠標時,':hover'狀態一直持續到移動鼠標爲止。 這個問題也有點深刻。在該Codepen上,單擊重新啓動按鈕。然後將鼠標懸停在元素上,並且不要移動鼠標。等到元素移出光標。然後按Enter觸發重新啓動。 ':hover'狀態仍然存在。 – jonsuh