Ich möchte ein div erstellen, das sich unter einem Inhaltsblock befindet, aber sobald die Seite so weit gescrollt wurde, dass sie ihre obere Grenze berührt, fixiert wird und mit der Seite scrollt.
javascript
jquery
css
scroll
positioning
evanr
quelle
quelle
position: sticky; top:0;
funktioniert in den meisten Browsern im Januar 2017.position: sticky;
Ding ist magisch.Antworten:
Sie können einfach CSS verwenden und Ihr Element als fest positionieren :
Bearbeiten: Sie sollten das Element mit der absoluten Position haben. Sobald der Bildlaufversatz das Element erreicht hat, sollte es auf fest geändert und die obere Position auf Null gesetzt werden.
Sie können den oberen Bildlaufversatz des Dokuments mit der Funktion scrollTop ermitteln :
Wenn die Scroll - Offset 200 erreicht, wird das Element haften an den oberen Rand des Browserfensters, weil , wie festgelegt angeordnet ist.
quelle
if ($(this).scrollTop() < 200 && $el.css('position') == 'fixed') { $('.fixedElement').css({'position': 'static', 'top': '0px'}); }
new example
Link, den Sie gegeben haben, ist so sauber und klar, dass ich ihn nicht einmal sehen kann! -_-Sie haben dieses Beispiel auf der Ausgabeseite von Google Code und (erst kürzlich) auf der Bearbeitungsseite von Stack Overflow gesehen.
Die Antwort von CMS setzt die Positionierung nicht zurück, wenn Sie zurück scrollen. Hier ist der schamlos gestohlene Code von Stack Overflow:
Und eine einfache Live-Demo .
Eine aufkommende, skriptfreie Alternative ist die
position: sticky
, die in Chrome, Firefox und Safari unterstützt wird. Weitere Informationen finden Sie im Artikel zu HTML5Rocks und Demo sowie in Mozilla-Dokumenten .quelle
offset
muss das Akzeptieren eines Objekts als Eingabe api.jquery.com/offset aufgehört haben . @Eddie Ihre Änderung sollte mit der aktuellen jQuery sicher sein.var d = $("#scroller-anchor").offset().top;
mitvar d = $("#sidebar").offset().top;
und alle zusammen dem leeren scroller-Anker div loswerden? Hier ist meine Gabel, die zeigt, wovon ich spreche.Ab Januar 2017 und der Veröffentlichung von Chrome 56 unterstützen die meisten gängigen Browser die
position: sticky
Eigenschaft in CSS.macht den Trick für mich in Firefox und Chrome.
In Safari müssen Sie noch verwenden
position: -webkit-sticky
.Polyfills sind für Internet Explorer und Edge verfügbar. https://github.com/wilddeer/stickyfill scheint gut zu sein.
quelle
Ich hatte das gleiche Problem wie Sie und habe am Ende ein jQuery-Plugin erstellt, um mich darum zu kümmern. Es löst tatsächlich alle Probleme, die hier aufgelistet sind, und fügt einige optionale Funktionen hinzu.
Optionen
https://github.com/donnyv/sticky-panel
Demo: http://htmlpreview.github.io/?https://github.com/donnyv/sticky-panel/blob/master/jquery.stickyPanel/Main.htm
quelle
code
// Panel entfernen node.css ({"margin": 0, "left": nodeLeft, "top": newNodeTop, "position": "fixed", "width": node.width ()});code
Und so geht's ohne jquery (UPDATE: siehe andere Antworten, wo Sie dies jetzt nur mit CSS tun können)
quelle
So habe ich es mit jquery gemacht. Dies alles wurde aus verschiedenen Antworten zum Stapelüberlauf zusammengeschustert. Diese Lösung speichert die Selektoren zwischen, um eine schnellere Leistung zu erzielen, und löst auch das "Springen" -Problem, wenn das klebrige Div klebrig wird.
Überprüfen Sie es auf jsfiddle: http://jsfiddle.net/HQS8s/
CSS:
JS:
quelle
Hier ist eine weitere Option:
JAVASCRIPT
Sie
#myElementToStick
sollten mit derposition:absolute
CSS-Eigenschaft beginnen.quelle
Wie Josh Lee und Colin 't Hart gesagt haben, können Sie optional auch einfach
position: sticky; top: 0;
auf die Div anwenden, bei der Sie scrollen möchten ...Außerdem müssen Sie dies nur oben auf Ihrer Seite kopieren oder so formatieren, dass es in ein externes CSS-Blatt passt:
Ersetzen Sie einfach durch
#sticky_div's_name_here
den Namen Ihres Div, dh wenn Ihr Div<div id="example">
wäre, würden Sie setzen#example { position: sticky; top: 0; }
.quelle
Meine Lösung ist etwas ausführlich, behandelt jedoch die variable Positionierung vom linken Rand für zentrierte Layouts.
quelle
Hier ist eine weitere Version für diejenigen, die Probleme mit den anderen haben. Es fasst die in dieser doppelten Frage diskutierten Techniken zusammen und generiert die erforderlichen Hilfs-DIVs dynamisch, sodass kein zusätzlicher HTML-Code erforderlich ist.
CSS:
JQuery:
Um ein Element klebrig zu machen, gehen Sie wie folgt vor:
Wenn das Element klebrig wird, verwaltet der Code die Position des verbleibenden Inhalts, um zu verhindern, dass er in die Lücke springt, die das klebrige Element hinterlässt. Außerdem wird das klebrige Element beim Zurückblättern wieder in seine ursprüngliche nicht klebrige Position zurückgebracht.
quelle
Hier ist eine erweiterte Version von Josh Lees Antwort. Wenn Sie möchten, dass sich das div in der Seitenleiste rechts befindet und innerhalb eines Bereichs schwebt (dh Sie müssen die oberen und unteren Ankerpositionen angeben). Es behebt auch einen Fehler, wenn Sie dies auf Mobilgeräten anzeigen (Sie müssen die linke Bildlaufposition überprüfen, sonst bewegt sich das div vom Bildschirm).
quelle
Ich bin darauf gestoßen, als ich nach dem gleichen Ding gesucht habe. Ich weiß, dass es eine alte Frage ist, aber ich dachte, ich würde eine neuere Antwort anbieten.
Scrollorama hat eine "Pin it" -Funktion, die genau das ist, wonach ich gesucht habe.
http://johnpolacek.github.io/scrollorama/
quelle
Die Informationen zur Beantwortung dieser anderen Frage können Ihnen helfen, Evan:
Überprüfen Sie nach dem Scrollen, ob das Element sichtbar ist
Grundsätzlich möchten Sie den Stil des Elements so ändern, dass es erst dann auf "fest" gesetzt wird, wenn Sie überprüft haben, ob der Wert "document.body.scrollTop" mindestens dem oberen Rand Ihres Elements entspricht.
quelle
Die akzeptierte Antwort funktioniert, kehrt jedoch nicht zur vorherigen Position zurück, wenn Sie darüber scrollen. Es klebt immer oben, nachdem es dort platziert wurde.
Jleedevs Antwort würde funktionieren, aber ich konnte sie nicht zum Laufen bringen. Seine Beispielseite hat auch nicht funktioniert (für mich).
quelle
Sie können 3 zusätzliche Zeilen hinzufügen, sodass der Div an seiner alten Stelle bleibt, wenn der Benutzer nach oben zurückblättert:
Hier ist der Code:
quelle
Ich habe Links in einem Div eingerichtet, so dass es eine vertikale Liste von Buchstaben- und Zahlenlinks ist.
Ich habe dann diese praktische jQuery-Funktion eingerichtet, um die geladene Position zu speichern und die Position dann auf fest zu ändern, wenn ich über diese Position hinaus scrolle.
HINWEIS: Dies funktioniert nur, wenn die Links beim Laden der Seite sichtbar sind !!
quelle
Ich habe einige der oben genannten Arbeiten verwendet, um diese Technologie zu erstellen. Ich habe es ein bisschen verbessert und dachte, ich würde meine Arbeit teilen. Hoffe das hilft.
jsfuddle Code
Dies ist eine etwas dynamischere Methode zum Scrollen. Es braucht etwas Arbeit und ich werde es irgendwann in einen Stecker verwandeln, aber das habe ich mir nach einer Stunde Arbeit ausgedacht.
quelle
In Javascript können Sie Folgendes tun:
quelle
Keine exakte Lösung, aber eine gute Alternative
NUR diese CSS-Bildlaufleiste oben auf dem Bildschirm . Gelöst alle das Problem mit nur CSS , NO JavaScript, NO JQuery, kein Gehirn Arbeit ( lol ).
Viel Spaß mit meiner Geige : D Alle Codes sind dort enthalten :)
CSS
Setzen Sie den Inhalt lange genug ein, damit Sie den Effekt hier sehen können :) Oh, und die Referenz ist auch dort, weil er seine Anerkennung verdient
NUR CSS Bildlaufleiste am oberen Bildschirmrand
quelle
Hier ist ein Beispiel, das ein jquery-sichtbares Plugin verwendet: http://jsfiddle.net/711p4em4/ .
HTML:
CSS:
JS (einschließlich jquery-sichtbares Plugin):
quelle
klebrig, bis die Fußzeile die Div trifft:
quelle