if判断条件 + 50?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>canvas动画</title>
<style>
canvas{background-color:lightblue;}
</style>
</head>
<body>
<canvas width="800px" height="500px" id="canvas">您的浏览器不支持canvas</canvas>
<script>
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
//补充代码
var posx = 400,
posy = -10;
dir= 1,
timer = 0,
isMouseInRect = false;
canvas.onmousemove = function(e){
var mousex = e.offsetX,
mousey = e.offsetY;
if(mousex >= posx && mousex <= posx + 50 && mousey >= posy && mousey <= posy + 50){
// clearInterval(timer);
isMouseInRect = true;
}else{
isMouseInRect = false;
// if(timer){
// clearInterval(timer);
// }
// run();
}
}
// function run(){
timer = setInterval(function(){
console.log(timer);
if(!isMouseInRect){
posy += 10 * dir;
ctx.clearRect(0,0,canvas.width,canvas.height);
// ctx.fillStyle = 'green';
ctx.fillRect(posx,posy,50,50);
if(posy + 50 >= canvas.height){
dir = -1;
}else if(posy <= 0){
dir = 1;
}
}
},100);
// }
// run();
</script>
</body>
</html>1、if判断条件在不 +50的情况,不是已经通过mousex和mousey判断出矩形的边界了吗,为什么无法停止矩形?
2、注释部分代码,清除setInterval是为了腾出运算空间?
3、运行注释部分代码,为什么未移动到矩形内,在矩形周围就会卡顿,边卡顿边移动?
麻烦老师帮我解答下疑问,谢谢
0
收起
正在回答
1回答
你好,代码实现效果是正确的。
1、posy是开始绘制矩形的点,也就是左上角的点:

所以垂直方向的时候需要加上50,也就是矩形的高度,否则判断的就是左上角,需要判断矩形底部是否超出。
2、注释部分代码,清除setInterval是为了腾出运算空间,这样理解也是可以的,但是这里不能清除定时器,给canvas绑定的是mousemove事件,只要在canvas中移动,就会清除定时器,也就出现了同学说的第三个问题,会有卡顿现象,所以这里可以不清楚定时器。
祝学习愉快!
组件化思想开发电商网页 18版
- 参与学习 人
- 提交作业 467 份
- 解答问题 4826 个
本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星