Detaillierte Erläuterung zur Verwendung von JS, um den Effekt einer PS-Radiergummi-Rubbelkarte auf der Leinwand zu erzielen

Detaillierte Erläuterung zur Verwendung von JS, um den Effekt einer PS-Radiergummi-Rubbelkarte auf der Leinwand zu erzielen

Wirkungsdemonstration:

Hauptimplementierung des JS-Codes

 <div Klasse="Box" id="bb">
        <canvas id="cas" width="1366" height="651"></canvas>
    </div>
 
    <script Typ="text/javascript" Zeichensatz="utf-8">
        var canvas = document.getElementById("cas"),
            ctx = canvas.getContext("2d");
        var x1, y1, a = 30,
            Zeitüberschreitung, totimes = 100,
            jiange = 30;
        canvas.width = document.getElementById("bb").clientWidth;
        Leinwand.Höhe = document.getElementById("bb").clientHeight;
        var img = neues Bild();
        img.src = "sha.jpg";
        img.onload = Funktion() {
            ctx.drawImage(img, 0, 0, Leinwandbreite, Leinwandhöhe)
            //ctx.fillRect(0,0,Leinwand.Breite,Leinwand)
            tippen Sie aufClip()
        }
 
        //Erzielen Sie den Löscheffekt durch Ändern der globalCompositeOperation-Funktion tapClip() {
            var hastouch = "ontouchstart" im Fenster? true : false,
                tapstart = hastouch ? "touchstart" : "Maus gedrückt",
                tapmove = hastouch ? "touchmove" : "mousemove",
                tapend = hastouch? "touchend" : "mouseup";
 
            ctx.lineCap = "rund";
            ctx.lineJoin = "runde";
            ctx.Zeilenbreite = a * 2;
            ctx.globalCompositeOperation = "Ziel-Ausgang";
 
            canvas.addEventListener(tapstart, Funktion(e) {
                Zeitüberschreitung löschen (Zeitüberschreitung)
                e.preventDefault();
 
                x1 = hastouch ? e.targetTouches[0].pageX : e.clientX - canvas.offsetLeft;
                y1 = hastouch ? e.targetTouches[0].pageY : e.clientY - canvas.offsetTop;
 
                ctx.speichern();
                ctx.beginPath()
                ctx.arc(x1, y1, 1, 0, 2 * Math.PI);
                ctx.fill();
                ctx.wiederherstellen();
 
                canvas.addEventListener(tapmove, tapmoveHandler);
                canvas.addEventListener(tapend, Funktion() {
                    canvas.removeEventListener(tapmove, tapmoveHandler);
 
                    Zeitüberschreitung = Zeitüberschreitung festlegen (Funktion () {
                        var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
                        var dd = 0;
                        für (var x = 0; x < imgData.width; x += jiange) {
                            für (var y = 0; y < imgData.height; y += jiange) {
                                var i = (y * imgData.width + x) * 4;
                                wenn (imgData.data[i + 3] > 0) {
                                    dd++
                                }
                            }
                        }
                        wenn (dd / (imgData.width * imgData.height / (jiange * jiange)) < 0,4) {
                            canvas.className = "noOp";
                        }
                    }, zumal)
                });
 
           
                canvas.addEventListener(tapmove, tapmoveHandler);
                canvas.addEventListener(tapend, Funktion() {
                    canvas.removeEventListener(tapmove, tapmoveHandler);
 
                    Zeitüberschreitung = Zeitüberschreitung festlegen (Funktion () {
                        var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
                        var dd = 0;
                        für (var x = 0; x < imgData.width; x += jiange) {
                            für (var y = 0; y < imgData.height; y += jiange) {
                                var i = (y * imgData.width + x) * 4;
                                wenn (imgData.data[i + 3] > 0) {
                                    dd++
                                }
                            }
                        }
 
                    }, zumal)
 
                });
 
            
        }
    </Skript>
    <Skripttyp="text/javascript">
        window.setTimeout('CountDown()', 100);
        // Ende
    </Skript>

Oben finden Sie ausführliche Informationen dazu, wie Sie mit JS den Effekt erzielen, dass eine Leinwand eine Rubbelkarte imitiert, die ein PS-Radiergummi ist. Weitere Informationen zu JS finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • js Canvas realisiert Radiergummieffekt
  • JavaScript-Canvas zum Erstellen eines Rubbellos-Beispiels

<<:  Analyse des Problems der Bereitstellung eines Vue-Projekts und der Konfiguration eines Proxys in Nginx

>>:  Detailliertes Tutorial zur Installation und Verwendung von Kong API Gateway mit Docker

Artikel empfehlen

So erstellen Sie einen Flammeneffekt mit CSS

Unten beginnt der Haupttext. 123WORDPRESS.COM Her...

Zusammenfassung einiger gängiger Konfigurationen und Techniken von Nginx

Vorwort Dieser Artikel listet mehrere gängige, pr...

Wissen Sie, wie man Mock in einem Vue-Projekt verwendet?

Inhaltsverzeichnis Erster Schritt: Der zweite Sch...

CentOS7 verwendet RPM-Paket zur Installation von MySQL 5.7.18

veranschaulichen Dieser Artikel wurde am 20.05.20...

Seltsame und interessante Docker-Befehle, die Sie vielleicht nicht kennen

Einleitung Stellt einige einfache und praktische ...

Implementierung der Docker-Container-Statuskonvertierung

Ein Zustandsübergangsdiagramm eines Docker-Contai...

Node implementiert Suchfeld für Fuzzy-Abfragen

In diesem Artikelbeispiel wird der spezifische Co...

Ladeanimation mit CSS3 implementiert

Ergebnisse erzielen Implementierungscode <h1&g...

So implementieren Sie eine steuerbare gepunktete Linie mit CSS

Vorwort Die Verwendung von CSS zum Generieren gep...

Verwendung und Szenarioanalyse des npx-Befehls in Node.js

Tutorial zur Verwendung von NPX Heute Abend, als ...

CentOS 7: Erläuterung zum Wechseln des Boot-Kernels und des Boot-Modus

Centos7-Switch-Boot-Kernel Hinweis: Bei Bedarf wi...

So führen Sie das Excel-Tabellen-Plugin in Vue ein

In diesem Artikel wird der spezifische Code von V...

Detaillierte Erklärung zur Verwendung der benutzerdefinierten Vue-Baumsteuerung

In diesem Artikel erfahren Sie, wie Sie das benut...