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

推薦する

Django プロジェクトを作成して MySQL に接続する方法

1: django-admin.py startproject プロジェクト名2: cd プロジェク...

dockerでrabbitmqをインストールすると管理ページに入れなくなる問題

1. 環境整備Tencent Cloud Server CENTOS 7 バージョンDockerコン...

一般的な Linux ディストリビューションのミラーソース構成の概要

最近 Linux を研究していて、いくつかの Linux ディストリビューションを試してみましたが、...

Day.js をベースにした JavaScript での日付処理のよりエレガントな方法

目次day.js を使用する理由モーメントデイ.js day.js がなければどうなるでしょうか? ...

Docker に influxdb をインストールするための詳細なチュートリアル (パフォーマンス テスト)

1. 前提条件1. プロジェクトが展開されました2. Dockerはすでにインストールされている2...

React Native の基本原則の深い理解 (Bridge of React Native)

この記事では、React Native の基本をすでに理解していることを前提とし、ネイティブと Ja...

CSS3 を使用してピカチュウのアニメーション壁紙を作成する例

文章さて、次はレンダリングを見せましょう。画像を見て初めて理解することに興味が湧くでしょう。そうでな...

jQueryはシンプルなカルーセル効果を実装します

みなさんこんにちは。今日はカルーセルの実装についてお話しします。私が作成したカルーセルの効果は次のと...

MySQL 永続統計の詳細な説明

1. 永続的な統計情報の重要性:統計は、MySQL が実行プランを生成するためのガイドとして使用され...

MySQL に大量のデータを挿入する 4 つの方法の例

序文この記事では主に、MySQLに大量のデータを挿入する4つの方法を紹介し、参考と学習のために共有し...

スケルトンスクリーン効果を実現する CSS

ネットワーク データを読み込むときは、ユーザー エクスペリエンスを向上させるために、通常は円形の読み...

UDP シンプル サーバー クライアント コード例

UDP の理論については詳しく説明しません。UDP に関する HelloWorld プログラムを紹介...

大規模なMySQLデータベース用のマスタースレーブシステムを構築するアイデアを共有する

今週は戦争のように忙しかったです。他人に操られているような気がします。毎日朝早く出勤して夜遅く帰り、...

MySQL の Like の概念と使用法の説明

Like は中国語で「好き」を意味しますが、MySQL データベースに適用される場合、Like は、...

HTML ヘッドタグの詳細な紹介

HTML のヘッド部分には、ブラウザによる Web ページのレンダリングや SEO などに関連するタ...