您当前的位置:首页 > 网站建设 > javascript
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery | 小程序 |

JS实现canvas仿ps橡皮擦刮卡效果详解

51自学网 2022-02-21 13:37:05
  javascript

效果演示:

主要JS代码实现

 <div class="box" id="bb">        <canvas id="cas" width="1366" height="651"></canvas>    </div>     <script type="text/javascript" charset="utf-8">        var canvas = document.getElementById("cas"),            ctx = canvas.getContext("2d");        var x1, y1, a = 30,            timeout, totimes = 100,            jiange = 30;        canvas.width = document.getElementById("bb").clientWidth;        canvas.height = document.getElementById("bb").clientHeight;        var img = new Image();        img.src = "sha.jpg";        img.onload = function() {            ctx.drawImage(img, 0, 0, canvas.width, canvas.height)            //ctx.fillRect(0,0,canvas.width,canvas)            tapClip()        }         //通过修改globalCompositeOperation来达到擦除的效果        function tapClip() {            var hastouch = "ontouchstart" in window ? true : false,                tapstart = hastouch ? "touchstart" : "mousedown",                tapmove = hastouch ? "touchmove" : "mousemove",                tapend = hastouch ? "touchend" : "mouseup";             ctx.lineCap = "round";            ctx.lineJoin = "round";            ctx.lineWidth = a * 2;            ctx.globalCompositeOperation = "destination-out";             canvas.addEventListener(tapstart, function(e) {                clearTimeout(timeout)                e.preventDefault();                 x1 = hastouch ? e.targetTouches[0].pageX : e.clientX - canvas.offsetLeft;                y1 = hastouch ? e.targetTouches[0].pageY : e.clientY - canvas.offsetTop;                 ctx.save();                ctx.beginPath()                ctx.arc(x1, y1, 1, 0, 2 * Math.PI);                ctx.fill();                ctx.restore();                 canvas.addEventListener(tapmove, tapmoveHandler);                canvas.addEventListener(tapend, function() {                    canvas.removeEventListener(tapmove, tapmoveHandler);                     timeout = setTimeout(function() {                        var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);                        var dd = 0;                        for (var x = 0; x < imgData.width; x += jiange) {                            for (var y = 0; y < imgData.height; y += jiange) {                                var i = (y * imgData.width + x) * 4;                                if (imgData.data[i + 3] > 0) {                                    dd++                                }                            }                        }                        if (dd / (imgData.width * imgData.height / (jiange * jiange)) < 0.4) {                            canvas.className = "noOp";                        }                    }, totimes)                });                            canvas.addEventListener(tapmove, tapmoveHandler);                canvas.addEventListener(tapend, function() {                    canvas.removeEventListener(tapmove, tapmoveHandler);                     timeout = setTimeout(function() {                        var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);                        var dd = 0;                        for (var x = 0; x < imgData.width; x += jiange) {                            for (var y = 0; y < imgData.height; y += jiange) {                                var i = (y * imgData.width + x) * 4;                                if (imgData.data[i + 3] > 0) {                                    dd++                                }                            }                        }                     }, totimes)                 });                     }    </script>    <script type="text/javascript">        window.setTimeout('CountDown()', 100);        // End    </script>

以上就是JS实现canvas仿ps橡皮擦刮卡效果详解的详细内容,更多关于JS 的资料请关注51zixue.net其它相关文章!


下载地址:
vue利用openlayers加载天地图和高德地图
Javascript&nbsp;Bootstrap的网格系统,导航栏和轮播详解
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。