3 回答

TA贡献1906条经验 获得超3个赞
canvas.addEventListener("mousemove", function(e){
redMove();//这里有问题,鼠标移动事件不能传递
});
这样写事件肯定传递不了啊.因为你函数没有接收.
把redMove(e)传进去.估计也会卡顿.
卡顿的原因是你加载图片的时候.
RedBubble方法里面创建了对个图片对象,第一没有必要,第二消耗太多内存
就创建一个图片,然后在addEventListenter里面改变坐标就可以了.
这是刚写的简易代码.可以参考一下.
<canvas id="c" width="500" height="500"></canvas>
<script type="text/javascript">
var canvas = document.getElementById("c");
var ctx = canvas.getContext("2d");
var img = new Image();
img.src = "1.png";
canvas.addEventListener("mousemove",function(e){
ctx.clearRect(0,0,500,500);
ctx.drawImage(img,e.clientX,e.clientY,20,20);
})
</script>

TA贡献1942条经验 获得超3个赞
首先 分离后
1、因为没有传递 e 参数
//红色气泡添加移动函数
canvas.addEventListener("mousemove", function(e){
redMove();//这里有问题,鼠标移动事件不能传递
});
这里 redMove 函数 没有传递 e 参数, 并且也没有 全局变量做暂存处理;所以e在这里 已经废弃掉了;
导致
// 重新添加气泡
RedBubble("red.png",getMousePos(e).x,getMousePos(e).y,30,30);
这里 的 getMousePos(e) 中 参数 e 来源于 何处?
2 、抖动 是因为 没有使用硬件加速 ;只是使用定位的top left 是会造成抖动的;如果只是对图片做动画处理的话,为什么不用transform 的各个属性值呢?这样启动硬件加速 就不会造成抖动了
添加回答
举报