2015-05-25 97 views
1

我想要一個div在鼠標距離它x距離時移動。自動更新Javascript

$(document).mousemove(function(e) { 
     mX = e.pageX; 
     mY = e.pageY; 

     distance = calculateDistance(element, mX, mY); 

     if (distance<100) { 
      $(element).css("left", moveAcc + "px"); 
      moveAcc = moveAcc + 1; 
     }   
    }); 

JSFiddle- 你必須選擇的jQuery 1.11.0庫

但由於條件是鼠標移動功能內,當移動鼠標也只能移動元素, 而不是當鼠標在x距離內時移動。

爲此,我需要更新一些東西,檢查每個框架是否滿足條件。

例,在帕斯卡對我的項目,我會把整個代碼的重複之間,直到()

在ActionScript還有的addEventListener(Event.ENTER_FRAME,功能);

我可以在Javascript中使用什麼?你會想出什麼其他方法? - 我確實發現了這個Javascript Version of AS3 enterframe event但它是4歲,現在會有所不同。

可以將代碼放入setInterval函數嗎?

回答

1

您在查找​​方法。

它做什麼?它會在下一幀渲染之前執行傳遞給它的方法。但要注意,不是所有的瀏覽器都支持它,你可以使用它或填充工具只是一個setInterval

例子:

function checkDistance() { 
    \\ Do your job here 
    window.requestAnimationFrame(checkDistance); 
} 
window.requestAnimationFrame(checkDistance); 

更多信息:

https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame

+0

如何獲取事件處理程序之外的鼠標座標? – Teemu

+0

觸發鼠標移動時,您需要將座標存儲在外部範圍內。 –

+0

不會陷入無限循環或什麼?函數被調用,然後在函數內部調用它自己。 (我真正需要的是一個循環)。 Btw vi queésbrasileiro^_^o // mas o siteéem inglêssoo。我聽說html5接近閃光燈,閃光燈可能會過時,所以我停止學習閃光燈,並決定去尋找html,css,javascript等等。但是,我可以使用html製作[Kingdom Rush](http://armorgames.com/play/12141/kingdom-rush?via-search=1)嗎?不要遊戲需要一個不斷的循環/屏幕刷新? – Harlequin

1

您有兩種方法這樣做:

  1. 在文檔對象上添加一個事件偵聽器並測量元素位置和鼠標位置,然後檢查當前鼠標位置是否在這些位置之間。 (如果只有一個元素,則不建議這種方式)
  2. 直接在元素上添加事件偵聽器,並檢查當前鼠標位置是否與您想要的位置完全相同。

如果你有一個寫得很好的鼠標事件監聽器,那麼你不需要使用interval更新函數。

+0

事件監聽器在聽什麼?鼠標移動?它最終是相同的= P,它只在鼠標移動時檢查距離。無論用戶閒置,我都需要一個連續的循環。 – Harlequin

1

我會嘗試宣告你的鼠標X和Y變量鼠標移動的方法之外,這樣即使您的鼠標停止移動,最後一個位置(目前真的)仍然是可以訪問..

var mX; 
var mY; 
$(document).mousemove(function(e) { 
    mX = e.pageX; 
    mY = e.pageY; 
}); 

然後,可以在可以檢查這些變量中的值的時間間隔上有第二種方法,並相應地移動框。

setInterval(function(){ 

    // Code to calculate distance etc. 

    distance = calculateDistance(element, mX, mY); 

    if (distance<100) { 
     $(element).css("left", moveAcc + "px"); 
     moveAcc = moveAcc + 1; 
    } 

},100); // Whatever interval you see fit instead of 100ms