Vue realisiert den Produktlupeneffekt

Vue realisiert den Produktlupeneffekt

In diesem Artikelbeispiel wird der spezifische Code von Vue zur Erzielung des Produktlupeneffekts als Referenz geteilt. Der spezifische Inhalt ist wie folgt

1. Einleitung

In dieser florierenden E-Commerce-Ära mit allen Arten von Live-Streaming oder Self-Service-Shopping haben wir ein besseres Verständnis für die Produkte und haben die Details genauer überprüft. Wir haben festgestellt, dass unsere Produkte vergrößert werden können. Also haben wir das Front-End-Technologie-Framework Vue verwendet und eine Funktion geschrieben, die einer Lupe ähnelt.

2. Umsetzungsideen

Für den Anzeigebereich des Originalbilds (links) können Sie das Bild durch eine Leinwand ersetzen, um die Bildzeile zu schützen.
Der vergrößerte Anzeigebereich wird angezeigt, wenn sich die Maus bewegt (Mausebenenmaske oben), und der vergrößerte Anzeigebereich wird im Anzeigeebenenmaskenbereich ausgewählt (rechts).

3. Effektanzeige

4. Spezifischer Implementierungslogikcode

Vorlage (denken Sie daran, den Bildpfad zu ändern)

<Vorlage>
  <div>
    <div Klasse="links">
      <img class="leftImg" src="../../src/assets/curry.jpg" alt="" />
      <!-- Maus-Layer-Abdeckung-->
      <div v-show="topShow" Klasse="top" :style="topStyle"></div>
      <!-- Die oberste Ebene deckt den gesamten ursprünglichen Bildbereich mit einer transparenten Ebene ab -->
      <div
        Klasse="MaskeOberteil"
        @mouseenter="EingabeHandler"
        @mousemove="BewegungsHandler"
        @mouseout="outHandler"
      ></div>
    </div>
    <div v-show="rShow" Klasse="rechts">
      <Bild
        :Stil="r_img"
        Klasse="rechtesBild"
        quelle="../../quelle/assets/curry.jpg"
        alt=""
      />
    </div>
  </div>
</Vorlage>

CSS-Stil

<Stilbereich>
/* Vergrößere das Bild und positioniere die obere linke Ecke auf (0,0) */
.rightImg {
  Anzeige: Inline-Block;
  Breite: 800px;
  Höhe: 800px;
  Position: absolut;
  oben: 0;
  links: 0;
} /* Bildzoombereich rechts*/
.Rechts {
  Rand links: 412px;
  Breite: 400px;
  Höhe: 400px;
  Rand: 1px durchgehend rot;
  Position: relativ;
  Überlauf: versteckt;
} /* Eine Maske der obersten Ebene */
.maskTop {
  Breite: 400px;
  Höhe: 400px;
  Position: absolut;
  Z-Index: 1;
  oben: 0;
  links: 0;
} /* Ebenenmaske, positioniere die obere linke Ecke auf (0,0) */
.Spitze {
  Breite: 200px;
  Höhe: 200px;
  Hintergrundfarbe: Hellkoralle;
  Deckkraft: 0,4;
  Position: absolut;
  oben: 0;
  links: 0;
} /* Anzeige des Originalbildes */
.leftImg {
  Breite: 400px;
  Höhe: 400px;
  Anzeige: Inline-Block;
} /* Container des Originalbildes */
.links {
  Breite: 400px;
  Höhe: 400px;
  Rand: 1px, durchgehend blaugrün;
  schweben: links;
  Position: relativ;
}
</Stil>

Skriptkern js

<Skript>
Standard exportieren {
  Daten() {
    zurückkehren {
      topStyle: { transform: "" },
      r_img: {},
      topShow: false,
      rShow: false,
    };
  },
  Methoden: {
    // Die Maus betritt den ursprünglichen Bildraum Funktion enterHandler() {
      // Anzeige der Ebenenmaske und des vergrößerten Bereichs this.topShow = true;
      dies.rShow = wahr;
    },
    // Mausbewegungsfunktion moveHandler(event) {
      // Koordinatenposition der Maus let x = event.offsetX;
      sei y = Ereignis.OffsetY;
      // Die Koordinatenposition der oberen linken Ecke der Ebenenmaske und deren Begrenzung: Sie darf die obere linke Ecke des ursprünglichen Bildbereichs nicht überschreiten. let topX = x – 100 < 0? 0: x – 100;
      sei topY = y – 100 < 0? 0: y – 100;
      // Die Position der Ebenenmaske nochmals einschränken, so dass die Ebenenmaske nur dann innerhalb des originalen Bildbereichs liegen kann, wenn (topX > 200) {
        obenX = 200;
      }
      wenn (topY > 200) {
        obenY = 200;
      }
      // Steuerung durch Transformation verschieben this.topStyle.transform = `translate(${topX}px,${topY}px)`;
      this.r_img.transform = `übersetzen(-${2 * topX}px,-${2 * topY}px)`;
    },
    // Maus raus Funktion outHandler() {
      //Steuern Sie das Ausblenden der Ebenenabdeckung und des Vergrößerungsbereichs. this.topShow = false;
      dies.rShow = falsch;
    },
  },
};
</Skript>

V. Zusammenfassung und Gedanken

Ursprünglich hatte ich links vom ursprünglichen Bildcontainer drei Mausereignisse hinzugefügt, aber es traten immer wieder Probleme auf.

1. Ich habe eine transparente MaskTop-Ebene hinzugefügt, die den Mausbereich abdeckt, um die Lupe vollständig sichtbar zu machen. Wenn ich diese MaskTop-Ebene nicht hinzufüge, bewegt sich die Mausmaske nicht mit der Maus, wenn meine Maus den ursprünglichen Bildbereich betritt, und vibriert bei der Mausbewegung mit hoher Frequenz. Der vergrößerte Bereich auf der rechten Seite bewegt sich nicht reibungslos.

2. Wenn die Ebene maskTop nicht hinzugefügt wird und ich die Maus in den ursprünglichen Bildbereich bewege, wird das Ereignis mousemove nur einmal ausgeführt. Dies scheint daran zu liegen, dass die Maske der Mausebene das

3. Ich habe zuvor versucht, die Anfangsposition der Mausmaske dynamisch zu bestimmen und sie in das MouseEnter-Ereignis einzufügen. Infolgedessen wurde das MouseEnter-Ereignis ungewöhnlich oft ausgeführt, als wäre es zu einem MouseMove-Ereignis geworden.

Ich habe andere Lupengehäuse gesehen, aber bei keinem davon muss die Overlay-Maske der obersten Ebene hinzugefügt werden. Ich hoffe, dass mir jemand, der vorbeikommt, bei der Lösung dieses Problems helfen kann.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Beispielcode einer in Vue3 gekapselten Lupenkomponente
  • Vue3 realisiert den Bildlupeneffekt
  • Vue implementiert die Lupenfunktion der Produktdetailseite
  • Vue implementiert den Lupeneffekt beim Tab-Umschalten
  • Vue implementiert einen einfachen Lupeneffekt
  • Vue implementiert ein Suchfeld mit einer Lupe
  • Vue3.0 Handschrift-Lupeneffekt
  • Vue implementiert Lupeneffekt
  • Ein handgeschriebener Vue-Lupeneffekt
  • Vue3 kapselt die Lupeneffektkomponente der Jingdong-Produktdetailseite

<<:  Detaillierte Erläuterung des Prinzips und des Implementierungsprozesses der Nginx-Konfiguration https

>>:  So weisen Sie Feldern bei der MySQL-Abfrage Standardwerte zu

Artikel empfehlen

So implementieren Sie die Paging-Funktion des MyBatis-Interceptors

So implementieren Sie die Paging-Funktion des MyB...

FTP-Remoteverbindung zu Linux über SSH

Installieren Sie zunächst SSH in Linux. Nehmen Si...

Einführung in die Verwendung gängiger Dockerfile-Befehle

Inhaltsverzeichnis 01 CMD 02 EINSTIEGSPUNKT 03 AR...

Erfahren Sie, wie Sie eine MySQL-Datenbank auf dem Mac installieren

Laden Sie MySQL für Mac herunter: https://downloa...

Eine kurze Diskussion über den JavaScript-Bereich

Inhaltsverzeichnis 1. Geltungsbereich 1. Globaler...

Analyse des Prozesses der einfachen Bereitstellung von Nginx im Docker-Container

1. Stellen Sie den Nginx-Dienst im Container bere...

Grundprinzipien des skalierbaren MySQL-Designs

Inhaltsverzeichnis Vorwort 1. Was ist Skalierbark...

Warum der CSS-Attributwert clear:right im Detail nicht funktioniert

Die Verwendung der Clear-Eigenschaft zum Löschen v...

Vue führt einen einfachen zufälligen Namensaufruf durch

Inhaltsverzeichnis Layoutteil: <div id="a...

Detaillierte Erklärung der Gründe, warum MySQL-Verbindungen hängen bleiben

Inhaltsverzeichnis 1. Hintergrund Architektur Pro...

Vue implementiert Chat-Schnittstelle

In diesem Artikelbeispiel wird der spezifische Co...