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

2022-04-15 0 739
目录

    效果演示:

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

    主要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 的资料请关注NICE源码其它相关文章!

    免责声明:
    1、本网站所有发布的源码、软件和资料均为收集各大资源网站整理而来;仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 不得使用于非法商业用途,不得违反国家法律。否则后果自负!

    2、本站信息来自网络,版权争议与本站无关。一切关于该资源商业行为与www.niceym.com无关。
    如果您喜欢该程序,请支持正版源码、软件,购买注册,得到更好的正版服务。
    如有侵犯你版权的,请邮件与我们联系处理(邮箱:skknet@qq.com),本站将立即改正。

    NICE源码网 JavaScript JS实现canvas仿ps橡皮擦刮卡效果详解 https://www.niceym.com/20186.html