Ich habe ein HTML-Dokument mit Bildern in einem Rasterformat mit <ul><li><img...
. Das Browserfenster bietet sowohl vertikales als auch horizontales Scrollen.
Frage:
Wenn ich auf ein Bild klicke <img>
, wie kann ich dann das gesamte Dokument zu einer Position scrollen, an der sich das Bild befindet, auf das ich gerade geklickt habe top:20px; left:20px
?
Ich habe hier nach ähnlichen Beiträgen gesucht ... obwohl ich noch ziemlich neu in JavaScript bin und verstehen möchte, wie dies für mich selbst erreicht wird.
javascript
jquery
Nasir
quelle
quelle
Antworten:
Da Sie wissen möchten, wie es funktioniert, erkläre ich es Schritt für Schritt.
Zuerst möchten Sie eine Funktion als Klick-Handler des Bildes binden:
Dadurch wird der Klick-Handler auf ein Bild mit angewendet
id="someImage"
. Wenn Sie dies für alle Bilder tun möchten , ersetzen Sie'#someImage'
durch'img'
.Nun zum eigentlichen Bildlaufcode:
Holen Sie sich die Bildversätze (relativ zum Dokument):
Subtrahiere 20 von
top
undleft
:Animieren Sie nun die CSS-Eigenschaften von
<body>
und nach oben und links<html>
:quelle
.scrollIntoView
Methode, wenn Elemente in mehreren überlaufenden Containern verschachtelt sind.Element.scrollIntoView()
: developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoViewscrollIntoView
Es gibt eine DOM-Methode namens
scrollIntoView
, die von allen gängigen Browsern unterstützt wird und die ein Element am oberen / linken Rand des Ansichtsfensters ausrichtet (oder so nah wie möglich).In unterstützten Browsern können Sie folgende Optionen bereitstellen:
Wenn alle Elemente eindeutige IDs haben, können Sie alternativ einfach die
hash
Eigenschaft deslocation
Objekts für die Unterstützung von Schaltflächen für Zurück / Vorwärts ändern :Passen Sie danach einfach die
scrollTop
/scrollLeft
-Eigenschaften um -20 an:quelle
$("#myImage")[0].scrollIntoView(false);
Richtet das Element am unteren Rand des Fensters aus.scrollIntoView
kann für Benutzer ohne irgendeine Art von Animation eine verwirrende Erfahrung sein.scrollIntoView
mit dem booleschen Parameter. Ich werde später versuchen, eine Pull-Anfrage für caniuse.com zu senden.<td>
Elemente in die Ansicht scrollen , sondern musste deren übergeordnetes Element (<tr>
) scrollen, und es funktionierte.Einfachste Lösung, die ich gesehen habe
Tutorial hier
quelle
Es gibt Methoden, um Elemente direkt in die Ansicht zu scrollen. Wenn Sie jedoch zu einem Punkt relativ zu einem Element scrollen möchten, müssen Sie dies manuell tun:
Ermitteln Sie im Click-Handler die Position des Elements relativ zum Dokument, subtrahieren Sie
20
und verwenden Siewindow.scrollTo
:quelle
Schauen Sie sich das Plugin jQuery.scrollTo an . Hier ist eine Demo .
Dieses Plugin bietet viele Optionen, die über das native scrollIntoView hinausgehen Ihnen bietet. Sie können beispielsweise das Scrollen so einstellen, dass es flüssig ist, und dann einen Rückruf festlegen, wenn das Scrollen beendet ist.
Sie können sich auch alle mit "scroll" gekennzeichneten JQuery-Plugins ansehen .
quelle
Hier ist ein schnelles jQuery-Plugin, mit dem Sie die integrierten Browserfunktionen gut abbilden können:
quelle
Nach Versuch und Irrtum habe ich mir diese Funktion ausgedacht, funktioniert auch mit iframe.
quelle
Nur ein Tipp. Funktioniert nur mit Firefox
Element.scrollIntoView ();
quelle
Meine Benutzeroberfläche verfügt über eine vertikale Liste von Daumen in einer Daumenleiste. Ziel war es, den aktuellen Daumen genau in der Mitte der Daumenleiste zu platzieren. Ich ging von der genehmigten Antwort aus, stellte jedoch fest, dass es einige Verbesserungen gab, um den aktuellen Daumen wirklich zu zentrieren. hoffe, das hilft jemand anderem.
Markup:
jquery:
quelle
Einfache 2 Schritte zum Scrollen nach unten bis zum Ende oder unten.
Schritt 1: Holen Sie sich die volle Höhe von scrollbaren (Konversations-) Div.
Schritt 2: Wenden Sie scrollTop mit dem in Schritt 1 erhaltenen Wert auf dieses scrollbare (Konversations-) Div an.
Die obigen Schritte müssen für jeden Anhang im Konversationsbereich angewendet werden.
quelle
Nachdem ich versucht hatte, eine Lösung zu finden, die alle Umstände bewältigte (Optionen zum Animieren der Schriftrolle, Auffüllen des Objekts, sobald es in die Ansicht gescrollt wurde, funktioniert auch unter dunklen Umständen wie in einem Iframe), schrieb ich schließlich meine eigene Lösung dafür. Da es zu funktionieren scheint, wenn viele andere Lösungen fehlgeschlagen sind, dachte ich, ich würde es teilen:
$target
ist ein jQuery-Objekt, das das Objekt enthält, in das Sie bei Bedarf scrollen möchten.options
(optional) kann die folgenden in einem Objekt übergebenen Optionen enthalten:options.$container
- Ein jQuery-Objekt, das auf das enthaltende Element von $ target zeigt (dh das Element im Dom mit den Bildlaufleisten). Der Standardwert ist das Fenster, das das $ target-Element enthält und intelligent genug ist, um ein Iframe-Fenster auszuwählen. Denken Sie daran, das $ in den Eigenschaftsnamen aufzunehmen.options.padding
- das Auffüllen in Pixel, das über oder unter dem Objekt hinzugefügt werden soll, wenn es in die Ansicht gescrollt wird. Auf diese Weise ist es nicht direkt am Rand des Fensters. Der Standardwert ist 20.options.instant
- Wenn true festgelegt ist, wird jQuery animate nicht verwendet und der Bildlauf wird sofort an die richtige Stelle verschoben. Der Standardwert ist false.options.animationOptions
- Alle jQuery-Optionen, die Sie an die jQuery-Animationsfunktion übergeben möchten (siehe http://api.jquery.com/animate/ ). Mit dieser Option können Sie die Dauer der Animation ändern oder eine Rückruffunktion ausführen lassen, wenn der Bildlauf abgeschlossen ist. Dies funktioniert nur, wennoptions.instant
false festgelegt ist. Wenn Sie eine sofortige Animation mit einem Rückruf benötigen, stellen Sie dieseoptions.animationOptions.duration = 0
anstelle der Verwendung einoptions.instant = true
.quelle