91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS如何實現canvas仿ps橡皮擦刮卡效果

發布時間:2021-11-22 12:27:18 來源:億速云 閱讀:259 作者:小新 欄目:開發技術

這篇文章主要介紹了JS如何實現canvas仿ps橡皮擦刮卡效果,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

    效果演示:

    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橡皮擦刮卡效果”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    银川市| 汉阴县| 虎林市| 静宁县| 淮安市| 洞口县| 曲阜市| 合江县| 新化县| 六安市| 阿合奇县| 清徐县| 区。| 应城市| 花莲县| 石狮市| 营山县| 河津市| 南靖县| 镇远县| 读书| 沭阳县| 临海市| 许昌县| 嘉峪关市| 太谷县| 托克托县| 富裕县| 康平县| 洮南市| 北票市| 三原县| 平湖市| 乐东| 新安县| 建阳市| 大化| 吉水县| 桐庐县| 水富县| 托克托县|