HTML5 Canvas笔记——利用剪辑区域来制作伸缩式动画

2020-05-20  本文已影响0人  没昔

剪辑区域来制作伸缩式动画

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>利用剪辑区域来制作伸缩式动画</title>
        <style>
            #canvas{
                border:1px solid cornflowerblue;
                position: absolute;
                left:150px;
                top: 10px;
                background: #EEEEEE;
                border: thin solid #aaa;
                cursor: pointer;
                box-shadow: rgba(200,200,255,0.9) 5px 5px 10px;
                -webkit-box-shadow: rgba(200,200,255,0.9) 5px 5px 10px;
                -moz-box-shadow: rgba(200,200,255,0.9) 5px 5px 10px;
            }
        </style>
    </head>
    <body>
        <canvas id="canvas" width="605" height="420">您的浏览器不支持canvas</canvas>
    </body>
    <script>
        var canvas = document.getElementById('canvas');
        var context = canvas.getContext('2d'); 
        //进行绘制文本
        function drawText(){
            context.save();

            context.shadowColor = 'rgba(100,100,150,0.8)';
            context.shadowOffsetX = 5;
            context.shadowOffsetY = 5;
            context.shadowBlur = 10;

            context.fillStyle = 'cornflowerblue';

            context.fillText('HTML5',20,250);

            context.strokeStyle = 'yellow';
            context.strokeText('HTML5',20,250);

            context.restore();
        }
        function setClippingRegion(radius){
            context.beginPath();
            context.arc(canvas.width/2,canvas.height/2,radius,0,2*Math.PI,false);
            context.clip();
        }
        //重新绘制canvas
        function fillCanvas(color){
            context.fillStyle = color;
            context.fillRect(0,0,canvas.width,canvas.height);
        }
         function endAnimation(loop){
            clearInterval(loop);
            setTimeout(function(e){
                context.clearRect(0,0,canvas.width,canvas.height);
                drawText();
            },1000);
        }
        function drawAnimationFrame(radius){
            setClippingRegion(radius);
            fillCanvas('lightgray');
            drawText();
        }
        //闭幕动画
        function animate(){
            var radius = canvas.width/2;
            var loop;

            loop = window.setInterval(function(){
                radius-=canvas.width/100;
                fillCanvas('charcoal');
                if(radius>0){
                    context.save();
                    drawAnimationFrame(radius);
                    context.restore();
                }else{
                    endAnimation(loop);
                }
            },16);
        };
        //canvas的控制器
        canvas.onmousedown = function(e){
            animate();
        }
       //初始化进行绘制
        context.lineWidth = 0.5;
        context.font = '128pt comic-sans';
        drawText();
    </script>
</html>

效果如图所示:


上一篇 下一篇

猜你喜欢

热点阅读