Итак, я пишу сценарий рисования, и сейчас он отлично работает (хотя код еще нужно очистить, и там должно быть больше возможностей), но при рисовании слишком много, 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-перегружают.
Вопрос:
Что бы быть эффективным способом, чтобы добавить много много дивов в DOM без создания лаг? Это возможно?
Примечание:
это личный проект, и я не заинтересован в использовании ранее созданное рисование API,
Вы добавляете ** еще один обработчик «mousemove» на каждом «mousedown». Вызов '.on()' не удаляет никаких предыдущих обработчиков! – Pointy
hmmmm Я думаю, это правда! Как удалить обработчик? –
Нет необходимости удалять старые обработчики; просто добавьте этот код в другой обработчик mousemove. Кроме того, код, который обновляет «курсор», чрезвычайно дорог. Вы должны попытаться получить координаты мыши из объекта события вместо опроса DOM. – Pointy