這可能已被回答,但無法在搜索中找到任何積極的結果。如何通過onMouseMove防止對象移動的跳轉?
有一個腳本走動使用各種額外的計算超出 「正常」 X,Y定位元素。
我沒有使用JQuery或任何其他的庫,但這裏是對核心樣本: >>fiddle < <
眼下的問題是,移動元素時,有時不更新如下: 當指針移動時元素靜止不動,然後出現一個大跳躍。
由於某種原因,這種情況在緩慢移動時經常發生。 (也許它所有的 時間,但在快速移動是不是顯着的。)
我看到這個效果,Y爲好,但不是很經常做做簡單的舉動爲x時。
問題是什麼導致這種情況,並希望如何解決。
我試圖在最後,如果鼠標移動 -event是如加上時間支票10毫秒前,什麼都不做。沒有更好的。
也試圖把元素的定位在超時爲:
setTimeout(function(){
element.style.left = x + 'px';
element.style.top = y + 'px';
}, 0);
讓瀏覽器做其他工作,但沒有任何好轉。
這在我測試過的瀏覽器的Mozilla Firefox中最引人注目。 Opera 確切地說是最流暢的。
編輯:
添加了一個簡單
console.log('1');
而且我注意到,當運動掛日誌還掛起(不記錄)。
它是在446 events
,lag,447 events
。
因此,它必須站在事件沒有觸發或類似的地區。
編輯:
@kenansulayman:
爲了闡明。我不使用setTimeout()
- 我測試有了它,還用0,1,2,3,5,10,15,...,500 +,沒有更好的結果:
我還測試了通過使用這樣的:
在鼠標按下啓動此:
Drag.int = 0;
Drag.eint = setInterval(function(){Drag.int++}, 1); /* 1 being variable. */
而且在move
添加console.log(Drag.eint)
- 1。Drag.int
增加從未有差距 - 當運動的滯後/停止發生。如:
447
448
449 <-- lag, movement stop, aprox 1-1.5 seconds
450
451
若我包括setTimeout()
要麼說 超時10或20
如果我完全缺少點 - 請讓我知道。
謝謝。是的,我嘗試了這個之前,我在我的啞巴意識到這是沒有任何處理 - 因爲在沒有事件的情況下無法捕捉 - 也沒有執行任何事件。 (應該事先測試過)。問題是沒有辦法輪詢第二點。那是;我所做的是添加一個計算運動方向和速度的例程,並據此設置位置。但是,這使得越野車運動好像在停止移動時發生滯後。 - 然後問題是[這個答案](http://stackoverflow.com/a/2601273/1968548)所述。如果我錯過了什麼,請告訴我。 +1。 – Zimzalabim
讓我明白這一點。有可能的。實際上,時間間隔是實現控制器適應性的唯一低級方法。例如,PS3的數據流不提供事件(因爲所有事情都是低級的),你需要輪詢。事件比投票更加遲滯。但是,請嘗試將setInterval(..,0)增加到10或5. Null表示NextTick,從而污染CPU,並且沒有采取任何建設性的措施,但是每秒讀取相同的值幾百萬次。 :) ***編輯:***因此,你的0時間間隔可能是你滯後的來源。不過,「Nooooo」不是一個答案。 –
添加了對Q. – Zimzalabim