Mam dokument HTML z obrazami w formacie siatki przy użyciu <ul><li><img...
. Okno przeglądarki umożliwia przewijanie zarówno w pionie, jak iw poziomie.
Pytanie:
W <img>
jaki sposób po kliknięciu obrazu mogę przewinąć cały dokument do pozycji, w której znajduje się właśnie kliknięty obraz top:20px; left:20px
?
Przeglądałem tutaj podobne posty ... chociaż jestem całkiem nowy w JavaScript i chcę zrozumieć, jak to się robi.
javascript
jquery
Nasir
źródło
źródło
Odpowiedzi:
Ponieważ chcesz wiedzieć, jak to działa, wyjaśnię to krok po kroku.
Najpierw chcesz powiązać funkcję jako moduł obsługi kliknięcia obrazu:
Spowoduje to zastosowanie modułu obsługi kliknięcia do obrazu z rozszerzeniem
id="someImage"
. Jeśli chcesz to zrobić do wszystkich zdjęć, wymień'#someImage'
się'img'
.Teraz rzeczywisty kod przewijania:
Uzyskaj przesunięcia obrazu (względem dokumentu):
Odejmij 20 od
top
ileft
:Teraz animuj właściwości CSS scroll-top i scroll-left w
<body>
i<html>
:źródło
.scrollIntoView
robi to metoda W3C , gdy elementy są zagnieżdżone w wielu przepełnionych kontenerach.Element.scrollIntoView()
: developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoViewscrollIntoView
Jest wywoływana metoda DOM
scrollIntoView
, obsługiwana przez wszystkie główne przeglądarki, która wyrówna element z górną / lewą krawędzią widoku (lub tak blisko, jak to możliwe).W obsługiwanych przeglądarkach możesz podać opcje:
Alternatywnie, jeśli wszystkie elementy mają unikalne identyfikatory, możesz po prostu zmienić
hash
właściwośćlocation
obiektu na obsługę przycisków Wstecz / Dalej:Następnie dostosuj
scrollTop
/scrollLeft
properties o -20:źródło
$("#myImage")[0].scrollIntoView(false);
wyrówna element na dole okna.scrollIntoView
może być mylące dla użytkowników bez jakiejś animacji.scrollIntoView
parametr boolowski. Spróbuję później wysłać prośbę o ściągnięcie dla caniuse.com.<td>
elementów do widoku, zamiast tego musiałem przewijać ich rodzica (<tr>
) i zadziałało.Najprostsze rozwiązanie, jakie widziałem
Samouczek tutaj
źródło
Istnieją metody przewijania elementu bezpośrednio do widoku, ale jeśli chcesz przewinąć do punktu względem elementu, musisz to zrobić ręcznie:
W module obsługi kliknięcia uzyskaj położenie elementu względem dokumentu, odejmij
20
i użyjwindow.scrollTo
:źródło
Spójrz na wtyczkę jQuery.scrollTo . Oto demo .
Ta wtyczka ma wiele opcji, które wykraczają poza to, co natywne scrollIntoView oferuje . Na przykład możesz ustawić przewijanie na płynne, a następnie ustawić oddzwanianie po zakończeniu przewijania.
Możesz także rzucić okiem na wszystkie wtyczki JQuery z tagiem „scroll” .
źródło
Oto szybka wtyczka jQuery do ładnego mapowania wbudowanych funkcji przeglądarki:
źródło
Po próbach i błędach wymyśliłem tę funkcję, działa też z iframe.
źródło
Tylko wskazówka. Działa tylko w przeglądarce Firefox
Element.scrollIntoView ();
źródło
Mój interfejs użytkownika zawiera przewijaną w pionie listę kciuków na pasku miniatur. Celem było umieszczenie bieżącego kciuka na środku paska. Zacząłem od zatwierdzonej odpowiedzi, ale stwierdziłem, że było kilka poprawek, aby naprawdę wycentrować bieżący kciuk. mam nadzieję, że to pomoże komuś innemu.
narzut:
jQuery:
źródło
Proste 2 kroki przewijania w dół do końca lub do dołu.
Krok 1: uzyskaj pełną wysokość przewijalnego (konwersacji) div.
Krok 2: zastosuj scrollTop do tego przewijalnego elementu div (konwersacji), używając wartości uzyskanej w kroku 1.
Powyższe kroki należy zastosować dla każdego dodatku do div konwersacji.
źródło
Po próbie znalezienia rozwiązania, które poradziłoby sobie z każdą sytuacją (opcje animacji zwoju, wypełniania wokół obiektu po przewinięciu do widoku, działa nawet w niejasnych okolicznościach, takich jak iframe), w końcu napisałem własne rozwiązanie tego problemu. Ponieważ wydaje się działać, gdy wiele innych rozwiązań zawiodło, pomyślałem, że podzielę się tym:
$target
jest obiektem jQuery zawierającym obiekt, który chcesz przewinąć do widoku w razie potrzeby.options
(opcjonalnie) może zawierać następujące opcje przekazane w obiekcie:options.$container
- obiekt jQuery wskazujący na zawierający element $ target (innymi słowy, element w dom z suwakami). Domyślnie jest to okno, które zawiera element $ target i jest wystarczająco inteligentne, aby wybrać okno iframe. Pamiętaj o umieszczeniu znaku $ w nazwie właściwości.options.padding
- wypełnienie w pikselach, które ma być dodane powyżej lub poniżej obiektu, gdy jest przewijany do widoku. W ten sposób nie znajduje się bezpośrednio przy krawędzi okna. Domyślnie 20.options.instant
- jeśli ustawione na true, jQuery animate nie będzie używane, a przewijanie natychmiast wyskoczy do właściwej lokalizacji. Domyślnie false.options.animationOptions
- wszelkie opcje jQuery, które chcesz przekazać do funkcji animacji jQuery (patrz http://api.jquery.com/animate/ ). Dzięki temu możesz zmienić czas trwania animacji lub zlecić wykonanie funkcji zwrotnej po zakończeniu przewijania. Działa to tylko wtedy, gdyoptions.instant
ma wartość false. Jeśli potrzebujesz natychmiastowej animacji, ale z wywołaniem zwrotnym, ustawoptions.animationOptions.duration = 0
zamiast używaćoptions.instant = true
.źródło