所以我寫了一種繪圖腳本,現在它工作的很好(雖然代碼仍然需要清理並且需要更多的功能),但是當繪畫太多時,mousemove
滯後令人難以置信的。這裏是主要的Javascript:防止在DOM中滯後
$('#canvas').on('mousedown', function(){
going = !going;
$(this).on('mousemove', function(e){
if(cursor == 'paint' && going == true){
$('.fall').each(function(){
if ($(this).css("opacity") == 0){
$(this).remove();
};
});
var ps = $('#canvas').offset().top;
var t = (e.pageY - ps - $('.fall').height()).toString() + 'px';
var l = (e.pageX - $('.fall').width()).toString() + 'px';
$('.fall').css("margin_left",l);
$('.fall').css("margin_top",t);
var doit = '<div class="fall" style="position:absolute;margin-left:' + l + ';margin-top:' + t + ';background-color:'+ color +';box-shadow: 0px 0px 5px ' + color + ';"></div>'
$('#canvas').prepend(doit);
}
else if(cursor == 'erase'){
$('.fall').mouseenter(function(){
$(this).fadeOut('fast',function(){
$(this).remove()
});
});
};
});
從本質上講,當你在部分中單擊繪圖,如果點擊該按鈕,油漆,可以得出:jsfiddle。
我的問題:
如果你畫太多了,尤其是啓動和停止,它並不追加足夠的mousemove
做的(我認爲)的DOM被淹沒。
問:
什麼會是很多很多的div添加到DOM而不產生滯後的有效途徑?這可能嗎?
注:
這是一個個人項目,我沒有興趣使用先前創建繪圖API
您正在爲每個「mousedown」添加**另一個**「mousemove」處理程序。調用'.on()'不會刪除任何以前的處理程序! – Pointy
嗯,我想這是真的!我將如何刪除處理程序? –
有沒有必要刪除舊的處理程序;只需將該代碼添加到其他「mousemove」處理程序即可。此外,更新「光標」的代碼非常昂貴。您應該嘗試從事件對象獲取鼠標座標,而不是詢問DOM。 – Pointy