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

So migrieren Sie lokales MySQL in eine Serverdatenbank

Wir können den scp-Befehl von Linux (scp kann unt...

Zusammenfassung der MySQL-Fremdschlüsseleinschränkungen und Tabellenbeziehungen

Inhaltsverzeichnis Fremdschlüssel So ermitteln Si...

Detaillierte Analyse des Linux-Kernel-Makros container_of

1. Wie oben erwähnt Ich habe dieses Makro gesehen...

Detaillierte Erklärung von count(), group by, order by in MySQL

Ich bin vor Kurzem auf ein Problem gestoßen, als ...

js verwendet die Reduce-Methode, um Ihren Code eleganter zu gestalten

Vorwort In tatsächlichen Projekten kann die häufi...

Verwenden einer MySQL-Datenbank im Docker, um LAN-Zugriff zu erhalten

1. Holen Sie sich das MySQL-Image Docker-Pull MyS...

Zusammenfassung häufig verwendeter Escape-Zeichen in HTML

Die in HTML häufig verwendeten Escape-Zeichen wer...