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

Installation und Verwendung von MySQL unter Ubuntu (allgemeine Version)

Unabhängig von der verwendeten Ubuntu-Version ist...

Wann verwendet man Tabellen und wann CSS (Erfahrungsaustausch)

Die Haupttextseite von TW hatte früher eine Breite...

Detaillierte Erläuterung des Beispiels einer MySQL-Einzeltabellenabfrage

1. Daten vorbereiten Die folgenden Operationen we...

So überwachen Sie Oracle-Datenbanken mit Zabbix Agent2

Überblick In Zabbix Version 5.0 und höher wurde e...

Verwenden von Zabbix zum Überwachen des Ogg-Prozesses (Windows-Plattform)

Dieser Artikel stellt vor, wie man das Ogg-Progra...

Beispielüberprüfung MySQL | Update-Feld mit demselben Wert zeichnet Binlog auf

1. Einleitung Vor ein paar Tagen fragte mich ein ...

Beispielanalyse des Prinzips und der Lösung des MySQL-Gleitreihenfolgeproblems

Dieser Artikel erläutert anhand von Beispielen da...

Datenabfragevorgang im MySQL-JSON-Format

Der Standardtabellenname ist „base_data“ und der ...

Detaillierte Schritte zur Installation von MinIO auf Docker

Inhaltsverzeichnis 1. Überprüfen Sie, ob die Dock...

Sollten nullbare Felder in MySQL auf NULL oder NOT NULL gesetzt werden?

Personen, die MySQL häufig verwenden, können mit ...

Fünf Verzögerungsmethoden für die MySQL-Zeitblindinjektion

Fünf Verzögerungsmethoden für die MySQL-Zeitblind...