День добрый! Подскажите как сделать функционал в canvas,чтобы по клику мыши по квадрату, он удалялся с экрана (с массива). В данном примере у меня удаляется весь массив, направьте на путь истинный)!
function animate() {
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
function Square(x, y, w, h) {
this.x = Math.random() * 620;
this.y = y;
this.w = w;
this.h = h;
this.r = Math.round(Math.random() * 255);
this.g = Math.round(Math.random() * 255);
this.b = Math.round(Math.random() * 255);
this.rgba = "rgba(" + this.r + "," + this.g + "," + this.b + ",1)";
this.draw = function() {
ctx.fillStyle = this.rgba;
ctx.fillRect(this.x, this.y, 20, 20);
this.update();
}
this.update = function() {
this.y += Math.random() * 2;
}
}
var squares = [];
function draw() {
ctx.clearRect(0, 0, canvas.clientWidth, canvas.clientWidth);
for (i = 0; i < squares.length; i++)
squares[i].draw();
update();
}
function update() {
for (var i = 0; i < squares.length; i++) {
squares[i].update();
}
}
setInterval(function() {
squares.push(new Square(0, 0, 20, 20))
}, 1000);
setInterval(draw, 20);
var isCursorInSquares = function(x, y, squares) {
return x > squares.x && x < squares.x + squares.w &&
y > squares.y && y < squares.y + squares.h;
}
canvas.onclick = function(e) {
var x = e.pageX;
y = e.pageY;
for (i in squares)
if (isCursorInSquares(x, y, squares[i]))
delete squares[i]
}
}
document.body.onload = animate;
<canvas id="canvas"></canvas>
Все кубики пропадают, потому что у вас в коде ошибка и скрипт перестаёт работать. Надо ваш кусок кода
for (i in squares)
if (isCursorInSquares(x, y, squares[i]))
delete squares[i]
заменить на
for(var i = squares.length - 1; i >= 0; --i)
{
if(isCursorInSquares(x, y, squares[i])) delete squares.splice(i, 1);
}
Canvas - чёрный ящик. Все что нарисовано не функционально, вы можете только перерисовать. Вместо Canvas используйте SVG. Там вы сможете сделать с графическими элементами то же, что и с DOM элементами - навешивать события, вставлять, удалять и прочее.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите, как на amp страницах сохранить функционал сайта ? Можно ли подключать к этим страницам свои скрипты ?
Имеется связка модуля и компонента в joomlaМодуль включает в себя фильтр который позволяет пользователю выбирать соотвествующие параметры