zoukankan      html  css  js  c++  java
  • HTML5 Canvas实现刮刮卡效果实例

    HTML:

    <style>
    #canvas {
        border: 1px solid blue;
        position: absolute;
        left: 10px;
        top: 10px;
        background:url(../Images/1.jpg) no-repeat center center;
        background-size:contain;
    }
    </style>
    <canvas id="canvas"></canvas>

    一、解决方案1是使用clearRect清空鼠标位置的像素

    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    ctx.fillStyle = 'gray';
    ctx.rect(0, 0, canvas.width, canvas.height);
    ctx.fill();
    //解决方案1是使用clearRect清空鼠标位置的像素
    var isClear = false;
    //设置清空部分
    canvas.onmousedown = function (ev) {
        isClear = true;
    }
    canvas.onmouseup = function () {
        isClear = false;
    }
    canvas.onmousemove = function (ev) {
        if (isClear == false)
            return;
        ev = ev || window.event;
        //清空像素,根据当前所在点
        var curX = ev.clientX - canvas.offsetLeft;
        var curY = ev.clientY - canvas.offsetTop;
        var step = 20;
        ctx.clearRect(curX - step / 2, curY - step / 2,
            step, step);
        ev.stopPropagation();
    }

    二、解决方案2是使用globalCompositeOperation,重叠处理,重叠的透明处理

    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    ctx.fillStyle = 'gray';
    ctx.rect(0, 0, canvas.width, canvas.height);
    ctx.fill();
    
    //解决方案2是使用globalCompositeOperation,重叠处理
    //优点使用 fill() 不限制是否是矩形
    //在与源不重叠的区域上保留目标。其他部分都变成透明的。
    ctx.globalCompositeOperation = 'destination-out';
    var isClear = false;
    //设置清空部分
    canvas.onmousedown = function (ev) {
        isClear = true;
    }
    canvas.onmouseup = function () {
        isClear = false;
    }
    canvas.onmousemove = function (ev) {
        if (isClear == false)
            return;
        ev = ev || window.event;
        //清空像素,根据当前所在点
        var curX = ev.clientX - canvas.offsetLeft;
        var curY = ev.clientY - canvas.offsetTop;
        var step = 10;
        ctx.beginPath();
        ctx.arc(curX, curY, step, 0, Math.PI * 2, false);
        ctx.fill();
        ev.stopPropagation();
    }

  • 相关阅读:
    关于Vue修改默认的build文件存放的dist路径
    JSON.stringify的三个参数(转载)
    JS获取字符串实际长度(包含汉字)的简单方法
    JSON.stringify() 和 JSON.parse()
    iPhone各种机型尺寸、屏幕分辨率
    jquery each 遍历
    React 內联式样
    组件Refs(操作DOM的2⃣️两种方法)
    可复用组件
    事件与数据的双向绑定
  • 原文地址:https://www.cnblogs.com/tianma3798/p/5897416.html
Copyright © 2011-2022 走看看