効果のデモンストレーション: メイン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 の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: HTMLテキストボックス(テキスト)は、読み取り専用を実現するために複数の方法で利用できません
HTML で下線を引くには、以前はテキストを <u></u> タグで囲む必要...
目次1. はじめに2. 本文2.1 および演算子2.2 または演算子2.3 オペレーター2.4 no...
VirtualBoxのHost Only+NATモードのネットワーク構成は参考用です。具体的な内容は...
物件の詳細な説明transition 属性の目的は、一部の CSS プロパティ (背景など) をスム...
概要連合接続データセットキーワードは、2つのクエリ結果セットを1つに連結し、同一のレコードを除外する...
キーコードは次のとおりです。コードをコピーコードは次のとおりです。 html{高さ:100%; }コ...
目次オーディオトランスコーディングツール原理JAVE プロジェクトの問題このプロジェクトの特徴拡張機...
オーバーフロー非表示指定された高さを超えるテキストや画像情報を非表示にすることを意味します。 <...
目次クロスドメインの理由JSONP Nginxソリューションバックエンドソリューションクロスドメイン...
Keepalive は Vue プロジェクトでのキャッシュによく使用され、基本的な要件を満たすのに非...
目次1. オプションとは何ですか? 2. 含まれる属性3. エントリー属性エルデータ方法コンポーネン...
この記事では、カスタムポップアップボックスを実装するためのJavaScriptシングルトンモードの具...
目次概要プロミスレースメソッド約束の再パッケージ化中止コントローラAxiosプラグインにはキャンセル...
目次1. インストール2. プロジェクトにインポートしてマウントする3. 使用Vue2.x はコンポ...
文法以下は、MySQL テーブルにデータを挿入するための INSERT INTO コマンドの一般的な...