前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >canvas动画-跟着鼠标移到的小球 原

canvas动画-跟着鼠标移到的小球 原

作者头像
tianyawhl
发布2019-04-04 09:41:39
4590
发布2019-04-04 09:41:39
举报
文章被收录于专栏:前端之攻略前端之攻略

小球可以跟着鼠标移到,点击小球时会按既定的坐标移到小球(不再跟着鼠标移到),鼠标移出canvas,此时动画停止,鼠标进入动画时动画开始

代码语言:javascript
复制
<canvas id="canvas" width="600" height="300" style="border:1px solid #ccc;"></canvas>
代码语言:javascript
复制
<script>
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
var raf;
var running = false;
var ball = {
    x: 100,
    y: 100,
    vx: 5,
    vy: 2,
    radius: 25,
    color: "purple",
    draw: function() {
        context.beginPath();
        context.arc(this.x, this.y, this.radius, 0, 2 * Math.PI, true);
        context.closePath();
        context.fillStyle = this.color;
        context.fill();
    }
}

function clear() {
    context.fillStyle = 'rgba(255,255,255,0.3)';
    context.fillRect(0, 0, canvas.width, canvas.height);
}

function draw() {
    clear()
    ball.draw();
    ball.x += ball.vx;
    ball.y += ball.vy;
    //加速度,
    ball.vy *= .99;
    ball.vy += .25;
    //边界检测,
    if (ball.y + ball.vy > canvas.height || ball.y + ball.vy < 0) {
        ball.vy = -ball.vy
    }
    if (ball.x + ball.vx > canvas.width || ball.x + ball.vx < 0) {
        ball.vx = -ball.vx
    }
    //递归执行draw()
    raf = window.requestAnimationFrame(draw)
}

canvas.addEventListener("mousemove", function(e) {
    if (!running) {
        clear()
		ball.x = e.layerX;
		ball.y = e.layerY;
        //ball.x = e.clientX;
        //ball.y = e.clientY;
        ball.draw()
    }
})

canvas.addEventListener("click", function(e) {
    if (!running) {
        raf = window.requestAnimationFrame(draw);
        //作用是避免准备移出时,圆圈跟着鼠标运动
        running = true;
    }
})
canvas.addEventListener("mouseout", function() {
    window.cancelAnimationFrame(raf);
    //重置running,为下一次mousemove做准备
    running = false;
})
ball.draw()
</script>

查看动画效果

https://cloud.tencent.com/developer/support-plan?invite_code=2758nhrdof0gg

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档