Vue implementiert unregelmäßige Screenshots

Vue implementiert unregelmäßige Screenshots

Das meiste, was Sie gesehen haben, sind normale Screenshots, die mit den meisten Anwendungsszenarien zurechtkommen. Wenn Sie jedoch bei der Bildverarbeitung die Regeln an die Benutzer weitergeben möchten, können normale Screenshots die Benutzer nicht mehr zufriedenstellen. Können wir dann eine beliebige regelmäßige Bildaufnahme im Frontend implementieren? Lassen Sie es mich gemeinsam besprechen!

Bilderfassung durch SVG

Verwenden Sie das ClipPath-Bild-Tag in SVG, um Bilder durch ID-Mapping und die Koordinaten des dynamischen Positionspolygons zu erfassen

    <div>
        <div Klasse="Inhalt" @mousemove="mousemove" @mouseup="(e) => {mouseup(e);}">
          <!-- Canvas-Anzeige -->
          <svg
            ref="schwarzSvg"
            Klasse="schwarzSvg"
            xmlns="http://www.w3.org/2000/svg"
            Breite="300"
            Höhe="300"
          >
            <Definitionen>
              <clipPath id="clippfad">
                <polygon :points="Punkte"></polygon>
              </clipPfad>
            </defs>
            <Bild
              xmlns:link="http://www.w3.org/1999/xlink"
              href="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3228549874,2173006364&fm=26&gp=0.jpg" rel="externes Nofollow" 
              Breite="300"
              Höhe="300"
              preserveAspectRatio="keine"
              Stil="Clip-Pfad: URL(#ClipPfad)"
            ></Bild>
          </svg>
          <!-- Punkt ziehen -->
          <ul Klasse="Abfangen">
            <li
              v-for="Element in 4"
              :ref="`li${item}`"
              :Schlüssel="Artikel"
              @mousedown="(e) => {mousedown(e, Element);}"
            ></li>
          </ul>
          <!-- Basiskartenanzeige -->
          <Bild
            Klasse="schwarzesBild"
            Quelle="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3228549874,2173006364&fm=26&gp=0.jpg"
            alt=""
          />
          <!-- Maskenebene-->
          <div Klasse="schwarzDiv"></div>
    </div>
  </div>

CSS-Teil

<style lang="sass">
.schwarzDiv
    Breite: 100%
    Höhe: 100%
    Position: absolut
    oben: 0
    Z-Index: 2
    Hintergrund: rgba(0,0,0, 1)
.Inhalt
    Breite: 300px
    Höhe: 300px
    Textausrichtung: links
    Position: relativ
    .schwarzSvg
        Position: absolut
        oben: 0
        Z-Index: 3
    .schwarzesBild
        Position: absolut
        oben: 0
        links: 0
        Breite: 300px
        Höhe: 300px
    .Abfangen
        Listenstil: keiner
        Position: absolut
        oben: 0
        Marge: 0
        Polsterung: 0
        Z-Index: 3
        >li
            Position: absolut
            Breite: 10px
            Höhe: 10px
            Hintergrund: blau
            Randradius: 50 %
            Cursor: Zeiger
            &:schweben
                transformieren: Skalierung(1.2)
                Übergangsdauer: .2
        >li:ntes-Kind(1)
            oben: 10px
            links: 10px
        >li:ntes-Kind(2)
            oben: 10px
            links: 100px
        >li:ntes-Kind(3)
            oben: 100px
            links: 100px
        >li:ntes-Kind(4)
            oben: 100px
            links: 10px
</Stil>
<Skript>

Standard exportieren {
  Name: 'Canvas',
  Daten() {
    zurückkehren {
      Punkte: '0 0,300 0,300 300,0 300', // Initialisierungsstatus der Bildanzeige: false,
      Index: 0,
      disX: 0,
      disY: 0,
      Koordinaten: { // Initialisiere Ziehpunkt 1: [0, 0],
        2: [300, 0],
        3: [300, 300],
        4: [0, 300],
      },
    };
  },
  montiert() {
    dies.$nextTick(() => {
      für (let-Schlüssel in this.coordinates) {
        const left = diese.Koordinaten[Schlüssel][0];
        const top = diese.Koordinaten[Schlüssel][1];
        dies.$refs[`li${key}`].style.left = `${left}px`;
        dies.$refs[`li${key}`].style.top = `${top}px`;
        wenn (Schlüssel == 2 || Schlüssel == 3) {
          dies.$refs[`li${key}`].style.left = `${left - 10}px`;
        }
        wenn (Schlüssel == 3 || Schlüssel == 4) {
          dies.$refs[`li${key}`].style.top = `${top - 10}px`;
        }
      }
      document.onmouseup = () => {
        dieser.status = falsch;
      };
    });
  },
  Methoden: {
    //Maus runter mousedown(e, index) {
      dieser.status = wahr;
      dies.index = index;
      this.disX = e.clientX - this.$refs[`li${index}`].offsetLeft;
      this.disY = e.clientY - this.$refs[`li${index}`].offsetTop;
    },
    // Maus hoch mouseup(e) {
      dieser.status = falsch;
    },
    //Mausbewegung mousemove(e) {
      wenn (dieser.status) {
        lass links = e.clientX - this.disX;
        let top = e.clientY - this.disY;
        dies.$refs[`li${this.index}`].style.left = `${left}px`;
        dies.$refs[`li${this.index}`].style.top = `${top}px`;
        this.coordinates[this.index] = [links, oben];
        const PunkteArr = [];
        für (let item in this.coordinates) {
          PunkteArr.push(
            Array.from(dieses.coordinates[item], (e) => {
              gebe e + 5 zurück;
            })
          );
        }
        dies.Punkte = PunkteArr.join(' ');
      }
    },
  },
};

Effektbildanzeige

Quellcodeadresse

GitHub-Adresse --> github.com/lgxin/captu…

Oben finden Sie den detaillierten Inhalt der Implementierung von unregelmäßigen Screenshots durch Vue. Weitere Informationen zu unregelmäßigen Screenshots durch Vue finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Drag-Effekt basierend auf Vue realisieren
  • Implementierung einer Drag & Drop-Funktion basierend auf Vue
  • Beispiel für die Implementierung eines Drag & Drop-Effekts mit Vue.js
  • Vue.js implementiert das zufällige Ziehen von Bildern
  • Vue implementiert Div Drag & Drop
  • Beispiel für eine benutzerdefinierte Drag-Funktion in Vue
  • Eine einfache Möglichkeit, die Drag-Screenshot-Funktion von Vue zu implementieren

<<:  Detaillierte Erklärung der Rolle statischer Variablen in MySQL

>>:  Linux: Beispiel für das Bearbeiten des Start-, Stopp- und Neustartskripts für Springboot-JAR-Pakete

Artikel empfehlen

Detaillierte Erklärung der scp- und sftp-Befehle unter Linux

Inhaltsverzeichnis Vorwort 1. SCP-Nutzung 2. Verw...

Detaillierte Erläuterung der JavaScript-Programmschleifenstruktur

Inhaltsverzeichnis Struktur auswählen Schleifenst...

TypeScript verwendet vscode, um den Codekompilierungsprozess zu überwachen

Installieren Installieren Sie den TS-Befehl globa...

MariaDB unter Linux startet mit dem Root-Benutzer (empfohlen)

Da ich Sicherheitsprodukte testen musste, wollte ...

Zusammenfassung häufiger Probleme mit MySQL-Indizes

F1: Welche Indizes hat die Datenbank? Was sind di...

So ändern Sie das MySQL-Passwort auf dem XAMPP-Server (mit Bildern)

Heute habe ich bei der Arbeit an PHP herausgefund...

Analyse der vernachlässigten DOCTYPE-Beschreibung

Doctype ist einer davon: <!DOCTYPE HTML PUBLIC ...

Lösung für den Fehler beim Starten von MySQL

Lösung für den Fehler beim Starten von MySQL MySQ...

So legen Sie Listenstilattribute in CSS fest (lesen Sie einfach diesen Artikel)

Eigenschaften des Listenstils Es gibt 2 Arten von...

Tiefgreifendes Verständnis der Datenreaktionsfähigkeit von Vue

Inhaltsverzeichnis 1. ES-Syntax-Getter und -Sette...

Funktionen in TypeScript

Inhaltsverzeichnis 1. Funktionsdefinition 1.1 Fun...