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

Mehrere Möglichkeiten zum Speichern von Bildern in einer MySQL-Datenbank

Normalerweise müssen die von Benutzern hochgelade...

Implementierung einer Bildfragmentierungsladefunktion basierend auf HTML-Code

Heute werden wir einen fragmentierten Bildladeeff...

Die 10 klassischen Optimierungsfälle und -szenarien von MySQL

Inhaltsverzeichnis 1. Allgemeine Schritte zur SQL...

So löschen Sie zusätzliche Kernel in Ubuntu

Schritt 1: Den aktuellen Kernel anzeigen rew $ un...

Vue implementiert scrollbaren Popup-Fenstereffekt

In diesem Artikel wird der spezifische Code von V...

Lösen Sie das Problem von secure_file_priv null

Fügen Sie secure_file_priv = ' '; führen ...

Detaillierte Erläuterung der Nginx-Upstream-Konfiguration und -Funktion

Konfigurationsbeispiel Upstream-Backend { Server ...

Detaillierte Erklärung des Lebenszyklus von Angular-Komponenten (Teil 2)

Inhaltsverzeichnis 1. Haken anzeigen 1. Was bei d...

MySQL-Speicherung räumlicher Daten und Funktionen

Inhaltsverzeichnis 1. Datentyp 1. Was sind MySQL-...

jQuery implementiert Akkordeoneffekte

Dieser Artikel gibt Ihnen den spezifischen Code v...

Hinweise zur Konfiguration mehrerer Proxys mithilfe von Vue-Projekten

Im Entwicklungsprozess eines Vue-Projekts konfigu...

Mehrere spezifische Methoden zur MySQL-Speicherplatzbereinigung

Inhaltsverzeichnis Vorwort 1. Überprüfen Sie die ...