キャンバスで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テキストボックス(テキスト)は、読み取り専用を実現するために複数の方法で利用できません

推薦する

HTMLで下線を設定するには?HTMLでテキストに下線を付ける方法

HTML で下線を引くには、以前はテキストを <u></u> タグで囲む必要...

MySQL 演算子の具体的な使用法 (and、or、in、not)

目次1. はじめに2. 本文2.1 および演算子2.2 または演算子2.3 オペレーター2.4 no...

VirtualBox でのホストオンリー + NAT モードのネットワーク構成

VirtualBoxのHost Only+NATモードのネットワーク構成は参考用です。具体的な内容は...

CSS3はトランジション効果を実現するためにtransitionプロパティを使用する。

物件の詳細な説明transition 属性の目的は、一部の CSS プロパティ (背景など) をスム...

MySQL が UNION を使用して 2 つのクエリを接続できない理由の詳細な説明

概要連合接続データセットキーワードは、2つのクエリ結果セットを1つに連結し、同一のレコードを除外する...

さまざまな解像度やブラウザでウェブページを適切に表示する方法

キーコードは次のとおりです。コードをコピーコードは次のとおりです。 html{高さ:100%; }コ...

WeChat パブリック アカウントの録音ファイルを再生して保存します (amr ファイルを mp3 に変換)

目次オーディオトランスコーディングツール原理JAVE プロジェクトの問題このプロジェクトの特徴拡張機...

CSS の overflow: hidden の使い方 (オーバーフローの非表示とフロートのクリア)

オーバーフロー非表示指定された高さを超えるテキストや画像情報を非表示にすることを意味します。 <...

ウェブ開発におけるクロスドメインの理由に対する複数のソリューション

目次クロスドメインの理由JSONP Nginxソリューションバックエンドソリューションクロスドメイン...

vue keepAlive キャッシュクリア問題事例の詳細な説明

Keepalive は Vue プロジェクトでのキャッシュによく使用され、基本的な要件を満たすのに非...

Vueオプションの詳細な説明

目次1. オプションとは何ですか? 2. 含まれる属性3. エントリー属性エルデータ方法コンポーネン...

カスタムポップアップボックスを実装するためのJavaScriptシングルトンモード

この記事では、カスタムポップアップボックスを実装するためのJavaScriptシングルトンモードの具...

JS の Promise に中止関数を追加する方法

目次概要プロミスレースメソッド約束の再パッケージ化中止コントローラAxiosプラグインにはキャンセル...

Vue3 がコンポーネント通信に mitt を使用する手順

目次1. インストール2. プロジェクトにインポートしてマウントする3. 使用Vue2.x はコンポ...

mysql の追加、削除、変更、クエリの基本ステートメント

文法以下は、MySQL テーブルにデータを挿入するための INSERT INTO コマンドの一般的な...