2010-02-25 49 views
10

我需要一種方法來執行某種「whileonmouseover」功能繼續動畫當鼠標懸停在一個元素...jQuery - 如何在鼠標懸停在某個元素上時繼續動畫?

例如,鑑於這一功能:

$(document).ready(function() 
{ 
    function doAlert() 
    { 
     alert(1); 
    } 

    $('#button').hover(function() 
    { 
     doAlert(); 
    }); 
}); 

警報將當鼠標懸停在#button上時,一次發射。我需要一種方法來繼續讓鼠標仍然在#button時發出警報...

我試過做某種函數遞歸來繼續警報,直到觸發器設置導致它停止:

$(document).ready(function() 
{ 
    var doLoop = true; 

    function doAlert() 
    { 
     if (!doLoop) return; 

     alert(1); 
     doAlert(); 
    } 

    $('#button').hover(function() 
    { 
     doAlert(); 
    }, function() 
    { 
     doLoop = false; 
    }); 
}); 

但是失敗了。似乎函數完全忽略了'懸停'中的'doLoop = false'賦值。

任何方式來完成此?

回答

1

我會建議將以下部分的$(document)的範圍之外。就緒()函數:

var doLoop = true; 

function doAlert() 
{ 
    if (!doLoop) return; 

    alert(1); 
    doAlert(); 
} 

那麼試試這個代碼,而不是:

var doLoop = true; 

function doAlert() 
{ 
    if (!doLoop) return; 

    alert(1); 
    doAlert(); 
} 

$(document).ready(function() 
{ 
    $('#button').hover(function() 
    { 
     doAlert(); 
    }, function() 
    { 
     doLoop = false; 
    }); 
}); 
+0

沒有工作。鼠標移出元素後,該功能繼續循環。 'doLoop = false'似乎沒有影響。 – dave 2010-02-25 04:05:15

+0

在這種情況下,調用doAlert中的doAlert可能會導致內存耗盡和無響應。 – Lobstrosity 2010-02-25 04:18:11

+0

我接受其他方法 – dave 2010-02-25 04:20:42

19

我會建議設置一個時間間隔而不是遞歸,因爲假設最終的解決方案不僅僅是提醒,而且還在做一些非阻塞的事情,在懸停時遞歸會快速導致內存耗費和無響應。

喜歡的東西:

var hoverInterval; 

function doStuff() { 
    // Set button's background to a random color 
    $("#button").css("background", "#" + Math.floor(Math.random() * 16777215).toString(16)); 
} 

$(function() { 
    $("#button").hover(
     function() { 
      // call doStuff every 100 milliseconds 
      hoverInterval = setInterval(doStuff, 100); 
     }, 
     function() { 
      // stop calling doStuff 
      clearInterval(hoverInterval); 
     } 
    ); 
}); 
+10

@巴里 - 將它標記爲接受的答案,然後先生,並獲得一些榮譽:-) – CResults 2010-03-02 09:32:49

相關問題