使用Canvas画一个弹跳的皮球

本文介绍了一个使用HTML5 Canvas实现的简单动画案例,通过JavaScript控制圆形在画布上上下移动,并在背景画布上加载图片。文章展示了如何利用Canvas API进行绘图、清除和更新画布内容。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #bgCanvas{
            position: absolute;
            top: 50px;
            left: 20px;
            z-index: 2;
        }
        #bgCanvas{
            position: absolute;
            top: 50px;
            left: 20px;
            z-index: 3;
        }
    </style>
</head>
<body>

<input type="button" value="开始" onclick="beginAni();">
<input type="button" value="结束" onclick="stopAni();">

<canvas id="myCanvas" width="1024" height="485"></canvas>
<canvas id="bgCanvas" width="400" height="500"></canvas>


<script>
    var bgCanvas = document.getElementById("bgCanvas");//获取画布对象
    var bgCtx = bgCanvas.getContext("2d")//拿到上下文对象
    var image01 = new Image();
    image01.src = "1.jpg";
    image01.onload = function () {
        bgCtx.drawImage(image01,0,0); //异步加载
    }

    var myCanvas = document.getElementById("myCanvas");//获取画布对象
    var ctx = myCanvas.getContext("2d")//拿到上下文对象
    //不变的元素
   var circle_x = 100;
   var circle_r = 50;

   //变化的元素
    var circle_y = 0;
    var offset = 1;

    var intervalFlg = 0;
    var flg = -1;
    function clearAndRedraw() {
        ctx.clearRect(0,0,myCanvas.width,myCanvas.height);
        ctx.beginPath();
        ctx.arc(circle_x,circle_y,circle_r,0,Math.PI*2,false);
        ctx.strokeStyle = "red";
        ctx.fillStyle = "red";
        ctx.fill();
        ctx.stroke();
        ctx.closePath();

        if ((flg == -1 && circle_y<=myCanvas.height) || circle_y <= 0){
            circle_y+=offset;
            flg = -1;
        }
        if (circle_y == myCanvas.height || flg == 1){
            circle_y-=offset;
            flg = 1;
        }

    }
    function  beginAni() {
        if(intervalFlg == 0){
            intervalFlg = setInterval(clearAndRedraw,5);//周期性调用
        }

    }
    function stopAni() {
        if(intervalFlg != 0){
            clearInterval(intervalFlg);
            intervalFlg = 0;
        }
    }
</script>

</body>
</html>





评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值