JavaScript-Implementierung von Lupendetails

JavaScript-Implementierung von Lupendetails

1. Rendern

2. Umsetzungsprinzip

Mithilfe von zwei Bildern mit gleicher Breiten- und Höhenvergrößerung, kombiniert mit dem Mausversatz, dem Elementversatz, der eigenen Breite und Höhe des Elements und anderen Attributen in js, wird dies vervollständigt; die Maske auf der linken Seite bewegt sich um Xpx und das große Bild auf der rechten Seite bewegt sich um X*Vielfaches von px; der Rest kann mithilfe der Grundschulmathematik berechnet werden.

HTML und CSS :

 <div Klasse="wrap">
    <!-- Miniaturansicht und Maske -->
    <div id="klein">
      <img src="img/1.jpg" alt="" >
      <div id="Markierung"></div>
    </div>
    <!-- Vergrößertes Bild im gleichen Maßstab -->
    <div id="groß">
      <img src="img/2.jpg" alt="" id="bigimg">
    </div>
  </div>
 * {
      Rand: 0;
      Polsterung: 0;
    }
    .wickeln {
      Breite: 1500px;
      Rand: 100px automatisch;
    }

    #klein {
      Breite: 432px;
      Höhe: 768px;
      schweben: links;
      Position: relativ;
    }

    #groß {
      /* Hintergrundfarbe: seegrün; */
      Breite: 768px;
      Höhe: 768px;
      schweben: links;
      /* Der Teil hinter dem Sucher ist verborgen*/
      Überlauf: versteckt;
      Rand links: 20px;
      Position: relativ;
      Anzeige: keine;
    }

    #großesBild {
      /* Breite: 864px; */
      Position: absolut;
      links: 0;
      oben: 0;
    }

    #markieren {
      Breite: 220px;
      Höhe: 220px;
      Hintergrundfarbe: #fff;
      Deckkraft: .5;
      Position: absolut;
      links: 0;
      oben: 0;
      /* Mauspfeilstil*/
      Cursor: bewegen;
      Anzeige: keine;
    }

// Holen Sie sich das kleine Bild und die Maske, das große Bild und die große Box var small = document.getElementById("small")
    var Markierung = document.getElementById("Markierung")
    var groß = document.getElementById("groß")
    var bigimg = document.getElementById("bigimg")
    //Mausbewegungsereignisse im kleinen Bildbereich abrufen; die Maske folgt der Mausbewegung small.onmousemove = function (e) {
      // Den Versatz der Maske relativ zum Miniaturbild abrufen (Mauskoordinaten – Versatz des Miniaturbilds relativ zum Hauptteil – die Hälfte der Breite oder Höhe der Maske)
      var s_left = e.pageX - Markierung.OffsetWidth / 2 - small.OffsetLeft
      var s_top = e.pageY - Markierung.OffsetHeight / 2 - small.OffsetTop
      // Die Maske kann nur innerhalb des Miniaturbildes verschoben werden, daher muss der Schwellenwert des Maskenversatzes (relativ zum Miniaturbildwert) berechnet werden
      var max_left = kleine.OffsetWidth - Markierung.OffsetWidth;
      var max_top = kleine.OffsetHeight - Markierung.OffsetHeight;
      // Wenn sich die Maske bewegt, bewegt sich auch das große Bild rechts (für jedes Pixel, um das sich die Maske bewegt, muss sich das Bild n-mal in die entgegengesetzte Richtung bewegen)
      var n = große.OffsetWidth / mark.OffsetWidth
      // Beurteilen Sie, bevor die Maske der Mausbewegung folgt: Der Versatz der Maske relativ zum Miniaturbild darf den Bereich nicht überschreiten und muss neu zugewiesen werden, wenn er den Bereich überschreitet (der kritische Wert wurde oben berechnet: max_left und max_top)
      // Bestimme die horizontale Grenze, wenn (s_left < 0) {
        s_links = 0
      } sonst wenn (s_left > max_left) {
        s_links = max_links
      }
      //Beurteile die vertikale Grenze, wenn (s_top < 0) {
        s_top = 0
      } sonst wenn (s_top > max_top) {
        s_top = max_top
      }
      //Der Maske links und oben Werte zuweisen (dynamisch? Denn e.pageX und e.pageY sind veränderliche Größen), verschieben!
      Markierung.Stil.links = s_links + "px";
      mark.style.top = s_top + "px";
      // Berechnen Sie die Distanz, über die sich das große Bild bewegt. var levelx = -n * s_left;
      var vertikaly = -n * s_top;
      // Bild verschieben bigimg.style.left = levelx + "px";
      bigimg.style.top = vertikal + "px";
    }
    // Die Maske und der Folgestil werden nur angezeigt, wenn die Maus in das kleine Bild hineinbewegt wird und verschwinden, wenn die Maus aus dem kleinen Bild herausbewegt wird small.onmouseenter = function () {
      mark.style.display = "Block"
      großer.Stil.Anzeige="Block"
    }
    klein.onmouseleave = Funktion () {
      mark.style.display = "keine"
      big.style.display="keine"
    }

3. Zusammenfassung

  • Sobald sich der Mausfokus bewegt, ist sein Versatz dynamisch. Nachdem das übergeordnete Element und die untergeordneten Elemente positioniert wurden, wird der „dynamische“ Effekt durch dynamisches Ändern left und top Werte eines Elements erzielt.
  • Großes Bild/kleines Bild = Lupe (Maske)/Sucher
  • Die beiden Bilder müssen im gleichen Verhältnis skaliert sein.

Dies ist das Ende dieses ausführlichen Artikels zur Implementierung einer Lupe in js. Weitere relevante Inhalte zur Implementierung einer Lupe in js finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Implementierungsprozess des Lupeneffekts im Javascript-Beispielprojekt
  • JavaScript realisiert Lupen-Spezialeffekte
  • JavaScript imitiert die Spezialeffekte der Jingdong-Lupe
  • Objektorientierte JavaScript-Implementierung eines Lupengehäuses
  • JavaScript imitiert den Jingdong-Lupeneffekt
  • JavaScript imitiert den Taobao-Lupeneffekt
  • JavaScript zum Erzielen eines Lupeneffekts
  • Ideen und Codes zur Realisierung des Lupeneffekts in js

<<:  Holen Sie sich den berechneten Stil im CSS-Element (nach dem kaskadierenden/finalen Stil).

>>:  Beispiel für die Verwendung eines CSS-Filters zum Schreiben von Mouseover-Effekten

Artikel empfehlen

SQL-Implementierung von LeetCode (177. N-höchstes Gehalt)

[LeetCode] 177.N-höchstes Gehalt Schreiben Sie ei...

So erstellen Sie Ihren eigenen nativen JavaScript-Router

Inhaltsverzeichnis Vorwort Einführung JavaScript ...

15-minütiges paralleles Artefakt GNU Parallel Erste Schritte

GNU Parallel ist ein Shell-Tool zum parallelen Au...

WeChat-Applet-Canvas implementiert Signaturfunktion

Im WeChat-Applet-Projekt umfasst das Entwicklungs...

Implementierungsschritte zum Erstellen mehrseitiger Programme mit Webpack

Es ist sehr üblich, webpack zum Erstellen einseit...

Elementui exportiert Daten in XLSX- und Excel-Tabellen

Kürzlich habe ich vom Vue-Projekt erfahren und bi...

Erläuterung, ob im interaktiven Design Paging oder Laden gewählt werden soll

Der Autor dieses Artikels @子木yoyo hat ihn in seine...

vue3+ts+EsLint+Prettier Standardcode-Implementierung

Inhaltsverzeichnis verwenden Verwendung von EsLin...

MySQL 5.7.12 Installations- und Konfigurations-Tutorial unter Mac OS 10.11

So installieren und konfigurieren Sie MySQL auf M...