如何阻止事件侦听器减慢画布动画的速度?

美国队长16

我正在制作画布动画,并且刚刚开始添加事件侦听器。不幸的是,当我添加一个侦听器来跟踪光标的位置时,每次移动鼠标时,动画的速度都会大大降低。如果单击,它将完全停止。我猜想要处理的太多了,所以有没有办法改善动画的运行时间?这可以与Web Workers一起使用吗?

var canvas = document.querySelector('canvas');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
var c = canvas.getContext('2d');
//Variables for the blue ball
var bx = Math.random() * innerWidth;
var by = Math.random() * innerHeight;
var bbdx = 1;
var bbdy = 1;
var bRadius = 12;
//Variables for the red balls
var rx = Math.random() * innerWidth;
var ry = Math.random() * innerHeight;
var rrdx = 1;
var rrdy = 1;
var rRadius = 12;
//Mouse coordinate object
var mouse = {
  x: undefined,
  y: undefined
}

function bCircle() {
  c.beginPath();
  c.arc(bx, by, bRadius, 0, Math.PI * 2, false);
  c.strokeStyle = "white";
  c.stroke();
  c.fillStyle = "cornflowerblue";
  c.fill();
  c.closePath();

  //Ball bouncing Conditional
}

function rCircle() {
  c.beginPath();
  c.arc(rx, ry, rRadius, 0, Math.PI * 2, false);
  c.strokeStyle = "pink";
  c.stroke();
  c.fillStyle = "red";
  c.fill();
  c.closePath();
  //Ball Bouncing Conditional
}

//Interactivity function
function bClick() {
  window.addEventListener('mousemove', function(event) {
    mouse.x = event.x;
    mouse.y = event.y;
    console.log(mouse);
  });
}

function draw() {
  c.clearRect(0, 0, innerWidth, innerHeight);
  bCircle();
  rCircle();

  //bCircle Conditional
  if (bx + bRadius > innerWidth || bx - bRadius < 0) {
    bbdx = -bbdx;
  }
  //Conditional to mall the ball bounce up and down
  if (by + bRadius > innerHeight || by - bRadius < 0) {
    bbdy = -bbdy;
  }
  //Add 1 to x continously for it to move
  bx += bbdx;
  //Add 1 constantly to y for it to move up and down also
  by += bbdy;

  //rCircle Conditional
  if (rx + rRadius > innerWidth || rx - rRadius < 0) {
    rrdx = -rrdx;
  }
  if (ry + rRadius > innerHeight || ry - rRadius < 0) {
    rrdy = -rrdy;
  }
  rx += rrdx;
  ry += rrdy;

  bClick();
}

setInterval(function() {
  draw();
}, 8);
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Tap-Tap</title>

  <style type="text/css">
    canvas {
      border: 1px solid black;
    }
    
    body {
      margin: 0;
      background-color: black;
    }
  </style>
</head>

<body>
  <canvas></canvas>

  <script src="ball.js" type="text/javascript"></script>

</body>

</html>

尖尖的

您要在每次调用时冗余地添加“ mousemove”事件处理程序draw().addEventListener()API并不会删除已添加前处理程序。过了一会儿,将有数百个,浏览器将调用每个。

bClick()在计时器处理程序外调用一次。同样,console.log()在“ mousemove”处理程序中的调用对性能没有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

表事件侦听器

事件侦听器的范围

警告:向滚动阻止的“ touchstart”事件添加了非被动事件侦听器

无法阻止被动事件侦听器中的Default

如何在事件侦听器中覆盖事件阻止默认值?

如何阻止内联onclick事件并稍后在自己的Click侦听器中调用它?

如何清除NineOldAndroids设置的动画侦听器?

如何在Firebase值事件上设置侦听器?

如何检查侦听器事件是否是被动事件?

如何将事件侦听器添加到动画变换旋转中?

阻止div的childNodes响应div的事件侦听器

.wheel事件| 由于目标被视为被动,因此无法阻止被动事件侦听器中的Default

如何为所有滚动事件添加侦听器?

如何创建检查div元素样式的事件侦听器?

如何将事件侦听器添加到画布上绘制的矩形?

阻止函数执行或删除匿名事件侦听器

如何在会话和路由器侦听器之间注册事件侦听器?

Node.js事件侦听器被阻止?

如何通过事件侦听器在Matlab gui中的动画行中添加数据点?

画布在事件侦听器上消失

如果按下onclick,则阻止mouseout事件侦听器

Javascript事件侦听器

如何简化 javascript 事件侦听器?

如何减慢节点 JS 事件侦听器的速度?

如何向 React 组件添加事件侦听器?

反应。如何在创建的侦听器中删除事件侦听器?

如何删除事件侦听器

阻止或侦听用户在开发人员工具中删除事件侦听器?

与画布内画布对象上的事件侦听器相关的问题以及其他问题