Czy można sprawdzić overflow:auto
div?
Na przykład:
HTML
<div id="my_div" style="width: 100px; height:100px; overflow:auto;" class="my_class">
* content
</div>
JQUERY
$('.my_class').live('hover', function (event)
{
if (event.type == 'mouseenter')
{
if( ... if scrollbar visible ? ... )
{
alert('true'):
}
else
{
alert('false'):
}
}
});
Czasami treść jest krótka (bez paska przewijania), a czasem długa (widoczny pasek przewijania).
> this.innerHeight();
jsfiddle.net/p3FFL/210Może prostsze rozwiązanie.
źródło
.ready()
Możesz to zrobić za pomocą kombinacji atrybutów
Element.scrollHeight
iElement.clientHeight
.Według MDN:
I:
Dlatego element wyświetli pasek przewijania, jeśli wysokość przewijania jest większa niż wysokość klienta, więc odpowiedź na twoje pytanie brzmi:
źródło
Powinienem zmienić drobiazg tego, co powiedziała Reigel:
innerHeight liczy wysokość kontrolki oraz jej górne i dolne wypełnienia
źródło
Rozszerza to odpowiedź @ Reigel. Zwróci odpowiedź dla poziomych lub pionowych pasków przewijania.
Przykład:
źródło
Potrzebujesz element.scrollHeight . Porównaj to z
$(element).height()
.źródło
Zrobiłem nowy niestandardowy: pseudo selektor dla jQuery, aby sprawdzić, czy element ma jedną z następujących właściwości css:
Chciałem znaleźć najbliższy przewijalny element nadrzędny innego elementu, więc napisałem też kolejną małą wtyczkę jQuery, aby znaleźć najbliższego elementu nadrzędnego z przepełnieniem.
To rozwiązanie prawdopodobnie nie działa najlepiej, ale wydaje się, że działa. Użyłem go w połączeniu z wtyczką $ .scrollTo. Czasami muszę wiedzieć, czy element znajduje się w innym przewijalnym pojemniku. W takim przypadku chcę przewinąć nadrzędny przewijalny element względem okna.
Prawdopodobnie powinienem był zawinąć to w pojedynczą wtyczkę i dodać selektor psuedo jako część wtyczki, a także ujawnić „najbliższą” metodę znalezienia najbliższego (nadrzędnego) przewijalnego kontenera.
W każdym razie ... oto jest.
$ .isScrollable jQuery plugin:
$ (': przewijalny') pseudo selektor jQuery:
$ .scrollableparent () wtyczka jQuery:
Implementacja jest dość prosta
AKTUALIZACJA: Odkryłem, że Robert Koritnik już wymyślił znacznie potężniejszy: pseudo selektor przewijalny, który zidentyfikuje przewijalne osie i wysokość przewijalnych pojemników, jako część jego wtyczki $ .scrollintoview () jQuery. plugin scrollintoview
Oto jego fantazyjny pseudo selektor (rekwizyty):
źródło
Pierwsze powyższe rozwiązanie działa tylko w IE Drugie powyższe rozwiązanie działa tylko w FF
Ta kombinacja obu funkcji działa w obu przeglądarkach:
HTH
źródło
(scrollWidth / Height - clientWidth / Height) jest dobrym wskaźnikiem obecności paska przewijania, ale w wielu przypadkach daje odpowiedź „fałszywie pozytywną”. jeśli chcesz być dokładny, sugeruję skorzystanie z następującej funkcji. zamiast zgadywać, czy element można przewijać - możesz go przewijać ...
źródło
Ugh, wszystkie odpowiedzi tutaj są niekompletne, i proszę przestańmy używać jquery w odpowiedziach SO. Sprawdź dokumentację jquery, jeśli chcesz uzyskać informacje na temat jquery.
Oto uogólniona funkcja czystego javascript do testowania, czy element ma paski przewijania w sposób kompletny:
źródło
Zamierzam rozwinąć tę kwestię jeszcze bardziej dla tych biednych dusz, które, podobnie jak ja, używają jednego z nowoczesnych frameworków js, a nie JQuery i zostały całkowicie porzucone przez ludzi tego wątku:
zostało to napisane w Angular 6, ale jeśli napiszesz React 16, Vue 2, Polymer, Ionic, React-Native, będziesz wiedział, co zrobić, aby go dostosować. I to cały element, więc powinno być łatwo.
w html będzie div z klasą „elem-list”, która jest stylizowana w css lub scss, aby mieć wartość
height
ioverflow
wartość, która nie jesthidden
. (takauto
lubsroll
)Wywołuję tę ewaluację podczas zdarzenia przewijania, ponieważ moim ostatecznym celem było „automatyczne przewijanie fokusu”, które decyduje, czy przewijają one cały zestaw komponentów w poziomie, jeśli te komponenty nie mają przewijania w pionie, a w przeciwnym razie przewijają tylko wnętrze jednego z komponenty w pionie.
ale możesz umieścić ewaluację gdzie indziej, aby została uruchomiona przez coś innego.
ważną rzeczą do zapamiętania tutaj jest to, że nigdy nie musisz zmuszać się do korzystania z JQuery, zawsze jest sposób na uzyskanie dostępu do tych samych funkcji, które ma on bez korzystania z niego.
źródło
this
zachowuje zakres nadrzędny;th = this;
jest niepotrzebne.function(){}.bind(this)
Oto ulepszona wersja odpowiedzi Evana, która wydaje się odpowiednio uwzględniać logikę przepełnienia.
źródło
Powyższe rozwiązania będą działać w większości przypadków, ale sprawdzanie scrollHeight i przepełnienie jest czasem niewystarczające i może zawieść w przypadku elementów body i HTML jak widać tutaj: https://codepen.io/anon/pen/EvzXZw
1. Rozwiązanie - Sprawdź, czy element można przewijać:
Uwaga: elementy z
overflow: hidden
są również traktowane jako przewijalne ( więcej informacji ), więc w razie potrzeby możesz dodać warunek:O ile wiem, ta metoda zawodzi tylko wtedy, gdy element ma
scroll-behavior: smooth
.Objaśnienie: Sztuczka polega na tym, że próba przewinięcia w dół i cofnięcia nie zostanie wykonana przez przeglądarkę. Najwyższą funkcję można również zapisać następująco:
Pokaż fragment kodu
2. Rozwiązanie - Wykonaj wszystkie niezbędne kontrole:
źródło
Oto moja poprawa: dodano analizę. z jakiegoś dziwnego powodu nie działałoby bez tego.
źródło
Działa w Chrome , Edge , Firefox i Opera , przynajmniej w nowszych wersjach.
Korzystanie z JQuery ...
Ustaw tę funkcję, aby naprawić stopkę:
Zwraca funkcję. Wykonano w ten sposób, aby raz ustawić ciało i stopkę.
A następnie ustaw to, gdy dokument będzie gotowy.
Dodaj to do swojej stopki css:
źródło
Większość przedstawionych odpowiedzi zbliżyła mnie do miejsca, w którym powinienem być, ale nie do końca.
Zasadniczo chcieliśmy ocenić, czy paski przewijania - powinny być widoczne w normalnej sytuacji, zgodnie z tą definicją, co oznacza, że rozmiar elementu treści jest większy niż port widoku. To nie było przedstawione rozwiązanie, dlatego je zgłaszam.
Mam nadzieję, że to komuś pomaga!
Zasadniczo mamy
hasScrollbar
funkcję, ale zwracamy , jeśli żądany element jest większy niż port widoku. Po prostu użyliśmy rozmiaru widoku portu$(window).height()
. Szybkie porównanie tego z rozmiarem elementu daje prawidłowe wyniki i pożądane zachowanie.źródło
Znajdź element nadrzędny bieżącego elementu, który ma przewijanie pionowe lub bryłę.
Można go użyć do automatycznego przewijania do bieżącego elementu za pomocą:
źródło
Podejście JavaScript bez ram, sprawdza zarówno w pionie, jak iw poziomie
Użyj tego w ten sposób
źródło