2011-12-04 12 views
3

我試圖處理mouseover/mouseout動畫,並且當鼠標懸停您之前被蒙上一層的元素時,我沒有對該語句進行評估。我試圖阻止雙滾動動畫發生。這裏是我的代碼:當設置兩個變量作爲相同的DOM元素時,jquery語句沒有評估爲true

var $chosenThumb = null; 
var $lastThumb = null; 

$('.thumb_img').mouseover(function(){ 

    if ($chosenThumb != null){ 
     $lastThumb = $chosenThumb; 
     $lastThumbContainer = $chosenThumb.parent(); 
     $lastThumbOverlay = $lastThumbContainer.children('.thumb_overlay'); 
    } 

    $chosenThumb = $(this); 

    console.log($lastThumb + "|" + $chosenThumb + "|" + ($lastThumb == $chosenThumb)); 

    $chosenThumbContainer = $(this).parent(); 
    $chosenThumbOverlay = $chosenThumbContainer.children('.thumb_overlay'); 

    if ($lastThumb != null && $lastThumb != $chosenThumb){ 
     $lastThumbOverlay.animate({ 'height' : '0px'}, 200); 
     $lastThumbContainer.children('.thumb_plus').animate({'height' :'0px', 'width' : '0px' },200); 
    } 

    if ($lastThumb != $chosenThumb) { 
     $chosenThumbOverlay.animate({ 'height' : '30px'}, 200); 
     $chosenThumbContainer.children('.thumb_plus').animate({'height' :'31px', 'width' : '31px' },200); 
    } 
}); 

所以你第一次鼠標移到縮略圖,lastThumb將是無效和chosenThumb將是你滾過大拇指。然後,下一次您將鼠標懸停在該拇指上時,lastThumb應該等於chosenThumb,但日誌語句不會評估爲true。爲什麼?

回答

2

即使是相同的選擇,每一個jQuery對象是jQuery一個新的實例。要比較的元素,你有實際的DOM元素比較:

//$lastThumb[0] returns the first DOM element from the jQuery selector 
$lastThumb[0] == $chosenThumb[0] 
-1

可能是你有同樣的號不同跨度或DIV在HTML

0

一般來說這是不妥當的擴展,因爲內存泄漏的DOM元素,但我可能會建議你在這種情況下做到這一點,如果你沒有大量的的節點。

這將防止擊發鼠標懸停事件是否已經觸發一次:

$("myselector").mouseover(function() 
{ 
    if (this.moused) 
    { 
    return; 
    } 
    else 
    { 
    this.moused = true; 
    } 
    // Do things here. 
}); 
相關問題