キャンバスでPS消しゴムスクラッチカードの効果を実現するためのJSの使用方法の詳細な説明

キャンバスでPS消しゴムスクラッチカードの効果を実現するためのJSの使用方法の詳細な説明

効果のデモンストレーション:

メインJSコード実装

 <div class="box" id="bb">
        <canvas id="cas" width="1366" height="651"></canvas>
    </div>
 
    <script type="text/javascript" charset="utf-8">
        var キャンバス = document.getElementById("cas"),
            ctx = キャンバス.getContext("2d");
        var x1, y1, a = 30,
            タイムアウト、totimes = 100、
            江下 = 30;
        キャンバスの幅 = document.getElementById("bb").clientWidth;
        キャンバスの高さ = document.getElementById("bb").clientHeight;
        var img = 新しい画像();
        画像を拡大
        img.onload = 関数() {
            ctx.drawImage(画像, 0, 0, キャンバス.幅, キャンバス.高さ)
            //ctx.fillRect(0,0,キャンバス.幅,キャンバス)
            タップクリップ()
        }
 
        //globalCompositeOperation関数tapClip()を変更して消去効果を実現します。
            var hastouch = "ontouchstart" in window ? true : false,
                tapstart = hastouch ? "touchstart" : "mousedown",
                tapmove = hastouch ? "touchmove" : "mousemove",
                tapend = hastouch ? "touchend" : "mouseup";
 
            ctx.lineCap = "丸い";
            ctx.lineJoin = "丸め";
            ctx.lineWidth = a * 2;
            ctx.globalCompositeOperation = "destination-out";
 
            canvas.addEventListener(tapstart, 関数(e) {
                clearTimeout(タイムアウト)
                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(tapend, 関数() {
                    キャンバスのtapmoveイベントリスナーを削除します。
 
                    タイムアウト = setTimeout(関数() {
                        var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
                        var dd = 0;
                        (var x = 0; x < imgData.width; x += jiange) {
                            (var y = 0; y < imgData.height; y += jiange) {
                                var i = (y * imgData.width + x) * 4;
                                (imgData.data[i + 3] > 0)の場合{
                                    dd++
                                }
                            }
                        }
                        (dd / (imgData.width * imgData.height / (jiange * jiange))< 0.4)の場合{
                            キャンバス.className = "noOp";
                        }
                    }, トゥタイムズ)
                });
 
           
                キャンバスにイベントリスナーを追加します。
                canvas.addEventListener(tapend, 関数() {
                    キャンバスのtapmoveイベントリスナーを削除します。
 
                    タイムアウト = setTimeout(関数() {
                        var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
                        var dd = 0;
                        (var x = 0; x < imgData.width; x += jiange) {
                            (var y = 0; y < imgData.height; y += jiange) {
                                var i = (y * imgData.width + x) * 4;
                                (imgData.data[i + 3] > 0)の場合{
                                    dd++
                                }
                            }
                        }
 
                    }, トゥタイムズ)
 
                });
 
            
        }
    </スクリプト>
    <script type="text/javascript">
        ウィンドウ.setTimeout('CountDown()', 100);
        // 終わり
    </スクリプト>

上記は、JS を使用してキャンバスを PS 消しゴム スクラッチ カードに似せる効果を実現する方法の詳細な内容です。JS の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • js キャンバスは消しゴム効果を実現します
  • スクラッチ宝くじの例を実現する JavaScript キャンバス

<<:  MySQL クエリ キャッシュのグラフィカルな説明

>>:  HTMLテキストボックス(テキスト)は、読み取り専用を実現するために複数の方法で利用できません

推薦する

MySQL 5.6 の「暗黙的な変換」によりインデックスが失敗し、データが不正確になる

背景SQL クエリを実行するときに、where 条件の vachar 型フィールドの単一引用符を削除...

Linux での MySQL のアンインストールとインストールのグラフィック チュートリアル

ブログを書くのは初めてです。開発に携わって2年になります。仕事の後に何か有意義なことを見つけたいと思...

CSSはリモコンのボタンを模倣する

注: このデモはミニプログラム環境でテストされており、他の h5 および pc Web ページにも適...

Dockerイメージ作成の完全なプロセス

目次序文作成手順CentOSベースイメージを作成するコンテナを作成してカスタマイズするカスタムコンテ...

SEATAトランザクションサービスDockerのデプロイ手順の詳細説明

1. データベース認証ステートメントを作成する > データベース seata を作成します。 ...

MySQLの日付文字列タイムスタンプ変換の詳細な説明

時刻、文字列、タイムスタンプ間の変換は、日常生活でよく使用されます。よく使用されますが、私は使用する...

CSS3+JS による虫眼鏡モードの完璧な実装の詳細説明

約 1 年前、私は「虫眼鏡効果を模倣するいくつかの方法の原理の分析」という記事を書きました。当時、自...

CSS+JS で水滴の波紋アニメーション ボタン効果を実装するサンプル コード

コードは次のようになります。 <!DOCTYPE html> <html lang...

W3C チュートリアル (8): W3C XML スキーマのアクティビティ

XML スキーマは、DTD に代わる XML ベースのものです。 XML スキーマは、DTD に代わ...

VMware15.5でcentos8.1をインストールし、物理メモリが不足する問題に対処する最も完全なチュートリアル

1. 仮想マシンの準備1. 新しい仮想マシンを作成する 2. 仮想マシンのカスタマイズを選択する 3...

あなたをエキスパートに見せるための 13 個の JavaScript ワンライナー

目次1. ランダムなブール値( true / false )を取得する2. 指定された日付が営業日で...

CSS3 の新しいレイアウト: flex の詳細な説明

Flexの基本概念フレックス レイアウト (フレックスはフレキシブル ボックスの略)、エラスティック...

SCSS スタイルのコードを 50% 削減する 14 の実践的な経験

序文Sass は CSS3 言語の拡張機能です。Sass を使用すると、より良いスタイルシートをより...

ネイティブJavaScriptでカルーセルを実装する

この記事では、JavaScriptでカルーセルを実装するための具体的なコードを参考までに紹介します。...

Dockerでudpポート番号を指定する問題を解決する

Docker はコンテナを起動するときにアクセス ポートを指定します。複数の -p オプションを使用...