Итак, я хочу сделать инструмент для рисования с помощью SVG, я использую довольно наивный подход, чтобы изменить атрибут d моего пути:
$("div#drawarea").bind("mousemove", function(ev) {
ev.preventDefault();
ev.stopPropagation();
var pX= (ev.pageX - this.offsetLeft);
var pY= (ev.pageY - this.offsetTop);
$path.attr("d", $path.attr("d") + " L" +pX+ "," + pY); //using jquery-svg here to change the d attribute
});
Как видите, я делаю это с помощью функции mousemove. Код работает, но перестает отвечать на запросы, когда мышь движется быстро, создавая множество прямых линий, тогда как я действительно хочу, чтобы они были плавными. Я думаю, что это происходит из-за многочисленных конкатенаций строк, которые я выполняю для события mousemove (атрибут d на пути может стать довольно большим, если щелчок удерживается долго, фактически тысячи символов).
Мне интересно, есть ли какой-либо собственный способ добавления новых значений в конце пути вместо того, чтобы напрямую манипулировать атрибутом d. Я проверил исходный код jquery-svg, и кажется, что библиотека также использует наивный режим конкатенации строк внутри, поэтому использование его методов не принесет никакой пользы.
Также мне интересно, так ли это, или браузер просто ограничивает количество событий mousemove (один раз каждые X миллисекунд?), которые могут быть запущены, и поэтому никакие оптимизации производительности не улучшат это.