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

So installieren Sie schnell eine Tensorflow-Umgebung in Docker

Installieren Sie schnell die Tensorflow-Umgebung ...

Frameset über Iframe in Body einfügen

Da Frameset und Body auf derselben Ebene liegen, k...

Webdesign-Referenz Firefox-Standardstil

Obwohl das W3C einige Standards für HTML festgeleg...

Verwendung von MySQL-Triggern

Trigger können dazu führen, dass vor oder nach de...

Fünf Lösungen für Cross-Browser-Probleme (Zusammenfassung)

Kurz zusammengefasst: Browserkompatibilitätsprobl...

vue + ts realisiert den Effekt des Ziehens von Elementen mit der Maus

In diesem Artikelbeispiel wird der spezifische Co...

Tutorial zur Installation von MySQL 5.7.9 mit RPM-Paket unter CentOS 7

Aufgezeichnetes MySQL 5.7.9-Installationstutorial...

Zusammenfassung der drei Lazy-Load-Methoden lazyLoad mit nativem JS

Inhaltsverzeichnis Vorwort Methode 1: Hoher Kontr...

CSS3 realisiert das Papierflugzeug aus der Kindheit

Heute werden wir Origami-Flugzeuge basteln (die A...

Detaillierte Erklärung der Transaktionen und Indizes in der MySQL-Datenbank

Inhaltsverzeichnis 1. Angelegenheiten: Vier Haupt...