Detaillierte Erklärung der Kapselung und Verwendung der Vue-Bildvergrößerungskomponente

Detaillierte Erklärung der Kapselung und Verwendung der Vue-Bildvergrößerungskomponente

Basierend auf dem Vue-Bildvergrößerungskomponentenpaket lautet der spezifische Inhalt zu Ihrer Information wie folgt

Der Implementierungsprozess der Bildlupe besteht darin, ein kleines Bild in einem Feld zu platzieren. Wenn sich die Maus im kleinen Bildfeld bewegt, wird ein beweglicher Block (Schattenbereich / Maskenebene) angezeigt, und ein proportional vergrößerter Bildinhalt im beweglichen Block des kleinen Bildfelds wird im großen Bildfeld rechts angezeigt. Das Wirkungsdiagramm sieht wie folgt aus:

Der Vue-Komponentencode zur Implementierung des Bildlupeneffekts lautet wie folgt:

<Vorlage>
  <div>
    <div class="bewegen" @mouseover="über()" @mouseout="raus()" @mousemove="bewegen($event)">
      <div id="small"> //Kleines Bild und Maskenebenen-Container<div id="float"></div> //Maskenebene<img :src="item" id="smallimg"> //Zu vergrößerndes Bild</div>
    </div>
    <div id="groß">
      <img :src="item"> //Vergrößertes Bild</div>
  </div>
</Vorlage>

<Skript>
  var float, smallimg, groß, großesBild, klein, float_maxJL_t, float_maxJL_l, großesBild_maxJL_t, großesBild_maxJL_l;

  Standard exportieren{
    Requisiten: {
      Artikel:
        Typ: Zeichenfolge
      }
    },
    Daten() {
     zurückkehren {
     }
    }, 

    montiert(){
      float = document.getElementById("float"); //Linke Maskenebene smallimg = document.getElementById("smallimg"); //Kleines Bild links big = document.getElementById("big"); //Rechter sichtbarer Bereich bigImg = big.getElementsByTagName("img")[0]; //Rechtes großes Bild small = document.getElementById("small");// Container links //Breite und Höhe des rechten sichtbaren Bereichs abrufen var bigW = big.clientWidth;
      var bigH = big.clientHeight;

      //Breite und Höhe des großen Bildes rechts var bigImgW = bigImg.offsetWidth;
      var bigImgH = bigImg.offsetHeight;

      //Breite und Höhe des kleinen Bildes links var smallImgW = smallimg.offsetWidth;
      var smallImgH = smallimg.offsetHeight;

      //Breite und Höhe der linken Maskenebene float.style.width = bigW/bigImgW * smallImgW + "px"; //175
      float.style.height = großeH/großesBild * kleinesBild/3*2 + "px";     

      //Die maximale Distanz der Bewegung der Maskenebene float_maxJL_l = small.clientWidth -float.offsetWidth-10;
      float_maxJL_t = kleine.Clienthöhe – float.Offsethöhe – 5;

      //Die maximale Distanz, über die sich das rechte Bild bewegt bigImg_maxJL_l = bigImg.clientWidth - big.offsetWidth;
      bigImg_maxJL_t = bigImg.clientHeight - big.offsetHeight;

      big.style.display = "keine";
      float.style.visibility = "hidden"; //Die Maus hat sich nicht in den linken Bereich bewegt, daher sind die Maskenebene und das große Bild rechts unsichtbar},

    Methoden: {
    //Bewegen Sie die Maus in den linken Bereich, um die Maskenebene und das große Bild rechts darüber sichtbar zu machen: function () {
        float.style.visibility = "sichtbar";
        big.style.visibility = "sichtbar";
        großer.Stil.Anzeige = "Block";
      }, 

      //Bewegen Sie die Maus aus dem linken Bereich, um die Maskenebene und das große Bild rechts unsichtbar zu machen: function () {
        float.style.visibility = "versteckt";
        big.style.display = "keine";
      }, 

      //Wenn die Maus bewegt wird, bewegt sich die Maskenebene mit der Mausbewegung: function (ev) {
        var l = ev.clientX – klein.OffsetLinks – float.OffsetWidth/2;
        var t = ev.clientY - small.offsetTop - float.offsetHeight/2;

        if( l < 0 ) l = 0; // Wert wird auf 0 gesetzt, wenn er die linke Grenze überschreitet
        if( t < 0 ) t = 0; // Wert überschreitet die Obergrenze und wird auf 0 gesetzt

        if( l > float_maxJL_l ) l = float_maxJL_l; //Bewegungsbereich innerhalb des Containers begrenzen if( t > float_maxJL_t ) t = float_maxJL_t;

        //Verhältnis finden var scaleL = l/float_maxJL_l;
        var scaleT = t/float_maxJL_t;

         //Bewegungsposition der Maskenebene float.style.left = l + "px";
        float.style.top = t + "px"; 

         //Bewegungsposition des großen Bildes auf der rechten Seite bigImg.style.left = -scaleL * bigImg_maxJL_l + "px";
        bigImg.style.top = -scaleT * bigImg_maxJL_t + "px";
      },
    },
  }
</Skript>

//CSS-Stil <style lang="scss" rel="stylesheet/scss" scoped>
  @import 'src/assets/scss/variable.scss';
  #schweben {
    Breite: 120px;
    Höhe: 120px;
    Position: absolut; //Erforderlicher Hintergrund: $primary;
    Rand: 1px durchgezogen #ccc;
    Deckkraft: 0,5;
    Cursor: bewegen;
  }
  #groß {
    Position: absolut; //Erforderlich oben: 260px;
    links: 37,6 %;
    Breite: 350px;
    Höhe: 500px;
    Überlauf: versteckt;
    Rand: 1px durchgezogen #ccc;
    Hintergrund: #ffffff;
    Z-Index: 1;
    Sichtbarkeit: versteckt;
  }
  #klein {
    Position: relativ; //Erforderlicher Z-Index: 1;
    img{
      Breite: 340px;
      Höhe: 320px;
    }
  }
  #großes Bild {
    Position: absolut; //Erforderlicher Z-Index: 5;
    Breite: 700px;
    Höhe: 700px;
  }
</Stil>

In CSS müssen Sie darauf achten, die Position jedes Bildes und jeder Maskenebene festzulegen.

Analyse der Maskenebene:

Die Breite (Höhe) der linken Maskenebene = die Breite (Höhe) des rechten sichtbaren Bereichs / die Breite (Höhe) des rechten großen Bildes * die Breite (Höhe) des linken kleinen Bildes
(Die Maskenebene kann als Simulation des großen Bildfelds rechts verstanden werden. Ein großes Bild wird in das große Bildfeld rechts eingefügt, und dann wird der schwebende Bereich gemäß einem bestimmten Verhältnis erhalten. Gleichzeitig wird das Feld auf Überlauf und Ausblenden eingestellt. Das Darstellungsverhältnis des großen Bilds rechts im Verhältnis zum rechten Container entspricht dem Verhältnis der Maskenebene links im Verhältnis zum linken Container.)
Die Distanz, über die sich die Maskenebene bewegt = die Breite (Höhe) des linken Containers – die Breite (Höhe) der Maskenebene; (sodass sie sich immer im linken Container bewegt)
Wenn die Maus zum kleinen Bildfeld auf der linken Seite bewegt wird, müssen wir sicherstellen, dass sich die Maus immer in der Maskenebene befindet und sich die Maskenebene mit der Bewegung der Maus bewegt (was bedeutet, dass die Position der Maskenebene eng mit den Koordinaten der Maus zusammenhängt, wenn sie sich bewegt, und den Container auf der linken Seite nicht überlaufen kann. Die Berechnungsmethode finden Sie im Code).

Hinweis: Hier liegt ein versteckter Fehler vor. Wenn Ihre Benutzeroberfläche gescrollt wird, bewegt sich die Maskenebene nicht mit dem Scrollen der Benutzeroberfläche. Wenn die Benutzeroberfläche nach unten scrollt, befindet sich die Maus im linken Container, aber nicht mehr im Bereich der Maskenebene, und die Maskenebene kann nicht mehr verschoben werden. Die Lösung lautet wie folgt:

Bewegung = Funktion (ev){
        var scroll = this.getClientHeight(); //Aktuelle Bewegungsposition der Schnittstelle abrufen var l = ev.clientX - small.offsetLeft - float.offsetWidth/2;
        var t = ev.clientY - small.offsetTop - float.offsetHeight/2;

        t=t+scroll; //Die Höhe der Maskenebene sollte entsprechend zur Scrollhöhe der Schnittstelle addiert werden, wenn (l < 0) l = 0;
        wenn (t < 0) t = 0; 

        wenn (l > float_maxJL_l) l = float_maxJL_l;
        wenn (t > float_maxJL_t) t = float_maxJL_t;

        var scaleL = l/float_maxJL_l;
        var scaleT = t/float_maxJL_t;

        float.style.left = l + "px";
        float.style.top = t + "px";

        bigImg.style.left = -scaleL * bigImg_maxJL_l + "px";
        bigImg.style.top = -scaleT * bigImg_maxJL_t + "px";
},
//Methode zum Abrufen der Scrollhöhe der Schnittstelle getClientHeight: function(){
    var scrollTop=0;
    wenn(Dokument.Dokumentelement&Dokument.Dokumentelement.ScrollTop)
    {
      scrollTop=Dokument.Dokumentelement.scrollTop;
    }
    sonst wenn(Dokument.Text)
    {
      scrollTop=Dokument.Hauptteil.scrollTop;
    }
    scrollTop zurückgeben;
}

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
  • So erzielen Sie mit Vue3 beispielsweise einen Lupeneffekt
  • 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 implementiert die Fallstudie zum Lupeneffekt
  • Vue3.0 Handschrift-Lupeneffekt
  • Vue implementiert Lupeneffekt
  • Detaillierte Erläuterung der Produkthauptbild-Lupenlösung basierend auf Vue
  • Ein handgeschriebener Vue-Lupeneffekt
  • Verwendung des E-Commerce-Bildvergrößerungs-Plugins basierend auf vue2.x
  • Vue realisiert den Produktlupeneffekt

<<:  Detaillierte Erläuterung von MySQL-Abfragebeispielen für mehrere Tabellen [Linkabfrage, Unterabfrage usw.]

>>:  Tutorial zur Installation von MYSQL8.0 auf Alibaba Cloud ESC

Artikel empfehlen

Eine Methode zum Erstellen von Karussellbildern mit CSS3

Diashows sieht man häufig auf Webseiten. Sie enth...

Detaillierte Verwendung des Vue-Timers

In diesem Artikelbeispiel wird der spezifische Co...

Nginx kompiliert nginx - neues Modul hinzufügen

1. Vorhandene Module anzeigen /usr/local/nginx/sb...

So installieren Sie Jenkins auf CentOS 8

Um Jenkins auf CentOS 8 zu installieren, müssen S...

js+css zur Realisierung eines dreistufigen Navigationsmenüs

In diesem Artikelbeispiel wird der spezifische Co...

So installieren Sie MySQL auf CentOS und richten den Fernzugriff ein

1. Laden Sie die MySQL-Repo-Quelle herunter $ wge...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.21 winx64

Dieser Artikel fasst die Hinweise zur Installatio...

Zusammenfassung der Wissenspunkte zur MySQL-Master-Slave-Replikation

Eine Optimierungslösung, wenn ein einzelner MySQL...

Detaillierte Erklärung zur Verwendung von nohup /dev/null 2>&1

Befehl „nohup“: Wenn Sie einen Prozess ausführen ...

Wie kompliziert ist die Priorität von CSS-Stilen?

Gestern Abend habe ich mir eine Interviewfrage ang...

MySQL-Tabellenfeld Zeiteinstellung Standardwert

Anwendungsszenario In der Datentabelle muss die A...

Ein kurzer Vortrag über das Klonen von JavaScript

Inhaltsverzeichnis 1. Oberflächliches Klonen 2. T...