効果のデモンストレーション: メイン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テキストボックス(テキスト)は、読み取り専用を実現するために複数の方法で利用できません
display: flex レイアウトに関しては、深く理解している人もいますし、私も他の人の作業か...
Ubuntu では中国語入力方法の解決策はありません。仮想マシンや Ubuntu システムをインスト...
React では、this.state を使用して状態を直接変更しても、コンポーネントは再レンダリン...
この記事の例では、ミニプログラムのカスタムタブバーコンポーネントをカプセル化するための具体的なコード...
GtkTreeView コンポーネントは、美しい通常のリストやツリーのようなリストを作成できる高度な...
Linux システムで .sh ファイルを実行する方法は 2 つあります。たとえば、ルート ディレク...
WeChat ミニプログラム コンポーネント設計仕様コンポーネントベースの開発という考え方は、私の開...
技術的背景Latex は文書作成、特に記事作成には欠かせないツールであり、必須のテキスト組版ツールで...
目次forEach() メソッドjs の Array.forEach のループから抜け出す方法解決:...
序文ご存知のとおり、ブラウザの相同性戦略とクロスドメイン方式も、フロントエンド面接で頻繁に遭遇する問...
最近、あるプロジェクトを手伝ったのですが、MySQL マシンがしばらくすると自動的に停止し続けました...
ElementUIは、参考のためにテーブルツリーリストの読み込みチュートリアルを実装しています。具体...
MySQL にリモートでログインする場合、使用するアカウントには特別な要件があります。アカウントのデ...
1. <select style="width:195px" name=&...
画像の周囲にテキストを折り返すとは何ですか?これは次の図の効果です。 エフェクトのCSSコードはここ...