Вот мой полный код на jsfiddle: https://jsfiddle.net/6u7bLkwc/14/Изменить мой прямоугольник создания инструмента на html5 холст без использования цикла
Перед тем как выставить свою проблему, вы можете создать треугольники на изображении, как это:
- Нажмите на изображении, затем перетащите указатель мыши, чтобы создать его.
В чем проблема с моим кодом?
Когда я использую этот скрипт, у меня есть много лагов на моем ПК ... особенно для больших изображений!
Что я хочу?
Попробуйте использовать мой скрипт без цикла для предотвращения лаг.
Издание приходит из этой части коды:
function draw() {
ctx.drawImage(imageObj, 0, 0);
shapes.forEach(function(shape) {
var hue = Math.floor(Math.random() * 360);
ctx.fillStyle = shape.getColor();
ctx.fillRect(shape.x, shape.y, shape.width, shape.height);
});
if (isMouseDown) {
ctx.fillStyle = color;
ctx.fillRect(mouseDownX, mouseDownY, mouseX - mouseDownX, mouseY - mouseDownY);
}
}
Именно эта линия:
ctx.drawImage(imageObj, 0, 0);
Эта линия используется для нанесения фонового изображения на холст ... так как я хочу использовать этот сценарий для больших изображений (вроде 500ko и выше) и цикл его много раз !!! это создаст собственную атаку DDOSING для моего компьютера.
Почему бы не использовать эту линию вне функции рисования?
Потому что, когда я использую его снаружи, а мышь навешивает созданный прямоугольник ... я вижу черный фон ... но вот это я вижу свою фотографию. (Мышь наведите прямоугольник, сделайте его прозрачным).
Любое исправление или любая идея о том, как его исправить? любой другой подход?
Основная причина - изображение с небольшим изображением там нет лагов, но как только мы используем большое изображение в лагере браузера и ничего не работаем ... эта функция предназначена только для прямоугольников, которые не имеют места. –
Эта функция внутри вашей скрипки, которую вы указали выше, безусловно, используется, каждый раз, когда ей приходится вычислять, является ли прямоугольник видимым и наводимым, хотя, прочитав новые сообщения, я думаю, вы уже изменили код, относящийся к этому. –
Нет , я использую два разных кода. –