2014-02-21 16 views
-1

我有一個跨行的表。跨越行中的某些tds具有通過jQuery定位的類,以便在鼠標進入時淡入彈出窗口。當鼠標離開td時,彈出窗口將淡出。無縫mouseenter/mouseleave來自同一類的多個元素

這裏的表:

<table> 
    <tbody> 
     <tr> 
      <td rowspan="2">Some Items</td> 
      <td class="cell-popup">A</td> 
     </tr> 
     <tr> 
      <td class="cell-popup">B</td> 
     </tr> 
    </tbody> 
</table> 

這裏是jQuery的:

var cell = $('.cell-popup'), 
     popup = $('.popup'); 

cell.on({ 
    mouseenter: function(e){ 
     popup.css({ 
      left: e.pageX + 'px', 
      top: e.pageY + 'px' 
     }).fadeIn() 
    }, 
    mouseleave: function(e){ 
     popup.fadeOut(); 
    } 
}); 

的問題是,如何才能讓當鼠標離開當前單元格並進入彈出不隱藏/顯示新的.cell-popup?我想把兩個單元格彈出窗口都視爲「一個」單元格。意思是,如果從任何.cell彈出窗口外面出來並且鼠標進入任何.cell彈出窗口,彈出窗口應該顯示。如果我從一個.cell彈出窗口移動到另一個.cell彈出窗口而不輸入非.cell彈出窗口元素,彈出窗口應該保持在原來的位置。

+0

哪裏是在.popup類你的html? –

+0

@NavinRauniyar沒有必要顯示它。 – dork

回答

0

fadeOut超時後彈出。如果在超時前鼠標進入另一個.cell-popup,請清除超時 - 有效防止fadeOut。

var fadeOutTimer = null; 
cell.on({ 
    mouseenter: function(e){ 
     if(fadeOutTimer) { // already displayed, so clear the timeout 
      clearTimeout(fadeOutTimer); 
      fadeOutTimer = null; 
     } 
     else { 
      popup.css({ 
       left: e.pageX + 'px', 
       top: e.pageY + 'px' 
      }).fadeIn(); 
     } 
    }, 
    mouseleave: function(e){ 
     fadeOutTimer = setTimeout(function() { 
      popup.fadeOut(); 
      fadeOutTimer = null; 
     }, 500); // 500ms 
    } 
}); 

丟棄超時當鼠標進入彈出:

popup.on({ 
    mouseenter: function(e){ 
     if(fadeOutTimer) { // already displayed, so clear the timeout 
      clearTimeout(fadeOutTimer); 
      fadeOutTimer = null; 
     } 
    } 
}); 
+0

謝謝!但是我怎樣才能爲彈出窗口做同樣的事情?彈出窗口顯示鼠標指向的位置。所以當我將鼠標移動到右側時,鼠標進入彈出窗口並消失。 – dork

+0

當鼠標進入彈出窗口時,放棄超時。答案已更新。 – techfoobar

+0

哎呦。對於那個很抱歉。淡出後,我刪除了彈出窗口。我必須將它重寫爲$('body')。on({mouseenter :, mouseleave:},'.popup');謝謝,@techfoobar! – dork

相關問題