canvas中裁切(橡皮檫)的应用--探照灯,点击去除遮罩

1. 点击去除遮罩,显露出下面的图片

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas width="500" height="407"></canvas>
    <script>
        var canvas=document.querySelector("canvas");
        var ctx=canvas.getContext("2d");

        ctx.fillRect(0,0,canvas.width,canvas.height);   //画板上的遮罩,默认为黑色
        var img=new Image();
        img.addEventListener("load",loadHandler);
        img.src="./img/16.jpg";

        function loadHandler(e){
            canvas.addEventListener("mousedown",mouseHandler);
        }

        function mouseHandler(e){
            if(e.type==="mousedown"){
                canvas.addEventListener("mousemove",mouseHandler);
                canvas.addEventListener("mouseup",mouseHandler);
                canvas.addEventListener("mouseleave",mouseHandler);
            }else if(e.type==="mousemove"){
                ctx.save();
                ctx.beginPath();
                ctx.arc(e.offsetX,e.offsetY,10,Math.PI/180*0,Math.PI/180*360);
                ctx.clip();
                ctx.drawImage(img,0,0,500,407);   //每次移动都是加载新的图片到画板上
                ctx.restore();
                
            }else{
                canvas.removeEventListener("mousemove",mouseHandler);
                canvas.removeEventListener("mouseup",mouseHandler);
                canvas.removeEventListener("mouseleave",mouseHandler);
            }
        }
    </script>
</body>
</html>

2.探照灯


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas width="500" height="404"></canvas>
    <script>
        var canvas=document.querySelector("canvas");
        var ctx=canvas.getContext("2d");
        var x=50;
        var y=50;
        var speedX=2;
        var speedY=3;
        ctx.fillRect(0,0,500,404);
        var img=new Image();
        img.addEventListener("load",loadHandler);
        img.src="./img/20.jpg";


        function loadHandler(e){
            setInterval(animation,16);
        }

        function animation(){
            x+=speedX;    //探照灯的移动
            y+=speedY; 
            if(x<50 || x>500-50) speedX=-speedX;
            if(y<50 || y>404-50) speedY=-speedY;
            ctx.save();
            ctx.fillStyle="#000000";
            ctx.fillRect(0,0,500,404);
            ctx.beginPath();
            ctx.arc(x,y,50,Math.PI/180*0,Math.PI/180*360);  //探照灯的初始位置
            ctx.fill();
            ctx.clip();
            ctx.drawImage(img,0,0,500,404);
            ctx.restore();
           
        }
    </script>
</body>
</html>
posted on 2020-08-20 22:01  94Lucky  阅读(181)  评论(0编辑  收藏  举报