Ich habe ein Div mit einer Bildlaufleiste. Wenn es das Ende erreicht, beginnt meine Seite zu scrollen. Kann ich dieses Verhalten trotzdem stoppen?
javascript
html
Jeevan
quelle
quelle
Antworten:
Sie können das Scrollen der gesamten Seite inaktivieren, indem Sie Folgendes tun:
quelle
Die Lösung gefunden.
http://jsbin.com/itajok
Das brauchte ich.
Und das ist der Code.
http://jsbin.com/itajok/edit#javascript,html
Verwendet ein jQuery-Plug-In.
Update wegen Verfallserklärung
Vom jquery-mousewheel :
Dann
event.deltaY
muss jetzt verwendet werden:Demo
quelle
Die ausgewählte Lösung ist ein Kunstwerk. Ich dachte, es wäre ein Plugin wert ...
Dies war für mich eine ständige Unannehmlichkeit und diese Lösung ist im Vergleich zu anderen Hacks, die ich gesehen habe, so sauber. Neugierig zu wissen, wie viel mehr darüber funktioniert und wie weit verbreitet es sein würde, aber ein Hoch auf Jeevan und jeden, der sich das ursprünglich ausgedacht hat. Übrigens - der Stackoverflow-Antworteditor benötigt dies!
AKTUALISIEREN
Ich glaube, das ist insofern besser, als es nicht versucht, das DOM überhaupt zu manipulieren, sondern nur das bedingte Sprudeln verhindert ...
Funktioniert hervorragend in Chrom und ist viel einfacher als andere Lösungen ... lassen Sie mich wissen, wie es anderswo abschneidet ...
GEIGE
quelle
wheel
Sie könnten ein Mouseover-Ereignis auf dem div verwenden, um die Body-Bildlaufleiste zu deaktivieren, und dann ein Mouseout-Ereignis, um sie erneut zu aktivieren?
ZB das HTML
Und dann gefällt das Javascript so:
quelle
document.body
stattdessen auch verwenden.Hier ist eine browserübergreifende Methode, um dies auf der Y-Achse zu tun. Sie funktioniert auf Desktop- und Mobilgeräten. Getestet unter OSX und iOS.
quelle
scrollTop === maxScroll
durchscrollTop >= maxScroll
. Es scheint seltsam zu sein, in einem Fall wurde es benötigtIch habe eine Lösung für dieses Problem geschrieben
quelle
e.currentTarget
.false
jedoch nicht angegeben werden,addEventListener
da dies die Standardeinstellung ist. Darüber hinaus sollten die Vergleiche einfache Ungleichungen (>
und<
) sein, nicht>=
oder<=
.Wenn ich Ihre Frage richtig verstehe, möchten Sie verhindern, dass der Hauptinhalt gescrollt wird, wenn sich die Maus über einem Div befindet (sagen wir eine Seitenleiste). Aus diesem Grund ist die Seitenleiste möglicherweise kein untergeordnetes Element des Bildlaufcontainers des Hauptinhalts (der das Browserfenster war), um zu verhindern, dass das Bildlaufereignis zu seinem übergeordneten Element sprudelt.
Dies erfordert möglicherweise einige Markup-Änderungen auf folgende Weise:
Sehen Sie, dass es in dieser Beispielgeige funktioniert, und vergleichen Sie dies mit dieser Beispielgeige, die ein etwas anderes Mausverlaufsverhalten der Seitenleiste aufweist.
Siehe auch nur einen bestimmten Div mit der Hauptscrollleiste des Browsers scrollen .
quelle
Wie hier beantwortet , unterstützen die meisten modernen Browser jetzt die
overscroll-behavior: none;
CSS-Eigenschaft, die eine Bildlaufverkettung verhindert. Und das war's, nur eine Zeile!quelle
overscroll-behavior: contain;
.Dadurch wird das Scrollen im Fenster deaktiviert, wenn Sie das Auswahlelement eingeben. funktioniert wie Zauber.
quelle
Sie können das Scrollen der gesamten Seite inaktivieren, indem Sie so etwas tun, aber die Bildlaufleiste anzeigen!
quelle
quelle
Basierend auf der Antwort von ceed ist hier eine Version, die das Verschachteln von scrollgeschützten Elementen ermöglicht. Nur das Element, über dem sich die Maus befindet, wird gescrollt, und es wird ganz reibungslos gescrollt. Diese Version ist ebenfalls wieder verfügbar. Es kann mehrfach für dasselbe Element verwendet werden und entfernt und behandelt die Handler korrekt.
Eine einfache Möglichkeit besteht darin
scroll-guard
, allen Elementen auf der Seite, auf denen Sie einen Bildlauf durchführen können , eine Klasse hinzuzufügen, z . Dann verwenden Sie$('.scroll-guard').scrollGuard()
, um sie zu schützen.quelle
Wenn Sie einen
overflow: hidden
Stil anwenden , sollte er verschwindenedit: eigentlich habe ich deine frage falsch gelesen, das wird nur die scrollleiste verbergen, aber ich glaube nicht, dass du danach suchst.
quelle
Ich konnte keine der Antworten für die Arbeit in Chrome und Firefox erhalten, daher habe ich mir diese Zusammenführung ausgedacht:
quelle