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

Tipps zum Escapen von HTML-Texten

Heute habe ich auf CSDN einen kleinen Trick zum Es...

Zusammenfassung ungewöhnlicher JS-Operationsoperatoren

Inhaltsverzeichnis 2. Komma-Operator 3. JavaScrip...

VMware ESXI-Servervirtualisierungscluster

Inhaltsverzeichnis Zusammenfassung Umgebung und W...

Lösung für den Fehler „Mehrere Primärschlüssel definiert“ in MySQL

Es gibt zwei Möglichkeiten, einen Primärschlüssel...

Implementierungsschritte für die Docker-Bereitstellung lnmp-wordpress

Inhaltsverzeichnis 1. Experimentelle Umgebung 2. ...

MySQL-unabhängiger Index und gemeinsame Indexauswahl

Häufig fehlt das Verständnis für mehrspaltige Ind...

Das WeChat-Applet implementiert eine einfache Taschenrechnerfunktion

In diesem Artikel wird der spezifische Code für d...

Beispielcode für die programmgesteuerte Verarbeitung von CSS-Stilen

Vorteile eines programmatischen Ansatzes 1. Globa...

Detaillierte Erklärung zur Verwendung von Standard in MySQL

NULL- und NOT NULL-Modifikatoren, DEFAULT-Modifik...

Teilen Sie JS vier lustige Hacker-Hintergrundeffektcodes

Inhaltsverzeichnis Beispiel 1 Beispiel 2 Beispiel...

So verhindern Sie das Flashen von Vue in kleinen Projekten

Zusammenfassung HTML: Element plus V-Umhang CSS: ...

Was ist nach der Installation von Ubuntu 20.04 zu tun (Anleitung für Anfänger)

Ubuntu 20.04 wurde veröffentlicht und bringt viel...