Hey! Bevor du dich zu tief in das Kaninchenloch des JavaScript-basierten Smooth Scrolling begibst, solltest du wissen, dass es dafür eine native CSS-Funktion gibt: scroll-behavior.
html {
scroll-behavior: smooth;
}
Und bevor du zu einer Bibliothek wie jQuery greifst, um dir zu helfen, gibt es auch eine native JavaScript-Version des Smooth Scrollings, wie diese
// Scroll to specific values
// scrollTo is the same
window.scroll({
top: 2500,
left: 0,
behavior: 'smooth'
});
// Scroll certain amounts from current position
window.scrollBy({
top: 100, // could be negative value
left: 0,
behavior: 'smooth'
});
// Scroll to a certain element
document.querySelector('.hello').scrollIntoView({
behavior: 'smooth'
});
Dustan Kasten hat einen Polyfill dafür. Und du würdest wahrscheinlich nur darauf zurückgreifen, wenn du etwas mit dem Scrollen der Seite tun würdest, das nicht mit #target Jump-Links und CSS erledigt werden könnte.
Barrierefreiheit von Smooth Scrolling
Unabhängig davon, welche Technologie du für Smooth Scrolling verwendest, ist die Barrierefreiheit ein Thema. Wenn du zum Beispiel auf einen #hash-Link klickst, besteht das native Verhalten des Browsers darin, den Fokus auf das Element zu ändern, das dieser ID entspricht. Die Seite kann scrollen, aber das Scrollen ist ein Nebeneffekt der Fokusänderung.
Wenn du das Standardverhalten der Fokusänderung überschreibst (was du tun musst, um sofortiges Scrollen zu verhindern und sanftes Scrollen zu ermöglichen), musst du die Fokusänderung selbst übernehmen.
Heather Migliorisi schrieb darüber, mit Code-Lösungen, in Smooth Scrolling und Barrierefreiheit.
Sanftes Scrollen mit jQuery
jQuery kann dies auch tun. Hier ist der Code, um einen sanften Seiten-Scroll zu einem Anker auf derselben Seite durchzuführen. Er verfügt über eine integrierte Logik, um diese Jump-Links zu identifizieren und andere Links nicht anzusteuern.
// Select all links with hashes
$('a[href*="#"]')
// Remove links that don't actually link to anything
.not('[href="#"]')
.not('[href="#0"]')
.click(function(event) {
// On-page links
if (
location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '')
&&
location.hostname == this.hostname
) {
// Figure out element to scroll to
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
// Does a scroll target exist?
if (target.length) {
// Only prevent default if animation is actually gonna happen
event.preventDefault();
$('html, body').animate({
scrollTop: target.offset().top
}, 1000, function() {
// Callback after animation
// Must change focus!
var $target = $(target);
$target.focus();
if ($target.is(":focus")) { // Checking if the target was focused
return false;
} else {
$target.attr('tabindex','-1'); // Adding tabindex for elements not focusable
$target.focus(); // Set focus again
};
});
}
}
});
Wenn du diesen Code verwendet hast und dich fragst: HEY, WAS IST MIT DEN BLAUEN UMRISSEN?!, lies die Informationen zur Barrierefreiheit oben.
Sanftes Scrollen in React
James Quick hat ein schönes Schritt-für-Schritt-Tutorial zur Implementierung von Smooth Scrolling in React mit dem react-scroll-Plugin
<Link
activeClass="active"
to="section1"
spy={true}
smooth={true}
offset={-70}
duration={500}
>
ICH LIEBE DICH!!!! Ich habe monatelang versucht herauszufinden, wie das geht! :-)
funktioniert einwandfrei.. vielen Dank.
Vielen Dank für dieses Skript. Es hat eine Weile gedauert, aber ich habe es zum Laufen gebracht!
Die Referenz-URL zeigt jetzt eine 404-Seite an. Kennt jemand einen anderen Ort, der den HTML-Code zum JS hat? ...und am besten auf Englisch? :)
Neue Referenz-URL erstellt.
Ich habe es geschafft!
Das JS ist geändert und die Erklärung befindet sich in der JS-Datei…
http://codepen.io/HZaccaro/pen/zvrgLb/
Toller Code, eine Frage,
Ich habe ein Sidebar-Widget für mein Video, Archiv und Tags, mit dem dieser Code in Konflikt gerät. Was ist die Kodierung/der Marker, um dies zu deaktivieren?
Du kannst versuchen, die jQuery noConflict-Technik zu verwenden. Lies hier darüber: http://api.jquery.com/jQuery.noConflict/
Ich bekomme es beim besten Willen nicht zum Laufen, obwohl ich das Beispiel perfekt befolge… Hat jemand Ideen?
Ohne eine Beschreibung deines Problems oder eine URL wird dir niemand helfen können.
Eine Sache, die ich sagen kann, ist, dass du sicherstellen solltest, dass du die jquery-Bibliothek lädst.
Hi, ich weiß nichts über JS, aber wenn du das zwischen
<head>und</head>kopierst, wird es funktionierenUnd alle Elemente, die du ansprechen möchtest, müssen so aussehen
Es wird funktionieren, glaube ich…
Danke SquirFly,
Dein Code funktioniert gut. Ich habe ihn in Wordpress 3.8 verwendet.
Stelle sicher, dass du das Skript oben in den Tags platzierst.
Ich weiß, das ist 5 Jahre zu spät, aber… mit der neueren Version von jQuery (2.2) musst du im Pseudoselektor Anführungszeichen hinzufügen
d.h. mit anderen Worten, ändere diesen Teil
a[href=#]:not([href=#])
zu diesem:
a[href=’#’]:not([href=’#’])
SquirFly-Code funktioniert super! Danke!
SquirFly, vielen Dank! Es hat beim ersten Versuch funktioniert!! =D
Es funktioniert auf meiner Website nicht mit IE8, ich glaube, da gibt es eine Art Bug…
Könntest du es hier mit IE8 überprüfen? Danke
Funktioniert das auch mit Links & Rechts?
Einfach „top“ zu „left“ ändern?
Sweet! Vielen Dank
Ich habe die zweite Methode auf meiner Website zum Laufen gebracht, aber ich habe auch versucht, den Navigationscontainer der Seite folgen zu lassen, indem ich ihn so in den Code aufgenommen habe
$(‘html,body,#nav’)
Also habe ich hier einfach #nav zu den Selektoren hinzugefügt. Aber es funktioniert nicht. Die Seite scrollt immer noch, aber der Navigationscontainer folgt nicht. Irgendwelche Ideen?
Ist die #nav absolut [relativ zum Body] oder fest positioniert? Das könnte der Grund sein.
Funktioniert perfekt
Hallo Chris, das ist fantastisch! Sehr einfach und sauber und funktioniert wirklich gut.
Ich fragte mich, ob es möglich ist, den Hash-Link in der aktuellen URL des Browserfensters (d.h. http://www.example.com#target3) beizubehalten, während der Smooth-Scrolling-Effekt erhalten bleibt, sodass jeder Hash-Link bookmarkbar ist.
Danke!
Technik #1 lässt dich die Hash-Links behalten, während Technik #2 dies nicht tut.
Beide Beispiele funktionieren hervorragend.
Interessanterweise scheine ich bei beiden Techniken den an die URL angehängten Hashlink zu verlieren.
Ich habe diesen Scroll-Down auf der Seite beim Laden leicht geändert? Meine Idee hier ist es, in PHP den Referer zu überprüfen und die Seite nur dann nach unten zu scrollen, wenn sie auf einen Link von der Domain geklickt haben. Im Moment habe ich
Webseite
Danke dafür, Chris! Ich habe versucht, dies mit Jquery.LocalScroll zu tun, das ist so viel einfacher!! Hat mir eine riesige Kopfschmerzen erspart, danke.
Ich habe ein Div mit width: 100% height: 100% und ein weiteres Div left: 100% width: 100%, so dass der Body 200% beträgt. Wie kann ich den Scroll horizontal bewegen?
Ich habe einige Teile geändert, die du nicht erklärt hast... wie du erwartest, dass es ein entsprechendes Element mit einer ID gibt, die der a.href entspricht... also habe ich dies geändert
var target = $(this).attr("href");
Zu
var target = $(this).attr("href").replace('#',"");
und dies
scrollTop: $(target).offset().top
Zu
scrollTop: $(‘a[name=’+target+’]’).offset().top
PS: Mach weiter so.
Ja, das ist ein guter Punkt – ich konnte es selbst nicht zum Laufen bringen und habe es auf den ersten Blick nicht verstanden, aber das ist wichtig
Es müssen auch die Elemente mit den entsprechenden IDs der Hashes existieren.
Z.B.
Diejenigen, die die Methode verwenden
<a href=”#test”>gehe zu hash</a>
und in deinem Code
<a name=”test”>versuche hierher zu gelangen</a>
Das funktioniert nicht mit dem obigen Code,
Ich selbst habe die Zeile geändert
var $target = $(this.hash), target = this.hash;
zu
var target = this.hash;
var $target = $j(this.hash).length>0?$j(this.hash):($j(‘a[name=’+target.replace(/#/,”)+’]’));
Auf diese Weise funktioniert es sowohl mit der ID als auch mit den A name=… Versionen
Hallo,
Ich versuche, das zum Laufen zu bringen, aber ich schaffe es einfach nicht. Soweit ich weiß, habe ich die Referenz überprüft und genau kopiert… Jede Hilfe wird geschätzt.
http://www.certohost.com/tutorials.php
Danke.
Hallo,
Ich habe Technik #2 verwendet und es scheint nur zu funktionieren, wenn ich auf „About“ klicke, die Links „Work“ und „Contact“ scheinen nicht zu funktionieren und ich weiß nicht warum.
danke
Fantastisch, funktioniert hervorragend. Kaum etwas zu tun. Danke, Chris
Superb, hat wie am Schnürchen funktioniert.
Danke!
Hallo..
Ich frage mich nur, ob du das in Opera überprüft hast… Ich erhalte einige lustige Ergebnisse, wenn ich einige Tests durchführe… trotzdem sehr schön.
Hallo Chris und Co.
Wenn ich diese Methode #2 verwende, zeigt meine Firefox Developer Toolbar einen JS-Fehler wie folgt an
Bezeichner oder Zeichenkettenwert im Attributselektor erwartet, aber „#“ gefunden.
Was übersehe ich..?
Zur Hilfe, ich verwende jquery-1.4.2.min.js und verlinke zu h2s mit IDs, so
Gehe zu 01
Dies ist Link 01
Vielen Dank im Voraus.
Entschuldigung, ich habe vergessen, meinen Code zu verpacken
<a href="#link-01">Gehe zu 01</a><h2 id="link-01">Dies ist Link Nummer 01</h2>Danke
Jon
funktioniert einwandfrei! vielen Dank!
Danke Chris.
Dies funktionierte perfekt in Firefox und Safari, aber nicht in Opera. Ich muss IE noch testen. Irgendwelche Fix-Ideen für Opera. Es springt derzeit zu dem #tag, kein Scrollen.
Irgendwelche bekannten Probleme und/oder Lösungen für IE?
Zur Info, ich habe Technik #2 verwendet.
Das funktioniert perfekt in Firefox, zeigt aber einige Fehler in Safari, wenn Methode zwei verwendet wird. Irgendeine Lösung oder Anleitung? Danke
Danke für den Beitrag, ich versuche seit Ewigkeiten, so etwas zum Laufen zu bringen. Irgendwelche Ideen, wie man die Scrollgeschwindigkeit ändern kann?
Hast du herausgefunden, wie man die Scrollgeschwindigkeit ändern kann? Das würde ich auch gerne tun.
auf der Linie
erhöhen/verringern Sie die Zahl von 400 auf beliebig viele, um die gewünschte Geschwindigkeit zu erreichen. Zum Beispiel habe ich diese Zahl auf 1600 erhöht, um den gewünschten Effekt zu erzielen.
Danke für diesen großartigen Code, Chris!
Es steht direkt im Skript. Suche nach der Zahl „1000“. Ersetze sie durch 1500, und sie wird entsprechend langsamer. Wenn du sie zu 500 machst, wird sie um die Hälfte schneller.
Ich habe auch die Scrollgeschwindigkeit auf „1500“ geändert. Funktioniert immer noch nicht für mich.
Ich habe früher den lokalen Scroll für diese Funktion verwendet. Dein funktioniert genauso gut. Danke.
Demo hier
http://jsfiddle.net/KRmJG/
Habe das sofort zum Laufen gebracht, nach Ärger mit dem jQuery LocalScroll
Danke für diesen Link, ich hatte ein seltsames Problem, bei dem die Seite beim Klicken anfing zu scrollen und dann auf halbem Weg zum Anker sprang. Deine Änderungen haben es behoben.
Das scheint sauber und einfach zu sein!
Ich sehe, dass andere Leute auch schon gefragt haben.
Ich versuche auch, eine Lösung für eine horizontale Website zu finden, an der ich arbeite.
Könnte dies in diesem Fall angepasst werden?
Jeder Hinweis wäre äußerst hilfreich…
Ok… glücklicherweise hat das nicht zu viel Mühe gekostet, um es herauszufinden.
Mit der zweiten Methode habe ich diesen Code verwendet und es funktionierte
Danke dafür!
Ich habe in den letzten Tagen eine Menge verschiedener Codes für sanftes Scrollen getestet und diese scheinen die unkompliziertesten und am einfachsten zu implementierenden zu sein. Ich bin Designer, kein Programmierer, also je einfacher, desto besser. Fantastisches Zeug.
Nur ein Problem. Mir ist aufgefallen, dass Fumie nach dem Erscheinen des Hash-Links in der URL gefragt hat und Michal Kopanski darauf hingewiesen hat, dass Technik #1 die Hash-Links behält, während Technik #2 dies nicht tut.
Das Problem, das ich mit #1 habe, ist, dass ich die Hash-Links nicht von einer anderen Seite aus verlinken kann (z.B. von der Startseite gibt es einen Link wie „about#sometag“). Gibt es eine Möglichkeit, die Hash-Links mit Technik #2 erscheinen zu lassen?
Ich habe externe Anker-Links auf meiner Seite, die beim Verwenden des Skripts nicht mehr funktionieren :-(
Chris Coyer zum Präsidenten!
Wenn du verhindern möchtest, dass sich die Animationen „aufreihen“, ersetze diese Zeile
$('html,body').animate({durch diese
$('html,body').stop().animate({Juhu!!!
Vielen Dank, meine Website sieht jetzt 10x besser aus und dein Code war so einfach zu bedienen!
xo
Das ist großartig, aber ich möchte nicht, dass der obere Rand der Browser-Fensteroberseite entspricht….
Ich habe einen festen Header oben, und ich möchte, dass der Punkt, zu dem gescrollt wird, der untere Rand des Headers ist.
Egal was ich tue, der Anker wird immer ganz nach oben im Browser gescrollt :(
Gibt es eine Möglichkeit, dies zu erreichen?
Ich habe genau dasselbe Problem… hat jemand eine Lösung?! Ich verwende Anker mit einem festen Header, und wenn ich auf die Links zu den Ankern klicke, scrollen sie hinter dem festen Header nach oben. Ich habe ein paar verschiedene Dinge ausprobiert, aber leider keinen Erfolg…
Ich wäre so dankbar für jede Hilfe!!
Jez (und Russell),
Das mag eine etwas späte Antwort sein. Ich verwende auch einen festen Header. Alles, was du tun musst, ist die Position anzupassen, zu der du scrollst. Sowohl Chris' als auch Devins Lösungen verwenden target.offset().top als vertikale Zielposition. Du kannst die Höhe deines festen Headers davon subtrahieren, bevor du den Scroll ausführst.
var target_pos = (target.length > 0) ? target.offset().top : 0;
var fhdr = $(‘dein-fester-header-selector’);
var fhdr_height = (fhdr.length > 0) ? fhdr.outerHeight() : 0;
target_pos -= fhdr_height;
if (target_pos > 0) {
$(‘html,body’).animate({
scrollTop: target_pos
}, 1000);
return false;
}
Hallo zusammen,
ich wollte nur darauf hinweisen, dass Skript 1 Probleme verursachen kann, wenn du auf #Anker auf anderen Seiten verlinkst als der, auf der du dich befindest.
Wenn der Link auf derselben Seite wäre, würde jQuery einwandfrei funktionieren.
Wenn jemand eine Lösung kennt, um #Links zu anderen Seiten zu ermöglichen, wäre das großartig!
Danke
Vielen Dank für das Skript. Ich habe nur eine Frage: Warum sollte man den Ankertext nicht in der URL verwenden? Hat das irgendwelche Vorteile? In meinen Augen macht es die Benutzererfahrung nur schlechter. Es fühlt sich an, als würde man in Flash arbeiten. :)
Bin neugierig auf dasselbe…
Wir verwenden ein Content-Management-System, das manchmal Anker innerhalb von Links zu anderen Seiten erfordert. Ich würde diese Option gerne ausschalten können, aber ich fürchte, wir stecken damit fest!
Leider funktionieren die beiden obigen Skripte nicht für Links wie diesen
http://www.mysite.com/otherpage.html#someanchor
Die erste Methode erschien mit der getrennten Funktion etwas aufwändig, daher habe ich sie als Callback-Funktion in den Bind-Befehl integriert. Scheint perfekt zu funktionieren, obwohl ich es nur in Chrome und IE7 getestet habe.
Hallo!
Ich hatte ein Problem mit dem obigen Code, bei dem das sanfte Aufwärtsscrollen nicht funktionierte. Ich habe deinen Code ausprobiert und er funktioniert in Chrome, IE9, FF und Opera! Vielen Dank für das Teilen.
@Chris McClean – Vielen Dank für dieses Skript! Ich habe versucht, ein „verknüpftes Anker“-Skript zu finden, das die Seite scrollt, aber auch nicht mit hrefs kollidiert, die das Hash-Symbol (#) allein enthalten (da diese Arten von hrefs typischerweise mit anderen JS-Funktionen verwendet werden). Du bist brillant! :)
@ Chris McClean – Ich habe ein Problem mit deinem JS… Wenn die URL einer Seite einen nachgestellten Schrägstrich hat (z.B. example.com/page/), scrollt die Seite nicht. Funktioniert einwandfrei, wenn die URL der Seite mit „.php“ oder „.html“ usw. endet. Irgendwelche Ideen, wie man dein Skript dazu bringt, mit dem nachgestellten Schrägstrich in einer URL zu funktionieren?
$(document).ready(function() { $('a[href*=#]').bind('click', function(e) { e.preventDefault(); //prevent the "normal" behaviour which would be a "hard" jump var target = $(this).attr("href"); //Get the target // perform animated scrolling by getting top-position of target-element and set it as scroll target $('html, body').stop().animate({ scrollTop: $(target).offset().top }, 2000, function() { location.hash = target; //attach the hash (#jumptarget) to the pageurl }); return false; }); });Oh mein Gott! Vielen, vielen Dank, dass du Kommentare in dein Skript aufgenommen hast. Ich bin so neu in JS, dass ich oft nicht herausfinden kann, was was tut. Dein Skript war das erste, das so klar aufgebaut war, dass ich verstehen konnte, was darin geschah. Ich bin dir ewig dankbar… und ich möchte beste Freunde sein! Vielen Dank, Chris Mclean!
Vielen Dank, es war sehr nützlich, einfach zu bedienen und funktioniert einwandfrei… auch dank aller Kommentare konnte ich es verbessern, um es an meine Website anzupassen…
Hallo und vielen Dank für den schönen Code,
Ich habe Technik #1 ausprobiert und es ist gut gelungen, den Standort nach Abschluss der Animation zu aktualisieren, aber die Vor- und Zurück-Buttons des Browsers verhalten sich etwas seltsam, es sieht so aus, als ob die Historie um ein „Ereignis“ „verschoben“ ist (alles in FF 3.6.10, Chrome 7.0.517.44 und IE7 PC): Zuerst drückt man den Zurück-Button und nichts passiert auf dem Bildschirm, aber der Hash geht gut im URL-Feld zurück, beim zweiten Mal geht der Hash wieder zurück und der Bildschirm beginnt nun seinen vorherigen Zustand anzuzeigen, aber dann stimmen sie nicht überein.
hmm, ich bin mir nicht sicher, ob ich mich klar ausdrücke, versteht jemand meinen Punkt?
Hat jemand das Problem behoben?
Danke!
Ich habe Technik #1 und Technik #2 abgeschafft und nur eine einzige, beste Methode vorgestellt. So wie es ist, funktioniert der „Zurück-Button“ im Browser nicht. Das liegt etwas außerhalb des Rahmens dieses ohnehin schon recht umfangreichen „Snippets“.
Wenn du daran interessiert bist, dass der Zurück-Button funktioniert, würde ich mit http://www.asual.com/jquery/address/ herumspielen und im Grunde die von ihnen bereitgestellte Adressänderungsfunktion verwenden, um beim Ändern einen Klick auf den entsprechenden Link auszulösen, damit das Zurück-Button-Scrolling funktioniert.
Ich besuche deine Seite schon ewig und habe erst jetzt den Snippets-Bereich gefunden (ich Dummkopf)… sie sind brilliant!
Eine Frage dazu… ist es möglich, hier Easing hinzuzufügen?
Danke, Kumpel, Sam
Hallo,
Ich würde auch gerne wissen, wie man Easing hinzufügt?
Danke Chris
Hey, danke, dieser Code hat uns sehr geholfen
Chris, vielen Dank! Ich habe mit verschiedenen jQuery-Plugins herumprobiert und konnte beides (Scrollen und Aktivieren des Zurück-Buttons/Bookmarkings) nicht gleichzeitig zum Laufen bringen. Das funktioniert einfach!
Alle vorherigen Beispiele erfordern, dass Anker sowohl eine ID als auch einen Namen haben.
Dies tut es nicht und überspringt die Animation, wenn es keinen Ankerlink finden kann.
Fantastisches Skript, Chris. Es verursacht jedoch einige Konflikte, wenn andere Effekte auf derselben Seite verwendet werden (z.B. Lightbox). Mach weiter so!
Ich hatte auch Lightbox auf meinen Seiten, und die beiden Skripte kollidierten. Aber Rubiras jQuery-Skript funktioniert hervorragend zusammen mit dem Lightbox-Skript.
scrollTop: (($(target).offset().top) – 41)
wobei 41 die Höhe der oberen Leiste ist.
Danke
` jQuery(document).ready(function () {
wobei mein Punkt die ID des Elements ist, das ich fokussieren möchte. Vielen Dank. Dein Code ist perfekt.
Vielen Dank! Sein Code funktioniert perfekt für Joomla 3.x. Es ist nicht nötig, mehr hinzuzufügen, da die jQuery-Bibliothek standardmäßig bereits geladen wird.
Funktioniert wunderbar in Wordpress. Ich hatte Probleme damit, dass das Scrollen meine verschachtelten Kommentare durcheinanderbrachte (keine Ahnung, was der Konflikt war). Dies hat es gelöst. Ich bin sehr dankbar. Danke.
Du hast meinen Tag gerettet. Danke fürs Teilen.
Ich habe mit dem Skript experimentiert und es funktioniert größtenteils gut. Wenn ich einen „Zurück nach oben“-Link erstelle, der sich auf eine ID im Body-Tag bezieht, stoppt er nur wenige Pixel vor dem oberen Rand – er scrollt (sanft!) bis vielleicht 10 Pixel vor dem oberen Rand. Warum ist das so? Danke.
Noch etwas. Vielleicht habe ich in den obigen Kommentaren eine Lösung übersehen, aber das obige Skript scheint in Internet Explorer nicht zu funktionieren. Gibt es eine Möglichkeit, es in IE sanft scrollen zu lassen? Danke.
Chris,
vielen Dank für deine fantastischen Tutorials und Skripte.
Dieses hier hat bei mir gut funktioniert und die Seite wunderschön verhalten lassen.
Ich habe nur entdeckt, dass es nicht in meiner Auswahlliste funktioniert
Hast du eine Idee für mich?
Vielen Dank im Voraus!!
Mach weiter so mit deiner großartigen Arbeit,
Sascha aus Deutschland
Großartiger Blogbeitrag. Code „funktioniert einfach“!
Danke für den Beitrag..
– Sri
Hallo zusammen,
Ich frage mich, ob jemand Ideen zu dem Fehler hat, den ich in der Konsole erhalte
$target.offset() ist null
var targetOffset = $target.offset().top;
Ich kann die Seite reibungslos zu den richtigen Abschnitten scrollen lassen, aber sobald ich auf den "Zurück nach oben"-Link klicke, springt sie an den Anfang der Seite.
Wenn jemand Vorschläge hat, die man ausprobieren könnte, lasst es mich bitte wissen, da es mich jetzt ein bisschen verrückt macht :S
Danke für jede Hilfe.
Ich kämpfe auch ein bisschen damit…
Ich bekomme den „zurück nach oben“-Aspekt in FF nicht zum Laufen… Und Fire Bug spuckt den folgenden Fehler aus
$target.offset() ist null
Zeile 29
Die anderen Aspekte der Funktionalität funktionieren großartig… obwohl, wie Scott oben in diesem Beitrag, es einmal animiert, dann danach zu jedem Link springt…..
Jede Hilfe oder Vorschläge wären sehr willkommen…
URL zur Referenz: http://varsitypixels.com
Vielen Dank im Voraus!
Ich bekam diesen Fehler auch. Es geschah, weil ich die Anker-ID nicht gesetzt hatte. D.h.
Hey Leute, ich liebe diesen tollen Code, aber ich habe Schwierigkeiten, ihn in meine Website zu implementieren.
Ich bin eine Art Copy/Paste-Anfänger in dieser Sache, ich habe es zuerst zum Laufen gebracht, aber nach dem Hinzufügen einiger anderer Snippets scheint es nicht mehr zu funktionieren.
Insbesondere habe ich Probleme mit den „Zurück nach oben“-Links.
Der erste funktioniert, aber die weiter unten auf der Seite befindlichen Links nicht.
http://www.ed-yu.com/website
Vielen Dank für jede Einsicht!
Zum Hinzufügen von Easing – Link zum jQuery Easing 1.3 Pack
Dann den Abschnitt unten ersetzen
// Zum Ziel animieren
$(scrollElem).animate({scrollTop: targetOffset}, 800, ‘easeInOutExpo’, function() {
Ich habe das ausprobiert und es stoppt die Animation komplett. Hier ist ein jsfiddle des Problems. http://jsfiddle.net/VEpgV/
Übrigens ein großartiges Skript – vielen Dank fürs Teilen!
Ich liebe den Code! Ich habe ein paar Änderungen vorgenommen, die vielleicht jemandem nützlich sein könnten –
Die Verwendung des Codes in der Demo führte zu einem Syntaxfehler in FF 4, wenn ein nicht existierendes Ziel auftrat – der Variablen
targetinif (target) {fehlt ihr $ vorne.Auch ersetzen
var $target = $(this.hash), target = this.hash;mit
var $target = jQuery("a[name=" + this.hash.substr(1) + "]");macht es kompatibel mit bestehenden HTML-Hashtags.
Das funktioniert super! Ich liebe es!
Nur eine kurze Frage: Wie kann ich es auf eine bestimmte Höhe, z.B. 50px vom oberen Rand, scrollen lassen?
Danke!
Danke! Hat genau das getan, was ich wollte, und war nicht aufgebläht mit nutzlosen Funktionen.
Gibt es Pläne, dies auf Github zu veröffentlichen? :D (bitte bitte bitte!)
Großartiges Skript! Aber es funktioniert nicht auf iPad/iPhone. Kennt jemand eine Lösung dafür?
Danke!
Ich liebe dieses Skript, aber ich habe auch das oben genannte Problem. Funktioniert nicht auf iPad/iPhone. Gibt es dafür bitte eine Lösung?
Es funktionierte bei mir auch nicht auf iOS Safari (iPhone, iPod, iPad), aber dieser kürzere Code funktionierte überall… und tut dasselbe (ohne den Hash in der URL anzuzeigen, aber das werde ich beheben).
Ich überlasse es den jQuery-Experten, den Grund herauszufinden…
$(function(){
$(‘a[href*=#]’).click(function() {
if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”)
&& location.hostname == this.hostname) {
var $target = $(this.hash);
$target = $target.length && $target || $(‘[name=’ + this.hash.slice(1) +’]’);
if ($target.length) {
var targetOffset = $target.offset().top;
$(‘html,body’).animate({scrollTop: targetOffset}, {duration:1600,easing:’easeInOutExpo’});
return false;
}
}
});
});
Ich wollte unbedingt, dass Chris' Skript für mich funktioniert, aber nach einer Stunde mühsamen Kampfes konnte ich es einfach nicht. (Ich kann nicht sagen, warum es nicht funktioniert – wenn ich das wüsste, könnte ich es reparieren.) Diese kleine Alternative funktioniert jedoch einwandfrei und ist angenehm. Und sie benötigt keine zusätzliche ID für das Ziel anstelle nur des Namens (ich nehme an, Chris' Skript benötigt, dass das Zielelement eine ID hat, die dem Ziel-href entspricht, aber ohne den Hash).
Danke.
Funktioniert, danke!
Ich würde auch gerne wissen, wie man das Scrollen etwa 100px vom oberen Rand stoppt.
Danke, und tolles Skript.
Ja, ich habe dasselbe Problem, hast du das jemals herausgefunden?
Kann ich diesen gleichen Effekt nur mit HTML und CSS (3) erzielen?
Habe hier die gleiche Frage…
Vielen Dank für das Posten! Genau das, wonach ich gesucht habe. Früher habe ich jQuery vermieden, weil es nicht genügend dokumentierte Beispiele gab, damit ich mich wohlfühlen konnte, es zu implementieren (nicht wirklich eine JavaScript-Person), aber das ist wirklich gut. Es hat einen schönen sanften Effekt (wie der Titel schon sagt). Nochmals vielen Dank!
Hallo! Es funktioniert bereits, aber sobald ich das Skript auf meine Seite lege, funktioniert die Lightbox nicht mehr. BITTE HELFT! Danke! =)
Schön und einfach, brilliant wie immer. Danke!
Rechtschaffen. Irgendeine Ahnung, warum es auf dem mächtigen iPad nicht funktioniert?
Hast du eine Frage? Ich bin neu bei jQuery und habe ein Problem damit, dass Lightbox mit diesem Code nicht funktioniert. Kollidieren die Anker-Tags, da sowohl dieser Code als auch Lightbox auf Anker-Tags angewiesen sind, um zu funktionieren? Wenn ja, gibt es eine Möglichkeit, dies zu umgehen?
Wenn du einen Fehler $target.offset() ist null bekommst, bedeutet das einfach, dass du einen Link hast, der auf #example zeigt, aber das div id="example" existiert nicht im DOM.
Zeile 16 ändern von
if (target) {zu
if ($(target).length < 0) {Tatsächlich ist es > und nicht <
Ich schätze, ich habe meine Größer-als- und Kleiner-als-Zeichen verwechselt ;)
Danke, super!
Fantastisch!!! Das spart mir eine Menge Zeit!!
:-)
Hallo zusammen. Ist es möglich, die Dauer des Scrollens einzustellen? Momentan scheint es sehr schnell zu sein…
Weiß jemand, wie ich einen Offset einstellen kann? Ich möchte, dass es beispielsweise 50px über jedem Ziel aufhört zu scrollen.
Ich auch! Ich habe einen festen Header über der scrollenden Seite und möchte, dass das Scrollen dort stoppt, wo der Abschnitt noch unter dem festen Header liegt, nicht dahinter! :(
Die Art, wie ich es gemacht habe
Füge
margin-top: -50pxzu deinen Anker-Elementen hinzu.Einfache Lösung und funktioniert perfekt.
Anstatt das HTML-Element zu ändern, habe ich
scrollTop: target.offset().top -50
verwendet und es funktionierte problemlos. Der Scroll stoppte fast 50px über dem vorherigen Element!
tolle Sache!
bin darauf gestoßen und habe sofort angefangen, eine Seite darum herum zu bauen :)
geht aber seitlich. alles funktioniert tipitopi.
ich frage mich, ob es möglich ist, in verschiedenen Winkeln zu scrollen?
Wenn ich beispielsweise zur 4. Seite nach links gehe und eine halbe Seite pro
Beispiel nach unten scrolle und dann zur Seite rechts davon gehen möchte (die eigentlich eine halbe Seite
höher beginnt als ich jetzt bin), geht es direkt
nach rechts. ich würde es lieben, wenn es 45 Grad nach oben/rechts (Nordosten) gehen würde.
ergibt das Sinn? ich arbeite daran, aber es ist unordentlich.
würde gerne wissen, ob es machbar ist? vielen Dank.
alles Gute, c
ps: nicht unbedingt 45°, 38° ist noch besser
Hallo,
Ich würde dieses tolle Skript gerne verwenden, aber irgendwie funktioniert es auf meiner Seite nicht. Irgendeine Idee, warum?
http://www.sderidder.nl
Grüße!
Ich habe es jetzt zum Laufen gebracht, aber wenn ich das W3C-Validierungstool ausführe, gibt es einige Fehler aus.. http://validator.w3.org/check?uri=www.sderidder.nl&charset=%28detect+automatically%29&doctype=Inline&group=0
irgendeine Idee? danke
oh, und es funktioniert bei mir nicht in Safari..
Danke!, funktioniert bei mir nicht, da ich jQuery 1.6 habe und dies für 1.4 ist.
Aber es sind gute Informationen. Ich werde es mit einer anderen Lösung versuchen. Danke.
Vielen Dank für das Skript!
Das Skript scheiterte zuerst, weil ich <a name=”foo”> anstelle von Elementen mit IDs verwendete, und zweitens, wenn das Zielelement nicht gefunden wurde.
Dies geändert
Zu diesem
Und es funktioniert sofort mit bestehendem Markup.
Ich hatte Probleme, dies auf meiner Website zum Laufen zu bringen und konnte nicht herausfinden, warum. Aber ich habe deine Änderung implementiert und es funktioniert jetzt. Danke!
Hej.
Wenn ihr jQuery-Tabs oder ein anderes jQuery- oder irgendein anderes Skript verwendet, das ebenfalls den #Tag verwendet, um etwas zu tun, habe ich eine schnelle Lösung dafür, bearbeitet diese Zeile
$('a[href*=#]').each(function() {zu
$('a[href*=#wrap]').each(function() {Du änderst das Standard a[href*=#], indem du den # änderst, auf den es abzielt.
In meinem Fall führe ich mein Sliding mit dem Hash-Tag #wrap aus…
Also habe ich den Code so geändert, dass das Scrolling nur mein Wrap anspricht, also a[href*=#wrap]
Ich hoffe, ihr versteht das, ehrlich gesagt verstehe ich es im Moment nicht. Aber es funktioniert. Jetzt funktionieren meine jQuery-Tabs perfekt zusammen mit dem sanften Scrollen.
Prost
Ich habe das ausprobiert, dann funktioniert mein scrollTo nicht, wenn es eine Möglichkeit gibt, eine bestimmte Klasse oder ID auszuschließen, das würde am besten funktionieren. Du schließt aus den Geräuschen einen Satz von Ankern ein.
Hallo Jalokim,
Ich stehe vor genau demselben Problem, meine jQuery-Tabs funktionieren nicht, aber ich habe die von dir bereitgestellte Lösung nicht verstanden. Könntest du die Lösung für dieses Problem bitte genauer erläutern. Ich verwende den folgenden Code. Danke
Süßes Skript, ich verwende es bei einer Überarbeitung meiner Portfolio-Website, die ich hoffentlich nächste Woche online stellen werde. Die Website verwendet auch Twitters Bootstrap, und ich bin auf ein Problem gestoßen. Wenn ich die Bootstrap-Tabs verwenden möchte, scrollt dieser Code die Seite nach oben.
Bootstraps Tabs verwenden Anker und Anker-Links. Ich fragte mich also, ob es eine Möglichkeit gäbe, deinen Code so einzustellen, dass er nur Anker-Links innerhalb einer festgelegten ID bemerkt. Ich bin kein Coder, also entschuldige meine Ignoranz. – Jeff
Doh, Jalokims Beispiel funktioniert auch für mich, weiß nicht, wie ich seinen Kommentar übersehen habe.
Also habe ich alle meine Anker, bei denen ich das sanfte Scrollen haben möchte, mit #nav beginnen lassen und dies dort eingerichtet, wo Jalokim #wrap im JS-Code verwendet hat. Dann kann ich #navhome #navgallery und so weiter für die sanften Scroll-Anker verwenden und alle Anker, die nicht mit #nav beginnen, werden nicht sanft scrollen!
Könntest du die Lösung posten, ich habe das Problem mit den Bootstrap-Tabs?
Hey, tolles Tutorial. Ich fragte mich, wie man das Scrollen des Divs vom oberen Rand des Browserfensters um z.B. 150px nach unten versetzen könnte – ich habe einen fest positionierten Header, der diesen Platz einnimmt, und möchte, dass das Div, das nach oben scrollt, direkt darunter kommt.
Jede Hilfe wäre großartig!
Ich würde auch gerne eine Antwort darauf wissen (ich habe einen festen Header)
. Ich habe versucht, das $target.offset wie folgt zu bearbeiten
aber das scheint leider nicht viel Wirkung zu haben.
Füge -40 (oder welche Höhe dein Header auch immer hat) ein, aber nach ScrollTop:targetOffset, nicht nach $target.offset().top – der Code sollte also lauten
$(scrollElem).animate({scrollTop: targetOffset-40}, 400, function()…
Ich hatte auch dasselbe Problem und versuchte herauszufinden, warum das „Ruckeln“ bei einem festen Header auftritt. Das ist der Grund: Der animierte Prozess läuft in dieser Reihenfolge ab
Zuerst animiert er die Bildschirmposition zur Ankerposition durch numerische Berechnung. Dann fügt er den Hashtag in die Position ein. Der Code bewegt den Bildschirm also tatsächlich zweimal! Du siehst es nur beim zweiten Mal nicht, weil er bereits in Position gebracht wurde!
Wenn du jedoch einen festen Header hast und versuchst, ihn im Offset zu berücksichtigen, wirst du beim zweiten Zug das Ruckeln rückwärts sehen, da die Hashtag-Position aufgerufen wird.
Ich habe zwei Möglichkeiten, wie ich derzeit mit dem Problem des festen Headers umgehe
1. Wenn ich den Hashtag beibehalten muss, dann hat Stefan in den Kommentaren hier eine gute CSS-Offset-Lösung.
2. Wenn ich den Hashtag nicht beibehalten muss, entferne ich einfach den Aufruf für den Hashtag-Anker, so wie hier
$(scrollElem).animate({scrollTop: targetOffset-60}, 1000);Hey Chris, fantastische Arbeit. Ich habe mit dem Beispiel herumgespielt und konnte es verkleinern sowie einige der in den Kommentaren angesprochenen „Probleme“ beheben. Dieser Code unten (basierend auf Ihrer Arbeit) ermöglicht sowohl Same-Site-Links mit Hashes (d.h. Verweise auf einen anderen Artikel auf einer anderen Seite) als auch externe Links. Zur Fehlerbehebung wäre das $(‘body’) (vs) $(‘html’) die erste Änderung, wenn dies nicht funktioniert, alles andere sollte gut sein. Es ist auch wirklich einfach, die Hashes wieder zur Browser-Adressleiste hinzuzufügen, es scheint jedoch aus UX-Sicht besser zu sein, sie wegzulassen. – das ist aber nur meine Ansicht. (jQuery 1.7)
Das hat mein Problem mit dem Offset gelöst, und es ist kleiner. Danke Eric! Ich drücke die Daumen, dass es keine Probleme gibt : )
Leider scheint die Verwendung von „body“ für
die Dinge für Chrome zu zerstören : ( hat jemand Tipps?
Ich arbeite mit dem Anything Slider v1.5.17. Aus irgendeinem Grund funktioniert er im Internet Explorer 7 nicht. Er funktioniert einwandfrei in 8 und 9, aber in 7 wird nur das erste Bild angezeigt und die Steuerelemente verschwinden. Übersehe ich etwas?
IE7 ist alt, entwickle nicht dafür
Vielen Dank! Es funktioniert perfekt! Aber außer auf Mobilgeräten.. Gibt es eine Möglichkeit, dieses Skript auch auf Mobilgeräten zum Laufen zu bringen?
Danke!
Hey Chris!
Fantastischer Artikel, aber eine Frage,
Wie kann ich dies in einer anderen Datei referenzieren, wahrscheinlich eine einfache Sache, aber ich bin irgendwie ein Neuling :)
– Allen Lawson
Siehe Demo auf meiner Seite = ajwebdesigner.in
Das funktioniert perfekt, einfach den Code mit jQuery einfügen und los geht's :D
Danke Chris. !
Ich verwende den Basis-URL-Meta-Tag auf all meinen Seiten und /#top/ würde mich einfach auf die Homepage.html#top umleiten ... gibt es eine Lösung, um dies zu vermeiden?
Hey,... ich bin ziemlich neu im Programmieren. Ich bekomme das in Safari super zum Laufen, aber nicht in Firefox. Irgendwelche Tipps?
Danke
Suche einen ScrollTo-Designer für eine Webseite des Branchenverzeichnisses
(siehe) http://www.vtlsuccess.com/Directory.html
Ich möchte (1) einen Akkordeon-Effekt, um ein Branchenverzeichnis von Produkt-Service-Kategorien anzuzeigen (4 Spalten mit jeweils etwa 25 Kategorien in der weißen Mittelsäule unter der Navigationszeile auf der obigen Seite. Die angezeigte Spaltenliste ist 1100px L x 227px B).
Jeder Produkt-Service-Kategoriename wird schließlich einen aktiven Link haben, der Details des exklusiven Geschäftslieferanten für diese Kategorie anzeigen kann.
Besucher der Seite werden nach einem Anbieter/Lieferanten eines bestimmten Produkts oder einer Dienstleistung suchen. Sie suchen zuerst im alphabetischen Verzeichnis und klicken auf die Kategorie, nach der sie suchen. (2) Die Detailinformationen über den Anbieter sollten entweder als Popup-Fenster vor der Seite oder in einer Zelle in der rechten blauen Spalte auf der Seite angezeigt werden. Ich mag Ariel Fleslers "jquery.scrollto"-Effekt für diese letztere Aktion (siehe demos.flesler.com/jquery/scrollTo/ und/oder http://flesler.blogspot.com/2007/10/jqueryscrollto.html. Die angezeigten Informationen sollten druckbar sein.
Sobald der Code und die Installationsanweisungen für die oben genannten Funktionen bereitgestellt wurden, muss ich wissen, wie ich die Links einrichte, d.h. aktiviere und Informationen über die Lieferanten eingebe und/oder ändere, da es ständige Ergänzungen und Änderungen geben wird.
Ich habe Dreamweaver CS3 und Photoshop CS5.
John Hogue
[email protected]
Fragen
Kann das Akkordeon-Widget sowohl seitlich als auch nach oben und unten funktionieren?
Können Akkordeon-Panels Links, Listen, Tabellen enthalten?
Kann das Scrollto-Ereignis in einer separaten Spalte vom Trigger stattfinden?
Das funktioniert bei mir super, mit Ausnahme des Links "Zurück nach oben". Er springt einfach ohne sanftes Scrollen hoch. Ideen wären sehr dankbar.
http://kspersonaltraining.ca/index.v2.html
Beste Grüße
Das ist der korrekte Easing-Code
// Zum Ziel animieren
$(scrollElem).animate({scrollTop: targetOffset}, 1100, 'easeOutElastic', function() {
Ich habe 'easeOutElastic' für einen hüpfenden Effekt hinzugefügt!
Vergessen Sie nicht, das jQuery Easing Pack hinzuzufügen.
Das hat bei mir funktioniert. Habe es aber mit 'easeInOutExpo' verwendet
Hallo, ich habe bemerkt, dass, als ich den Code implementierte, die Scroll-Animation an die falsche Stelle scrollte und dann (wie ein normales href=" #*") dorthin sprang, wo sie hingehen sollte, wenn das Fenster in der Größe geändert wurde. Das Problem scheint zu sein, dass der Offset im Grunde beim Laden der Seite bestimmt wird, was fließende/prozentbasierte Layouts durcheinanderbringt, da sie neu anordnen und den tatsächlichen Offset ändern. Die Lösung, die ich gefunden habe, war, den Offset einfach beim Klick zu berechnen.
Ersetzen Sie dazu dies
durch diese
Danke dafür, Derek.
Ich experimentiere mit DropBox, um eine HTML5-Website zu erstellen, und hatte das gleiche Problem.
Das Ersetzen dieses Codes hat es behoben.
Übrigens: Das funktioniert auf einem Mac mit jedem Browser, den ich darauf werfen kann. Hat auch auf meiner Explorer 6 Teststation funktioniert. Ich verwende kein PHP oder andere Skripte.
Wunderbare Arbeit Chris.
Danke Derek. Das anfängliche Skript ist großartig, aber wenn Sie ein responsives Design erstellen, verschieben sich die Anker beim Ändern der Größe leicht. Dieses Skript hat das Problem behoben.
Vielen Dank dafür, Derek.
Vielen Dank für das Beispiel. Ich habe festgestellt, dass es fehlschlägt, wenn ich auf ein Ziel verweise, das nicht existiert. Im Grunde muss Ihre Logik "Stellen Sie sicher, dass das Ziel existiert" ein wenig angepasst werden.
Ich habe Folgendes ersetzt
mit
Jetzt funktioniert es jedes Mal.
Danke!
Das funktioniert bei mir gut, außer dass ich auch Tab-Inhalte habe und da dies nach jedem Anker # sucht, möchte ich eine Ausnahme schreiben. Ich weiß genug JS, um es lesen zu können, aber nicht genug, um meine eigene Ausnahme zu schreiben.
Es ist einfacher, wenn Sie nur am Inhaltsbereich Ihrer Website interessiert sind. Zum Beispiel habe ich kein Interesse daran, zu Links in der Seitenleiste zu springen, also habe ich die Quelle wie folgt geändert
var scrollElem = scrollableElement('.span9');//'html', 'body'
In meinem Beispiel bin ich nur an dem div mit der Klasse span9 interessiert.
Vielen, vielen Dank!
Ja, sehr gut gemacht – danke @Tony und @Derek für die Optimierungen!
Hallo zusammen,
Ich bin mir nicht sicher, ob diese Frage schon einmal beantwortet wurde, aber wie würde ich das Skript ändern, damit es von einem Javascript-Aufrufbefehl zu einem Anker scrollt und nicht zu a[href*=#]. Einige meiner Seiten haben keine direkten Links, sondern Javascript-Aufrufe zu einem Anker.
Dies ist ein großartiges Tutorial, aber es gab so viele Kommentare, dass es nach einer Weile schwer zu verfolgen ist. Vielen Dank im Voraus.
@Haldun hat recht – funktioniert nicht mit Mobilgeräten, zumindest iOS...
Chris McCleans Lösung scheint sowohl auf iOS als auch in Standardbrowsern zu funktionieren.
Hallo, ich versuche, diesen fantastischen Effekt auf meiner Website auf dieser Seite einzufügen
http://www.martinimarmi.it/marmo.html
Meine Idee ist, die Links im mittellinken Div zu setzen und beim Anklicken den mittelrechten Div zum Anker zu scrollen. Aber das Problem ist, dass ich nicht so gut mit Javascript bin (ja! und auch mit Englisch, Entschuldigung), also bitte ich Sie um Hilfe.
Bitte, wenn Sie Ideen haben, helfen Sie mir.
Ich benutze Chrome, habe die Java-Konsole geöffnet und das Skript kopiert.
Der Fehler war TypeError: Kann die Methode 'ready' von null nicht aufrufen
Hallo zusammen, ich versuche dies auf meiner Seite zu implementieren, bekomme es aber noch nicht zum Laufen. Es erscheint im Head-Tag, wenn ich Firebug verwende (es ist eine Drupal-Seite und daher habe ich den Verweis auf die Datei in die .info-Themen-Datei eingefügt), aber ich bekomme es nicht wirklich zum Laufen. Ich habe auch den Cache geleert. Es ist unter http://icanw.org.uk/cms/ - wenn jemand Ideen hat, würde ich mich freuen, sie zu hören - danke!
Ich habe einen festen Header und es gibt #NaN mit dem folgenden Code zurück (funktioniert aber)
$('a[href*=#]').each(function() { var thisPath = filterPath(this.pathname) || locationPath; if ( locationPath == thisPath && (location.hostname == this.hostname || !this.hostname) && this.hash.replace(/#/,'') ) { var $target = $(this.hash), target = this.hash; if (target) { var targetOffset = $target.offset().top - 220; $(this).click(function(event) { event.preventDefault(); $(scrollElem).animate({scrollTop: targetOffset}, 600, function() { location.hash = target - 220; });Irgendwelche Gedanken, wie ich den gewünschten Effekt ohne das NaN erzielen könnte?
Ich habe auch das merkwürdige #NaN-Problem. Ich hoffe, es gibt eine Lösung dafür. Was für ein Mist, der Offset-Trick funktioniert ansonsten wunderbar!!
Ich benutze Dereks und Tonys modifizierten Code, falls das bei der Fehlerbehebung hilft...
Hallo zusammen!
Ich mag dieses Skript sehr, gut gemacht! Es funktioniert einwandfrei auf meiner statischen Seite, aber jetzt versuche ich, das Skript auf einer WordPress-Installation zu verwenden. Und ich bekomme es nicht zum Laufen. Das ist eine Art "$" und jQuery-Konflikt, aber ich glaube nicht genau... Ich habe versucht, alle "$" im Skript durch "jQuery" zu ersetzen und es hat auch nicht funktioniert... Ich habe es aber auch nicht erwartet. Zeilen wie "$scrollElement = $(el);" verursachen ebenfalls Konflikte... Meine Frage ist also, wo genau muss ich das "$" ändern? Oder gibt es eine andere Lösung für mein Problem? Ich habe "no conflict" versucht, aber es hat nicht funktioniert...
Übrigens hatte ich auch das Problem mit dem festen Header. Meine Lösung war, dem Anker eine Klasse "goto" zu geben und ihn dann mit display:block; einem Padding in Höhe meines Headers und einem negativen Margin in derselben Höhe zu stylen. Wie
a.goto { display: block; margin: -69px 0 0; padding: 69px 0 0; }
Das Padding würde dann meinen Inhalt über den festen Header oben im Ansichtsfenster schieben, und der negative Margin "negativiert" die Blockanzeige, so dass alles noch an seinem Platz ist. Ich hoffe, das hilft...
Die Lösung über Padding funktioniert. Danke dafür!
Funktioniert wie ein Zauber. Vielen Dank. Hat bei mir sofort funktioniert :)
Kann dies für kommerzielle Zwecke, z.B. für eine Unternehmenswebsite, verwendet werden?
Danke
Hallo, hier ist Jasmin. Heute hatte ich ein Problem. Meine Tabelle wird nach oben verschoben, wenn ich Firebug auf meiner Webseite verwende. Derzeit arbeite ich in Eclipse. Kann mir jemand helfen, das Problem zu lösen?
Danke an Derek!
Hallo. Ausgezeichnetes Snippet!!
Nur eine Änderung: Wenn der verlinkte Link auf etwas (ein Objekt) zeigt, das im DOM nicht existiert, stürzt es ab.
Die Lösung ist, zu prüfen, ob das Objekt, auf das Sie zeigen, wirklich existiert. Um dies zu erreichen, ändern Sie einfach das 'if'
if (target) {zu
Gelöst.
Super Snippet!
Und ich habe eine Lösung für den Header "Bug" gefunden. Die Variable target ist ein String, daher kann man nicht davon subtrahieren. Anstatt den Hash in der Callback-Funktion zu ändern, machen Sie es einfach nach der Animation.
Ok, es gab ein Problem mit dem Scrollen nach der Hash-Änderung in der vorherigen Lösung für den Header "Bug". Hier meine neue Korrektur
Es funktioniert, aber kann mir jemand erklären, warum die Ziel-ID nach der Callback-Funktion wieder auf das Original zurückgesetzt wird? Ich dachte, ich müsste das manuell machen.
Das funktioniert! Fügen Sie einfach den gewünschten Wert nach „top“ hinzu und dann
$(target).attr(‘id’, ‘tmp’);
nach der Animationszeile!
DANKE!
Hallo zusammen. Ich verwende dieses Scrolling in meinem Container (zentriert auf der Seite). Ich habe ein angeheftetes (fixiertes) Menü links auf dem Bildschirm. Wenn ich das Fenster auf eine kleinere Größe ziehe und einen Menüpunkt auswähle, scrollt es nach unten und dann nach links über mein Menü. Ist es möglich, dass dies am Scrolling liegt? Wenn ja, wie kann ich es deaktivieren?
Danke.
Ich liebe diesen Effekt, habe aber ein kleines Usability-Problem damit festgestellt. Ich habe ihn auf einer Kundenwebsite implementiert und dann bemerkt, dass, wenn man mit der ZURÜCK-Taste navigieren möchte, es anfängt, alle verwendeten Anker durchzugehen, was ziemlich nervig ist.
Es wäre großartig, wenn es eine Lösung dafür gäbe, bei der die Leute die Seite nach der Verwendung immer noch mit einem Klick auf die "Zurück"-Taste verlassen könnten.
Hat jemand Ideen?
Hallo Tom,
Das Einzige, was Sie tun müssen, ist die Fallback-Funktion für die Animation zu entfernen. Also stattdessen
schreiben Sie
Wie auch immer, ich denke, dass die Registrierung von Ankern benutzerfreundlicher ist, da sie die Seitennavigation imitiert, wenn Sie verstehen, was ich meine.
Ich hoffe, das hilft.
Vielen Dank dafür! Ich denke, es hängt davon ab, wie es implementiert wird. Ich kann Fälle sehen, in denen das Zurückscrollen funktionieren würde und Fälle, in denen es nicht funktionieren würde.
So oder so ist es gut zu wissen, dass dies bei Bedarf möglich ist :)
Danke Chris, funktioniert perfekt.
Dieses Skript funktioniert für mich fast perfekt, aber ich habe zwei Variablen, die nicht aufgelöst sind. Könnte jemand ein prägnantes Skript mit diesen integrierten Optionen bereitstellen? Ich bin sicher, es würde vielen anderen Leuten helfen, von denen ich auf vielen anderen Websites gelesen habe, die genau diese Anforderungen suchen.
1.) Ich muss Links nach Klasse ansprechen, um zu vermeiden, dass das Skript andere Funktionen auf den Seiten unterbricht.
2.) Meine Anker in diesem Wiki verwenden keine ID, sondern – name=”mein Link”
Wer Interesse hat, sollte sich auch dieses neue Template ansehen – Slidexy – das wir zusammengestellt haben: http://www.tallhat.com/templates/slidexy/ – es verwendet jQuery und ist responsiv, da es denselben Inhalt auch auf iPhone und iPad gut darstellt.
Ich habe festgestellt, dass dieses Skript namens jQuery.LocalScroll innerhalb der oben genannten Parameter funktioniert. Es scheint jedoch keine Überschriften zu verarbeiten, die mehr als gewöhnliche alphabetische Buchstaben enthalten, so dass Kommas, Fragezeichen usw. dazu führen, dass es zur standardmäßigen ruckelnden Ankerlink-Bewegung zurückkehrt.
Ich mag das Skript auf dieser Seite sehr, aber für dieses große Wiki, an dem ich arbeite, konnte ich es einfach nicht zum Laufen bringen, ohne Linkklassen oder übergeordnete Container anzusprechen und name="link" an Ankern anstatt id="link" zu verwenden. Ich werde dieses Skript eines Tages für andere Projekte wieder verwenden und werde auch gerne eine Spende machen –
Wenn jemand eine Lösung hat, damit dies auch auf einem iPad funktioniert, lassen Sie es uns bitte wissen!
Perfekt, genau das, wonach ich gesucht habe.
Ist es möglich, dies mit anderen jQuery-Plugins zu kombinieren, um die Ladezeit zu beschleunigen? (ohne den Code zu zerstören)
Wie bekommen wir das auf einem iPad zum Laufen? Danke!
Ihr Code versagt in einigen Browsern (IE, Chrome und Safari ... FF scheint in Ordnung zu sein), wenn sie herausgezoomt sind. Es scheint daran zu liegen, wie Sie überprüfen, ob der Container scrollbar ist. Die folgenden Zeilen scheinen das Problem zu sein
$scrollElement.scrollTop(1); var isScrollable = $scrollElement.scrollTop()> 0;Ich vermute, wenn der Browser herausgezoomt ist, scrollt das Scrollen um eins überhaupt nicht (was, lustigerweise, 1 NICHT mehr als 0 macht). Das Ändern auf 2 wird das Problem wahrscheinlich gut genug beheben.
Ich habe gerade diese Webseite gelesen: http://djpate.com/2009/10/07/animated-scroll-to-anchorid-function-with-jquery/
und fand heraus, dass ich dies mit dem folgenden Code tun kann
function goToByScroll(id){$('html,body').animate({scrollTop: $("#"+id).offset().top},'slow');
}
Es ist ein bisschen kleiner als Ihres, ich frage mich, was Ihres kann, was dieses nicht kann
Exzellenter Beitrag, funktioniert super... Ich habe ihn auf meinem Blog angewendet..
Schauen Sie es sich hier an: „YourBloggingTips – Smooth Anchor Linking“
Ich habe beide Methoden angewendet, eine im Beitrag bereitgestellt & die andere aus "Referenz-URL – Seitenquelle"
Beide scheinen ordnungsgemäß zu funktionieren.
Die Änderungen, die ich vorgenommen habe, betreffen die
scrolling speed,target.offset& kleine Änderungen an// Ensure Target ExistsIm Folgenden ist mein vollständiger, modifizierter Code, der zu 100% funktioniert
FANTASTISCH! Vielen Dank, es hilft mir bei einem Projekt!
Hallo zusammen, aus irgendeinem Grund bekomme ich das auf dieser Seite und insbesondere auf dieser Seite nicht zum Laufen: http://milemarker.com/?page_id=1060
Jede Hilfe wäre sehr dankbar.
Danke!
Fantastisch, danke!
Eine Frage habe ich aber noch
Ich gestalte eine Website mit einer fixierten oberen Leiste, die beim Scrollen nach unten am oberen Bildschirmrand bleibt. Das bedeutet, dass beim Navigieren zu einem bestimmten Teil der Seite, z.B. einer Textzeile, diese von der oberen Leiste verdeckt wird. Gibt es eine Möglichkeit, das Scrollziel um eine bestimmte Anzahl von Pixeln zu verschieben, damit der Teil der Seite, den der Benutzer sehen soll, nicht von der oberen Leiste verdeckt wird?
Ich hoffe, das ergibt alles Sinn.
Vielen Dank im Voraus!
Hey Chris, weißt du, wie man die Raute am Ende der URL verschwinden lässt? Ich möchte nicht, dass der URL etwas hinzugefügt wird, wenn es sich um einen Lesezeichen-Link handelt. Wenn du den Code kennst, sag mir bitte, wo ich ihn in den obigen Code einfügen soll.
Oh mein Gott, vielen Dank! Ich fragte mich, ob jemand die richtigen Zeilen dieser Funktion hätte, aber Ihre funktioniert! Das ist so eine Erleichterung!
Vielen Dank. Auf der Seite, an der ich gerade arbeite, implementiert und es sieht fantastisch aus!
Eine kurze Frage hätte ich aber noch, wenn ich darf.
Wie kann ich erreichen, dass der Ziel-ID-Name (Hash) NICHT in der URL angezeigt wird? Gibt es eine Möglichkeit?
Ich habe vor einer Weile so etwas gemacht
Hey, vielen Dank fürs Teilen. Das ist genial!
Das funktioniert auch mit responsiven Websites in Echtzeit. Die gepostete Lösung funktioniert nicht bei Größenänderung des Browsers für responsives Design (mit Media Queries), aber Ihre hat funktioniert! Nochmals vielen Dank!
Ach übrigens, ich versuche, die Zielposition um z.B. 120px zu "verschieben", so wie hier
Das aktuelle Layout, das ich verwende, blockiert mein h1, es wäre schön, wenn es die Endzielposition mit dem obigen Code "ziehen/schieben" könnte.
Das Originalbeispiel von Chris funktioniert nicht mit Safari 6.0.3 für OS 10.8.3, aber dieses, das Sie oben gepostet haben, ist absolut fantastisch und hat sogar das Hashtag-Geschäft. Echt cool! Danke fürs Posten!
Hallo, danke, das ist tolles Zeug.
Wenn ich meine Website auf einem iPad anschaue, funktioniert das Scrollen manchmal und manchmal nicht. Haben andere das auch erlebt?
Gibt es Vorschläge, um das Problem zu umgehen?
Die Seite, die ich baue, ist
http://www.risrani.com/newsite/risrani.html
Du könntest auch ändern
Zu
So dass das Attribut "href" des Anker-Tags mit einem Hash beginnt und nicht nur einen Hash enthält.
Hallo,
Ich habe das gleiche Problem auf dem iPad, wie Sie erwähnt haben. Es funktionierte bei mir mit großen Verzögerungen. Ich bin mir nicht sicher, was die Ursache war, aber ich suche auch nach Alternativen.
Hallo, der Code scheint gut zu funktionieren, wenn Sie auf einen Anker klicken und dann ganz nach oben auf der Seite gehen und einen anderen klicken, aber wenn Sie Anker für Anker navigieren möchten, ohne nach oben zu gehen, ist es ein Desaster
Wie mache ich es, damit es wie auf dieser Website funktioniert: http://happycog.com/ ?
Ich frage mich auch, wie man es zum Laufen bringt wie happycog.com – aber kompatibel mit iPhone/iPad. Jede Hilfe oder Richtung wäre großartig! Danke.
Probleme haben. Ich bin neu bei jQuery und verwende den Code, wie er im Tutorial angezeigt wurde. Es stellte sich heraus, dass der Kunde meine Seite mit einem Iframe lädt. Gibt es Änderungen, die am Code vorgenommen werden müssen, damit er funktioniert, oder ist er von Anfang an fehlerhaft? Wenn es Änderungen gibt, hat jemand Ideen, was das sein könnte? Vielen Dank im Voraus. Ich schätze es aufrichtig.
$(document).ready(function(){
$(‘a[href*=#]’).click(function() {
if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”)
&& location.hostname == this.hostname) {
var $target = $(this.hash);
$target = $target.length && $target
|| $('[name=' + this.hash.slice(1) +']');
if ($target.length) {
var targetOffset = $target.offset().top;
$('html,body')
.animate({scrollTop: targetOffset}, 1000);
return false;
}
}
});
});
Ich verwende das Plugin aus dem Referenzlink und ich bekomme es nicht zum Laufen: Ich habe eine Scroll/Follow Sidebar (von hier https://css-tricks.de/scrollfollow-sidebar), deren Links ich mit dem Smooth Scrolling versehen möchte. Es funktioniert beim Zurückscrollen, aber es funktioniert nicht beim Herunterscrollen (die Links funktionieren überhaupt nicht..)
Hier ist die Datei http://cl.ly/3h3i3p0h0m34191F0T2h
Kann mir jemand helfen, das herauszufinden? Vielen Dank im Voraus
Plugin funktioniert nicht im neuesten Safari 6.0 (Mountain Lion)
Wenn ich Scrolleffekte wie "easeOutExpo" hinzufügen möchte
wo sollte ich es platzieren, und ob ich kann?
Übrigens, tolles jQuery, wirklich nützlich :)
Ich habe es geliebt!
Chorny
Fantastisch. Vielen Dank.
Aus irgendeinem Grund... Dies funktioniert in Safari 6.0 nach dem Mountain Lion Upgrade nicht mehr.
Das kann ich bestätigen. Hoffentlich werde ich irgendwann Zeit haben, es zu aktualisieren.
Danke für die Bestätigung. Vielleicht springt ja jemand mit einem Workaround oder einer Lösung ein und rettet den Tag.
Ich habe Mountain Lion nicht, also kann ich es nicht einmal versuchen.
Ja. Mountain Lion macht es kaputt! Kann den Grund nicht festmachen...
Ok, scheint kein Code-Problem zu sein, sondern eher ein fehlerhafter Safari
https://discussions.apple.com/thread/4145775?start=0&tstart=0
Es scheint mit der jQuery .scrollTop()-Funktion zusammenzuhängen.
Aus irgendeinem Grund scrollt Safari 6 das Element korrekt mit,
meldet aber direkt danach einen falschen Wert,
Am interessantesten ist jedoch, dass Safari 6 den KORREKTEN Wert meldet, wenn Sie die Funktion noch einmal aufrufen,
Ich habe eine schnelle und schmutzige Testseite erstellt, um dieses Verhalten unter http://www.cybmed.com/w/safari6bug zu demonstrieren.
Vielen Dank für die Lösung und wow, das ist eine detaillierte Erklärung und Lösung, die Sie da haben.
Ich hoffe, das wird (von Safari) eher früher als später behoben.
Ich poste nur, um auf dem Laufenden zu bleiben.
Ich liebe dieses sanfte Scrollen, es funktioniert bei mir einwandfrei. Vielen Dank für dieses gute Scrollen.
Kann jemand dies in Safari 6.0 zum Laufen bringen? Oder zumindest eine Möglichkeit finden, dass die normale Anker-Funktionalität (Sprung zu) funktioniert?
Dies scheint in einigen Versionen von Chrome nicht mehr zu funktionieren. Irgendwelche Ratschläge?
Fehler in Safari. 50% Lösung – URL-Änderungen funktionieren nicht
jQuery Upgrade auf 1.8
für das reibungslose Scrollen von iOS arrangieren
Hier ist eine gute Erklärung von Johnny zu dem oben erwähnten Fehler
Dieser Kommentar wurde auf Safari 6 breaks my JavaScript gepostet.
Hallo, gut gemacht für Ihr Skript. Ich muss von einem externen Link aus arbeiten, gibt es eine Lösung, wenn die Seite geladen wird, um diesen Effekt zu erzielen.
Das ist wirklich großartig, und ich habe es anscheinend perfekt zum Laufen gebracht, obwohl ich kein einziges JavaScript-Ding verstehe. Ich habe jedoch gerade auch diese Navigationstechnik verwendet, die einen Anker benutzt und so eine Verzögerung erzeugt, wenn der Reveal-Nav-Button gedrückt wird, da das versteckte Menü denkt, es solle scrollen.
Das ist ein wilder Schuss ins Blaue, aber kennen Sie eine einfache Methode, um einen bestimmten Anker-Tag auszuschließen?
Hallo,
Dies ist ein großartiges Snippet, aber kürzlich habe ich ein Problem mit Safari entdeckt.
Safari erkennt die Anker-Tags, die mit "id" benannt sind, nicht, nur mit dem Attribut "name".
Aber das Skript funktioniert mit dieser Methode nicht, daher funktionierten die Anker in Safari nicht.
Hat jemand eine Lösung gefunden?
Vielen Dank an alle.
Habe mich gerade für Updates angemeldet. Werde diese Technik ausprobieren, wenn ich nach Hause komme.
Ich habe eine ähnliche Frage wie Sascha oben. Dieses Skript funktioniert einwandfrei für alle fest codierten Anker auf meiner Seite, aber ich habe auch einen "Finden"-Button, der dieses Skript verwendet
function jumpToAnchor() {
window.location.href = String(window.location).replace(/#.*$/, “”) + ‘#’ + document.getElementById(‘findname’).value;
}
und dieses Markup
select name='findname' id='findname' class='selectOne'
input type="button" value="Find" onClick="jumpToAnchor()"
und dies führt nicht zu sanftem Scrollen, sondern springt direkt zum Link. Gibt es eine Möglichkeit, sanftes Scrollen in diese Logik zu integrieren?
Danke für jede Hilfe.
Das ist etwas leichter zu verstehen, aber beide tun dasselbe
Das sieht nach einem ziemlich großen Code-Wirrwarr aus, um tatsächlich ein Ziel auf der Seite zu finden und sanft zu scrollen..., das hätte ich getan, um das sanfte Scrollen zu ermöglichen....
$(document).ready(function() {
$(document).scrollTop($("div.wrapperBlock").offset().top); /Dies wäre der Wrapper der Seite/
$("ul.nav li a").click(function(){ /Hier können Sie Ihre HTML-CSS-Struktur bearbeiten/
var endPoint = $(this).attr("href").replace("#","");
var target = $("a[name='"+endPoint+"']");
if (target.length)
{
var top = target.offset().top;
$('html,body').animate({scrollTop: top}, 1000);
return false;
}
return false;
});
Und das HTML wäre
Über
Was Sie getan hätten, hat definitiv eine Bedeutung, aber ich würde diesen einfachen Code bevorzugen.
Chris' Snippet funktioniert auf meiner Website in Chrome nicht reibungslos. Aber aus irgendeinem Grund funktioniert Devins wie ein Zauber.
VIEL zu viel Code für diese Funktionalität.
Hier, schauen Sie sich diesen Beitrag an, nur 4 Zeilen jQuery bewirken denselben Zauber: jQuery: Smooth Scrolling Internal Anchor Links – Von Charlie Evans.
Funktioniert perfekt. Kollidiert nicht mit Bootstrap Carousel.
Fantastisch.
Behebt die Safari-Probleme + sanfteres Scrollen in Chrome. Vielen Dank!!
Vielen Dank für Ihre Arbeit und die wirklich gute Ressource auf Ihrer Website ..........
Warum können Sie keine einfache Seite mit nur dem notwendigen Code bereitstellen.. ohne externe Links; Link zur Homepage, Anzeigen und so weiter.. so verwirrend!
Ich habe Probleme bei der Implementierung dieses Codes. Er kollidiert mit Bootstrap's Carousel. Ich habe einen längeren Beitrag dazu in den Foren geschrieben, dachte aber, ich würde meine Frage auch hier stellen. Wenn ich auf die Pfeile in meinem Karussell klicke, springt die Seite zum oberen Rand des Karussells. Außerdem ändert sich die URL zu "mydomain.com/myproject/#mycarousel." Wie kann ich verhindern, dass die Seite springt und die URL sich ändert? Vielen Dank für Ihre Hilfe.
Wie ich gerade über Ihrem Beitrag erwähnt habe, versuchen Sie stattdessen diesen Code: jQuery: Smooth Scrolling Internal Anchor Links.
Pulkit Goyal antwortete auf meinen Beitrag und sagte, dass das obige Skript nicht mit Bootstrap Carousel kollidiert. Sie könnten ihn bei Bedarf über seine Website kontaktieren.
Außerdem sollten Sie möglicherweise
(e).preventDefault();in Ihrer Funktion verwenden, um zu verhindern, dass die Anker-Links aktiviert werden.Lokal funktionierte das perfekt. Doch jetzt, wo meine Website online ist, funktioniert das sanfte Scrollen gelegentlich nicht. Wenn ich auf die Links klicke, passiert einfach nichts. Dann, wenn ich die Seite aktualisiere, ist es in Ordnung... irgendwelche Ideen, warum?
Link korrigiert...
kswedbergs github smooth scroll
Cross-Browser, großartige Optionen.
Hier ist eine Lösung, damit es in Safari funktioniert :)
Fantastisch. Danke
Hallo, vielen Dank, es funktioniert zu 100%. Meine Frage ist, wie man es horizontal verschieben kann? Danke
Juan, das Plugin, das _Nick_ unten erwähnt, kswedbergs github smooth scroll, scheint laut der Dokumentation die Option zu haben, horizontal zu scrollen:
direction: 'top', // one of 'top' or 'left'Ich weiß nicht, ob das Ihre Frage ist.
PS: Ich spreche Spanisch, aber ich empfehle Ihnen, immer auf Englisch zu posten, auch wenn es schlecht ist, egal. Das ist der effizienteste Weg, um Hilfe zu erhalten.
Hallo, wissen Sie, ob das in IFRAMES funktioniert?
Darf ich dieses Code-Snippet auch für kommerzielle Zwecke verwenden?
Vielen Dank im Voraus für eine Antwort.
Mit freundlichen Grüßen
Chriss Code funktioniert gut, aber der kürzere Code von Devin Sturgeon und Weremoose usw. hat eine merkliche Leistungsverzögerung bei allen *anderen* Links beim Initialisieren des Firefox(PC)-Fensters.
Zusätzlich zum obigen Beitrag habe ich nun festgestellt, dass Chris' Code tatsächlich eine gewisse Verzögerung aufweist (aber merklich weniger). Wenn wir den Selektor etwas genauer ansprechen, beseitigt dies die Verzögerungen bei anderen Links vollständig. $(‘#header a[href*=#]’).each(function() { ...
Ich bin ein völliger Neuling im Webdesign. Ich versuche, das sanfte Scrollen auf meiner Website zu implementieren. Ich habe die Anker-Links erstellt, jetzt muss ich nur noch das sanfte Scrollen einfügen. Kann mir bitte jemand eine Schritt-für-Schritt-Anleitung geben, wie ich das machen kann?
Danke dafür.
Funktioniert gut bei meinem Projekt!
Vielen Dank! Aber das funktioniert nicht unter Safari (v6.0.2). Kann mir jemand helfen, das zu lösen?
FANTASTISCH!!!!!!!
Ich habe ungefähr eine Stunde danach gesucht ... danke, Kumpel .......
Ihre Website ist die beste für CSS- und jQuery-Tutorials ...... ich bin ein Fan von Ihnen ...... danke ......... :)
Hallo, ich bin nicht so gut mit jQuery, aber ich bin ziemlich gut mit CSS und HTML. Ich möchte nur eine einfache Sache: einen Link, und wenn ich darauf klicke, scrollt die Seite sanft zu einem H1-Tag mit id="hier". Können Sie mir bitte einen Code senden, den ich einfach kopieren und einfügen kann, und können Sie Kommentare hinzufügen, wo ich die ID schreiben oder Änderungen vornehmen muss... bitte, bitte, bitte, ich möchte das wirklich. Bitte senden Sie den Code mit Kommentaren an meine E-Mail: [email protected]
Wie kann ich es horizontal scrollen? =(
Dies behebt das Safari-Problem für Mountain Lion, aber Sie müssen eine ID oder Klasse für den Trigger angeben.
Beste Grüße
Sie können jeden Selektor verwenden, soweit ich weiß, etwas wie a[href=”#] oder “.nav a” wird denselben Zweck wie das Original erfüllen, ohne es mit Klassen zu überladen ;) Aber vielen Dank für dieses Snippet, es macht 50% des Projekts aus, an dem ich gerade arbeite LOL.
Können Sie mir bitte die komplette Demo-Datei mailen?
Wenn jemand immer noch Probleme mit iPads und der Navigation hat, die nach dem ersten Klick nicht mehr anklickbar ist. Ich habe einen Hack gefunden, um dieses Problem zu umgehen. Sie müssen ein Div direkt vor dem schließenden Tag des letzten Elements oder Containers, den Sie scrollen, hinzufügen und dann jQuery verwenden, um die Höhe auf 1px zu setzen, bevor die Animation läuft, und dann mit einem Callback auf .animate() die Höhe nach Abschluss der Animation wieder auf 0px setzen.
Code, den ich hier verwende
Und ich platziere ein Div mit der ID "device" direkt vor dem Ende des Inhalts, den ich scrolle.
Ehre, wem Ehre gebührt, ich fand diese Lösung hier
http://stackoverflow.com/questions/7826868/fixed-position-navbar-only-clickable-once-in-mobile-safari-on-ios5/10030251#10030251
nach etwa einer Stunde Suche. Ich hoffe, das hilft jemandem.
Heiliger Bimbam, Kommentare! Danke dafür! Genau das, was der Arzt heute Abend verordnet hat.
Entschuldigung Jungs, ich bin völlig neu in jQuery.
Ich habe den jQuery Google Library Link in die Head-Tags eingebettet.
Ich habe den bereitgestellten Code zwischen Head-Tag oder sogar nach dem Body-Tag platziert, nichts hat funktioniert.
Ich möchte einfach, dass beim Klicken auf < a href=”index.html#point1″>
Der Browser bewegt sich langsam zu < a name=”point1″>
Vielen Dank im Voraus.
Was ist, wenn ich einen externen möchte?
Beispiel: Die Startseite hat einen Link
Galerie 06
Leitet zur Galerieseite weiter und scrollt zu id="06"
Wie behalte ich den Anker-Link bei?
Wow, es funktioniert auf Anhieb. Ich musste nicht einmal eine einzige Sache ändern, damit es funktioniert. Einfach den Code kopieren und in die Seite einfügen. Beeindruckend!
Das Scrollen funktioniert, aber immer wenn es an einem anderen Div vorbeiscrollt, hält es für eine Sekunde an, wodurch es so aussieht, als würde das Scrollen hängen bleiben. Irgendwelche Lösungen?
Funktioniert plötzlich nicht mehr auf iOS-Geräten – funktionierte heute Morgen vorübergehend!
Hatte jemand ähnliche Probleme?
Vielen Dank. Ihr Code funktionierte nicht richtig (springt immer wieder nach oben, bevor er zum Ziel scrollt), aber Devins Code funktioniert perfekt mit einer schönen und flüssigen Animation.
Prost!
Ich liebe dich, das hat sofort funktioniert. Genau das, was ich brauchte, danke!
Hat jemand schon einmal das Problem gehabt, dass das Scrollen etwa 30 Pixel über die angegebene ID hinausgeht? Ich liebe das Skript trotzdem, sehr schön.
Ich habe herausgefunden, dass es genau richtig rechnete und es tatsächlich wegen einer festen Navigation auf der Website versetzt aussieht. Ich werde untersuchen, wie man es um eine bestimmte Anzahl von Pixeln versetzt, entschuldigen Sie den unnötigen Kommentar.
Haben Sie eine Lösung gefunden?
Hallo, ich habe JQuery verwendet und es funktioniert einwandfrei, außer TOP-MARGIN. Meine Website hat einen festen Header von 70px, und immer wenn die Seite gescrollt wird, verschwindet er hinter dem festen Header! Wie und wo wende ich MARGIN-TOP auf das Skript an? Vielen Dank im Voraus.
Ich arbeite gerade an einer Kundenwebsite mit einem festen Header und das funktioniert für mich
Ändern Sie einfach '-70' so, dass es der Höhe Ihres festen Headers entspricht.
Ich habe den Code einfach kopiert und eingefügt, und es hat funktioniert! Vielen Dank, ich habe überall danach gesucht.
@Radax: Suchen Sie auf der Seite, und mitten in den Kommentaren finden Sie eine Antwort auf Ihre Frage – ich hatte das gleiche Problem, und ich habe es dank
Hallo,
Es funktioniert... aber...
Wenn ich die Höhe des Browsers ändere, funktioniert das Scrollen nicht mehr. Nach einem CTRL+F5 funktioniert wieder alles.
Wie kann ich das beheben (ohne von den Besuchern zu erwarten, dass sie CTRL+F5 drücken) ?
Grüße,
Bob.
Vielen Dank fürs Teilen. Es funktioniert super! Gibt es eine Möglichkeit, einen Parallax-Effekt hinzuzufügen? Ich könnte mir vorstellen, dass es möglich wäre, mehrere Überlagerungen von Smooth-Scrolling einzubinden und das Timing für jede anzupassen, um sie zu synchronisieren, aber ich weiß nicht wirklich, wo ich anfangen soll.
Zusätzlich, wie wäre es mit "Wisch"-Funktionen für Tablet-Geräte? Ich hatte Erfolg mit Swipe 2.0 mit Links- und Rechts-Scrolling, aber ich denke, Smooth-Scrolling mit klebrigen Bereichen, um das Scrollen zu Anker-"Abschnitt" zu stoppen, wäre cool. Nochmals vielen Dank.
Wie füge ich eine aktive Klasse hinzu, wenn der Link zum Abschnitt gescrollt wird?
Danke Mann, hat mir wirklich geholfen, einfach aber cool…
@Kawsar: das funktioniert bei mir
$('a').click(function(event) {event.preventDefault();
var url = $(this).attr('href');
$("a").each(function(index) {
$(this).attr('class', '');
});
$(this).attr('class', 'selected');
});
Luk, ich konnte das nicht zum Laufen bringen, wie fügt man eine aktive Klasse hinzu? Ich verwende Bootstrap-Nav… jede Hilfe wäre willkommen!
Das ist, was ich habe
Hey, das scheint für das Scrollen nach <b>oben</b> nicht zu funktionieren: Wenn Sie zum Beispiel einen Link zum Scrollen von Sektion Drei zu Sektion Zwei hinzufügen, funktioniert es bei mir nicht. Irgendwelche Ideen Jungs...?
Hat auf Anhieb funktioniert. Woo Hoo! :)
Du bist wunderbar, ich möchte wirklich so ein guter Coder sein wie du. Ich schaue zu dir auf!! Du bist der Mann… Nochmals vielen Dank…
Es funktioniert nicht auf dem iPhone :(
Devins Codes funktionieren perfekt :D
Hallo
Ich verwende dieses Skript mit einer festen Navigation (150px hoch) oben auf der Seite. Gibt es eine Möglichkeit, den #Ankern mit jscript etwas Top-Padding hinzuzufügen, um die feste Navigation zu kompensieren? Derzeit verschwinden die Abschnittsüberschriften unter der Navigation. Ich bin kein jscript-Programmierer, daher habe ich keine Ahnung, was ich hinzufügen soll oder ob es möglich ist!
Vielen Dank
Erstens – Devins Code ist solide und viel effizienter.
Zweitens – Diese ganze Sache wird durch einen Fehler in Webkit etwas verformt
http://stackoverflow.com/questions/1830080/jquery-scrolltop-doesnt-seem-to-work-in-safari-or-chrome-windows
Wenn Sie Probleme beim Funktionieren haben, lesen Sie diesen Artikel. Shog9 präsentiert eine einfache Problemumgehung.
Hat auf Anhieb funktioniert, nachdem ich zwei oder drei Stunden versucht hatte, alle möglichen Dinge zum Laufen zu bringen. Ich glaube, ich habe jetzt einen blauen Fleck auf der Stirn.
Hallo, ich habe das implementiert und es funktioniert großartig, aber ich habe ein Problem: Ich kann einen "Scroll-to-top"-Link nicht animieren? Ich schätze, das liegt daran, dass nach dem Hashtag nichts steht?
Die aktuellste Version dieses Codes, wie sie auf dieser Seite zum Zeitpunkt dieses Posts (2. Oktober 2013) zu sehen ist, funktioniert für mich perfekt als Copy-and-Paste-, "es funktioniert einfach"-Lösung für sanftes Scrollen zu Ankern auf einer Seite. Ich habe es zu einigen Seiten auf einer bestehenden Website hinzugefügt, wo Anker in einer Reihe von Schlüsselbereichen vorherrschend waren – wo diese Funktionalität dringend benötigt wurde, um das Website-Besuchererlebnis zu verbessern – und es funktionierte sofort. Sehr schön gemacht. Vielen Dank.
Ich konnte alles zum Laufen bringen. Als ich dann Änderungen an meinen Bildern (PNGs und JPGs) vornahm, die ich für Hintergründe verwendete, bemerkte ich, dass das Scrollen etwas ruckelig war. Müssen die Seitengrößen eine bestimmte Länge haben, um optimal zu funktionieren? Irgendwelche Ideen, warum das "Sanfte" nicht so sanft ist? Danke.
Es funktioniert sehr gut. Danke..
Nur eine Sache. Wenn ich den Browser zoome, verhält sich das Scrollen sehr seltsam. Aber es funktioniert unter normalen Umständen großartig.
Hallo,
Wie mache ich, dass Chris' Code den Hash in der URL belässt? Ich versuche das seit Tagen herauszufinden. Danke
Funktioniert perfekt … :)
Nett,
Der Code ist ziemlich einfach und funktioniert sehr gut
Ich bemerkte das seltsame Scrollverhalten beim Zoomen = /
Trotzdem danke = D
Dieser Code funktioniert nicht mit der neuesten Version von jQuery 1.10.2.
Verdammt!
Chris, könntest du bitte den Tippfehler in deinem Code korrigieren
Ich glaube, es sollte sein
Andernfalls kann die Seite unabhängig vom URL-Pfad zu einem Anker scrollen. Das hat mich den ganzen Tag verrückt gemacht! Prost!
Du hast absolut Recht! Schöner Fang. Behoben.
Perfekt, danke!! :) Ich musste auf 80px ändern
Dies ist der animierte Scrollcode mit Easing, den ich für WordPress erstellt habe.(Dieser erfordert nicht das jQuery Easing Pack)
Diesen Code in die Functions.php einfügen
Danke Michael, ich habe versucht herauszufinden, wie man das in WordPress zum Laufen bringt. Das hat perfekt funktioniert (und ist viel einfacher zu implementieren)!
Gut gemacht!
3 Anmerkungen
1. Es kann auch als Plugin hinzugefügt werden (so können Sie es bei Problemen aktivieren oder deaktivieren und Ihre functions.php-Datei übersichtlich halten): 2
2. Ich würde empfehlen, ein spezifischeres Ziel anzugeben, um Probleme auf dem Rest der Seite zu vermeiden. Ich würde also ersetzen
mit
Ich würde es an den Footer hängen, ich glaube nicht, dass es im Header geladen werden muss add_action('wp_head','smoothscroll');
Plugin mit Anweisungen: https://gist.github.com/tukano/2e30cc9262da4b45d047a46ffd829adc
Kann mir jemand sagen, wo ich hier falsch liege? Mein Gehirn ist kaputt, ich habe so viele verschiedene Versionen ausprobiert und keine scheint zu funktionieren.
http://www.kt-testing.co.uk
Dies ist die Seite, sehen Sie sich den Code im Quelltext an.
Danke.
Fantastisch. Ich habe viele Leute gefunden, die behaupten, die Antwort zu kennen, aber sie taten es nicht. Ihre funktionierte beim ersten Mal perfekt. Ich werde Ihnen jetzt sofort auf Twitter folgen.
Hey,
Das ist großartig!
Eine Frage: Ich habe ein responsives Menü oben auf meiner Seite, mit der ID #menu, wie würde man diese ID von der Funktion ausschließen? Jede Hilfe wäre super!
Prost!!!
Das Beste, was ich je benutzt habe! Vielen Dank!
Das Smooth-Scroll funktioniert bei mir auf dem iPad nicht. So wie ich es verstehe, schaltet iOS JavaScript normalerweise aus, um Speicher zu sparen. Gibt es eine Problemumgehung für das iPad? Oder haben Sie einen Vorschlag für ein Fallback? Meine regulären href-Anker funktionieren auf dem iPad nicht, wenn ich Smooth-Scroll aktiviert habe, obwohl sie funktionieren, wenn es nicht aktiviert ist. (Liebe den Snippet und funktioniert perfekt auf dem Desktop!)
http://www.nebraskaaddys.org/dev2/student-submissions.php
Ich weiß nicht, ob jemand das schon erwähnt hat, ich konnte bisher nichts in den Kommentaren finden.
Wenn das Ziel nur 300px entfernt ist oder 1500px entfernt ist, ist die Animationszeit dieselbe. Also habe ich das Folgende hinzugefügt..
var scrollDiff = target.offset().top – $('body').scrollTop();
dann diesen Wert für die Animationszeit verwendet
Ja. Das Skript ist großartig. Ich benutze es schon seit etwa einem Jahrzehnt.
Gibt es eine Möglichkeit, es bis zu einer bestimmten Entfernung sanft zu machen und es dann am Ende springen zu lassen? Ich habe einmal eine Seite besucht (konnte sie jetzt nirgends mehr finden!), auf der sie Scroll-to-Top mit einem Sprungeffekt oben verwendet haben! Irgendwelche Vorschläge?
Versuchen Sie es mit TweenMax..
http://jsfiddle.net/ZB26f/4/
Zuerst einmal vielen Dank für die Antwort.
Das Skript war gut, funktionierte einwandfrei.
Das Problem war seine Größe (99 KB). Es wäre großartig, wenn es mit einem kleinen Inline-Skript funktionieren würde. Irgendwelche Vorschläge?
Funktioniert perfekt! Danke!
Das funktioniert sehr gut, bis ich auf ein Problem stoße, nämlich die Verwendung dieser Links mit Scroll-Animation in meiner Navigationsleiste. Ich habe eine Scroll-Funktion, die den Hintergrund jedes Links beim Scrollen hervorhebt. Wenn die Links angeklickt werden, sollte der Hintergrund hervorgehoben und zum Ziel gescrollt werden. Aber die Scroll-Animation unter der link.click-Funktion ist immer noch eine Scroll-Bewegung, obwohl nicht von Menschen gemacht, löst sie die Scroll-Funktion aus.
Nehmen wir an, es gibt 10 Links in der Navigation, und ich klicke auf den letzten, dann sehen Sie, wie die Hintergründe von 1-10 während der Scroll-Animation Ihres Codes wie ein Zug hervorgehoben und wieder deaktiviert werden.
Was kann ich tun, um dies zu verhindern? Eine Bedingung hinzufügen, um zu filtern, ob die Scroll-Bewegung von einem Menschen oder einer Animation ausgeführt wird?
Vielen Dank
Fühle mich gut nach dem Besuch deiner Seite! :-)
MUCHAS GRACIAS !!!! Vielen Dank, sehr einfach und lässt meine Website edler aussehen :)
Wie ändere ich den Code, damit er den Hash am Ende der URL anzeigt? D.h. http://www.example.com/#about-us statt nur http://www.example.com/
Danke! Hier ist ein Vorschlag, wie man den Hash in der URL nach dem Klicken sichtbar macht
Ich denke, dieses Verhalten ist besser. Es ist näher am Standard der Browser, was bedeuten sollte, dass Benutzer weniger wahrscheinlich Fehler machen (bei Dingen wie der Browserhistorie) und sie die URL komplett mit Hash und allem kopieren und einfügen können.
Persönlich habe ich auch diese zusätzlichen Änderungen vorgenommen
Selektor geändert: Animierten Bildlauf nur auf Elemente mit der Klasse „scrollto“ anwenden. Ich habe dies getan, um mehr Kontrolle zu erhalten und Interferenzen mit anderen Dingen wie Karussells zu vermeiden. Sie können den Selektor leicht an Ihre spezifischen Bedürfnisse anpassen, zum Beispiel durch Auswahl mehrerer Klassen.
Scroll-Stopp-Punkt auf 20px über dem Ziel gesetzt. Fühlt sich einfach weniger eingeengt an. :)
Das Scrollen ist in 500 ms abgeschlossen. Ich denke, das ist genug, und ich erinnere mich vage an eine Usability-Studie, die besagt, dass benutzergesteuerte Navigationsanimationen (oder ähnliches) in 500 ms oder schneller abgeschlossen sein sollten. Keine Zeit, eine Referenz herauszusuchen, aber ich denke, es war eine Studie von Jakob Nielsen. (Abgesehen davon mag ich die Idee, die Zeit basierend auf der Scroll-Distanz (SD) zu berechnen, d.h. kürzere Zeit für kürzere SD, längere Zeit für längere SD.)
Wenn es jemanden interessiert, hier ist es
Ist es möglich, dieses JS hinzuzufügen, wenn Windows geladen wird, damit das JS reibungslos zum Inhalt bewegt?
Danke dafür, Chris.
Weiß jemand, wie man den Browser dazu zwingt, dieses Skript auszuführen, wenn der Benutzer einen neuen/anderen Hash in der URL eingibt? Ich bemerke, dass es beim ersten Laden ausgeführt wird. Aber wenn der Benutzer einen neuen Hash eingibt, scheint der Browser zu übernehmen und die Standardaktion auszuführen – nämlich direkt zur Hash-Position zu springen, ohne überhaupt zu scrollen.
Ich habe das Skript leicht modifiziert, da ich eine feste Navigation oben auf meiner Seite habe. Daher passe ich die Position an, zu der gescrollt werden soll. Aber es wird nicht ausgeführt, wenn der Benutzer einen neuen Hash eingibt. Das mag nie passieren (ein Benutzer, der den Hash eingibt), aber ich dachte, es wäre schön, das Skript in einem solchen Fall auch auszuführen. Ich habe CSS-Fixes gesehen, um Ränder/Abstände dafür anzupassen, aber diese Lösung gefällt mir nicht (da sie die Fähigkeit des Benutzers, Text von der Seite zu kopieren/einzufügen, beeinträchtigt hat).
Vielen Dank im Voraus!
Ups, ich habe die Antwort auf meine Frage gefunden: jQuery hat ein 'haschange'-Ereignis. Schön!
Hey Leute. Für diejenigen, die immer noch versuchen, dies auf iOS-Geräten zum Laufen zu bringen, müsst ihr nur ein bisschen CSS hinzufügen
-webkit-overflow-scrolling: touch;Stellen Sie sicher, dass Sie es zu den Style-Attributen des scrollenden Inhalts hinzufügen und Sie sind dabei! :)
Ich habe die folgende Zeile in einem Code hinzugefügt, um ein unpassendes Scrollen auf den aktuellen Hash zu vermeiden
Vollständiger Code
Danke Mann, das ist großartig! Funktioniert perfekt..
Hallo, ich weiß nicht viel über Programmierung, aber ich möchte diesen Effekt bei einem "Zurück nach oben"-Anker erzielen, den ich habe. Kann jemand die Änderungen und genau erklären, was ich tun muss (im Detail!!), damit es funktioniert?
Jede Hilfe wäre sehr dankbar.
Dieses sanfte Scrollen wird sich als nützlich erweisen. Danke :)
Du bist ein Zauberer! Sehr elegant, danke nochmals Chris!
Wie fügt man diese Animation zu: onClick=”location.href=’#div'” hinzu?
Sehr gut, Chris, das werde ich in Zukunft verwenden.
Danke, genau das, wonach ich gesucht habe, hat funktioniert, also habe ich kein Problem damit, nochmals danke, pass auf dich auf.
Das funktioniert nicht und erzeugt den Fehler 'TypeError: target.offset ist keine Funktion'.
Ich möchte den Scroll-Stopppunkt oben auf der Seite verschieben. Ich habe eine feste Navigationsleiste, unter der es sich immer versteckt, wenn ich zu den gewünschten Abschnitten navigiere – Können Sie bitte Ideen vorschlagen?
Vielen Dank, hat mir sehr geholfen ..
Möglicherweise kollidiert dieses JS mit Bootstrap.
Wenn ja, hier ist ein guter Fix
Die erste Zeile $('a[href*=#]:not([href=#])') sucht tatsächlich nach allen Anker-Elementen, die mit HTML 5 Datenattributen optimiert werden können
Ersetzen
$('a[href*=#]:not([href=#])')Mit
$('[data-toggle="elementscroll"]')Als Nächstes platzieren Sie das HTML 5-Attribut auf jedem Ihrer Ankerlinks, wie unten gezeigt
Ich hoffe, das hilft jemandem da draußen!
Wenn jemand weiß, wie man diesen Code erweitern kann, damit ich die Farbe der Navigationslinks ändern oder Dekorationen wie eine Unterstreichung hinzufügen kann, würde ich das sehr schätzen.__
Das funktionierte wie ein Zauber.
Danke!!
Gibt es eine einfache Möglichkeit, diesen Code in eine separate JS-Datei einzufügen und die Funktion dann aus dem Haupt-HTML aufzurufen?
http://cferdinandi.github.io/smooth-scroll/
Das funktionierte am besten für mich. Es verwendet kein jQuery.
Es hat viel Scrollen gebraucht, um zu Ihrer empfohlenen Lösung zu gelangen.. Danke, mein Herr, das funktioniert bei mir hervorragend!
Ich weiß nicht, ob jemand diese Lösung bereits gepostet hat, aber ich hatte meine Links in einem festen Footer und den Inhalt in einem Div innerhalb des Bodys.
Das obige Skript funktionierte nur, wenn ich von ganz oben auf der Seite zum angeklickten Link ging, von einem Link zum anderen schien es nicht zu funktionieren. Ich bemerkte, dass der Grund dafür war, dass der scrollTop auf den Abstand zwischen den Ankern statt auf den tatsächlichen Offset des Ankers von seinem Elternteil eingestellt war. Also nahm ich einfach den Abstand zwischen und addierte ihn zum scrollTop, wo der Benutzer bereits war, und das brachte alles in Ordnung.
Du bist ein Geschenk Gottes! Ich habe mich die letzten 48 Stunden damit geplagt, und dein Code hat mein Problem gelöst! Alles, was ich tun musste, war, die beiden Instanzen von #myDivWithScrollBar durch #content zu ersetzen, was der Name des Divs war, das ich verwendete, und schwupps, alles lief wie am Schnürchen.
Vielen DANK, dass du dir die Zeit genommen hast, deine Lösung zu posten!
Mein Header ist fixiert, und wenn ich darauf klicke, scrollt er richtig nach unten, aber er versteckt sich hinter dem Header, der oben fixiert ist.
Könnten Sie mir bitte die Lösung mitteilen, wie man die obere Position beim Herunterscrollen einstellt
Du solltest verwenden: top - deine Headerhöhe, zum Beispiel top -60..
top -100 in diesem smoothscrool.js funktioniert tatsächlich perfekt (soo glücklich, dass ich das gefunden habe), aber nur auf meinem iPhone (Hochformat, Querformat ist in Ordnung) der Offset ist etwa 15px zu groß wegen der Einstellungen in der Media Query, wie kann ich das mit JS beheben? Ich möchte nicht, dass der Header im mobilen Hochformat zu groß ist... in CSS würde das bedeuten, dass ich dem body -15px top-margin geben muss...? Es könnte eine JS-Lösung geben, von der ich nichts weiß?
Danke, tschüss, Mary
$(document).ready(function(){
//zuerst definieren Sie 1 leeres Div und fügen die Klasse .up und die Klasse .top[Zurück nach oben] hinzu
$(“.top”).click(function(){
$('html, body').animate({scrollTop: $('.up').offset().top -100 }, 3000);
});});
Hallo Jungs,
Also habe ich jetzt ein kleines Problem mit dem Skript. Wenn ich einen einfachen a href Link hinzufüge, dann funktioniert es. Aber wenn ich eine Image Map benutze, habe ich keinen Scroll-Effekt. Hat jemand eine Idee, dieses Problem zu beheben?
Vielen Dank für die Hilfe :-)
Hast du das Problem mit der Image Map gelöst? Ich habe das gleiche Problem…
Ich bekomme dies in der Konsole
Uncaught SyntaxError: Unerwartetes Token ,
Was jetzt?
Ich möchte wissen, welche Einstellung das Ziel definiert. Als ich diesen Code getestet habe, scheint er zur Unterseite des Ziels zu gehen, nicht wie in der Demo. Wie löst man das?
Hallo, es funktioniert und sieht toll aus, aber ich habe ein Karussell auf meiner Seite und diese verwenden auch das #-Tag, um zu funktionieren.. und dieser Code gilt im Allgemeinen für alle hrefs mit #.. kann mir also jemand bitte sagen, wie ich es spezifisch machen kann? Dies ist mein Menücode und ich möchte nur, dass er darauf angewendet wird
Zuhause
Über
Funktionen
Listen
Formulare
Dienste
Portfolio
Zeugnis
Kontakt
Hoppla, meine Menüstruktur ist so: nav -> ul -> li -> a
Einfach den Selektor anpassen
:)
Vielen Dank, Chris! Ich beherrsche kein JS, aber ich konnte es einfach einfügen. Ich schätze all die Hilfe, die ich hier über die Jahre gefunden habe, wirklich sehr!
aber es wurde zweimal aufgerufen, weil es HTML, BODY enthält
Du kannst es testen.
Danke, es funktioniert gut. Aber ich habe Fancybox verwendet. Nachdem ich diese Codes eingefügt habe, funktioniert es nicht mehr. Ich denke, das liegt an diesem "href*=#", aber ich weiß wirklich nicht, was ich tun soll. Können Sie mir helfen?
Ich bin auf dasselbe Problem gestoßen, als ich versuchte, den Code eines anderen umzugestalten. Ich bin mir nicht sicher, was dieses Problem verursacht.
Hallo zusammen,
Ich habe ein Problem mit dem Scrollen und dem Scroll-Spy von Bootstrap. Wenn ich also scrolle, ändert sich der Status des Menüpunkts entsprechend auf aktiv, was ich möchte... aber ich möchte, dass der Scroll 60 vor dem Anker stoppt, also habe ich top-60 gemacht, aber jetzt funktioniert der Scroll-Spy nicht richtig, wenn er scrollt, aktiviert er den vorherigen Menüpunkt, wie würde ich das auch auf -60 ändern?? Bitte, jede Hilfe wird geschätzt..
OK, ich habe diese Lösung gefunden und sie hat das Problem gelöst
Ein weiteres Problem ist nun, dass beim Klicken auf die Karussell-Vor-/Zurück-Buttons beim Wechseln zur nächsten/vorherigen Folie die Seite auch um etwa 30px oder 40px nach oben scrollt.. ich habe diesen Offset-Code gelöscht, aber das hatte nichts damit zu tun.. hat jemand dieses Problem?
Vielen Dank für den Code. Er funktioniert gut auf meiner Website. Um den unerwarteten Syntaxfehler zu vermeiden, ist der Code für WordPress
Ich benutze das schon eine Weile und es scheint gut zu funktionieren. Ich habe die Ergebnisse jedoch immer auf Safari oder Firefox auf einem Mac angesehen. Neulich öffnete ich eines dieser Scroll-Seitenprojekte im IE (auf einem PC) und es funktionierte überhaupt nicht. Das Klicken auf die Seitenlinks öffnete einfach diese Seitenabschnitte wie ein Standardlink. Ja, ich weiß, viele werden sagen wollen "funktioniert bei mir perfekt", aber hat jemand eine Idee, warum das so sein könnte? Danke.
OMFG!!!
Dank an Devin Sturgeon!!!
Es hat einfach gut funktioniert.
Danke für den Artikel; ein toller Fund. Sehr einfache Implementierung.
Hier sind die Ergebnisse auf meiner Website: leejohnson.it
Funktioniert einwandfrei. Danke!
Super Tipp, hat mir etwas Zeit gespart :-).
Was ist, wenn ich auf einen der Unterpunkte im Menü klicken und auf eine andere Seite umgeleitet werden und sanft zu einem bestimmten Div scrollen möchte? Wie kann der Code geändert werden?
Fantastische Skripte. Wie könnte ich dies und das horizontale Scrollen kombinieren? :)
Danke Chris! Hier ist ein Verbesserungsvorschlag.
Wenn Sie diese Zeile direkt über den
return false;-Teilen hinzufügen…history.pushState({}, "", this.href);Das fügt den Anker zur URL hinzu, sodass Benutzer die Links zu diesen Ankern teilen können. <3 <3 <3
Vielen Dank für das Teilen dieser Codezeile! Ich stimme der Möglichkeit zu, den Link zu teilen. Danke!
DANKE, dass du das hinzugefügt hast! Ich konnte es in WordPress nicht zum Laufen bringen, ohne diese Zeile hinzuzufügen! <3
Danke auch von mir, Vero! Das ist ein ziemlich wichtiger Schritt, der aus SEO-Sicht enthalten sein sollte.
Vielen Dank fürs Teilen!!
Hallo. Angesichts des heute angesagten One-Page-Website-Stils… Mehrere Abschnittsanfänge müssen wirklich verlinkt werden. Diese Methode scheint also zu funktionieren. Aber angesichts von HTML 5, wie bringe ich einen **** zum Laufen? Es scheint, dass dies nur für etwas gilt, das in einem a.href verpackt ist.
Mein Code zum Beispiel
Das Team kennenlernen
In Ihrem Body-Tag
Oder auf Ihrem Div oben… schreiben…
Dann auf Ihrem Listen-Navigationslink unten…
Zurück nach oben
Es funktioniert in Chrome, IE, Firefox und Safari
Hallo,
Ich habe ein Szenarioproblem wie folgt: Ich möchte, dass Scroll Spy nur für einen Menüpunkt Portfolio funktioniert, zum Beispiel. Nach Abschluss des Portfoliobereichs wollte ich es als aktiven Punkt. Dann habe ich einen weiteren Bereich, der nicht mit Portfolio zusammenhängt und auch nicht in meinem Menü ist, so dass hier keiner der Menüpunkte aktiv sein sollte. Dann habe ich den Kontaktbereich, wo der Kontaktpunkt im Menü aktiv ist.
Das Problem ist also, dass, nachdem der Portfolio-Eintrag aktiv ist, er aktiv bleibt, für den nicht verwandten Bereich, bis ich zum Kontaktbereich scrolle. Dann ändert sich der aktive Eintrag.
Ich weiß, es ist verwirrend.. aber bitte helfen Sie mir, wenn Sie die Lösung kennen. Ich möchte, dass der aktive Zustand des Menüpunkts für eine bestimmte Höhe oder einen bestimmten Bereich aktiviert wird..
Als Beispiel in dieser Vorlage: Nachdem Sie zum Bereich "Arbeit" gescrollt haben, ist er ausgewählt und danach für das Testimonial und dann für die Preistabelle nicht ausgewählt, dann wieder für den Kontakt ist der Menüpunkt ausgewählt.
http://wunderkind.originthemes.info/demo/home-3.html
Danke,
Das ist ein fantastisches Skript! Ich habe es schon oft benutzt, ABER ich würde gerne wissen, ob man dieses Skript verwenden kann, indem man den href=”#anchor” durch so etwas wie onclick=”window.location.href=’#anchor’;” ersetzt ??? Ich habe ein bisschen an Ihrem Skript herumgebastelt und ein wenig recherchiert, kann es aber nicht herausfinden!
Du
return false;vom Handler solltest du nicht einfache.preventDefault();verwenden, um die Propagation aufrechtzuerhalten.Genau richtig, danke dafür.
Ich hatte anfangs einige Probleme damit, als ich es zur Navigation einer WordPress-Archivseite verwendete. Ich bemerkte jedoch, dass es nicht funktionierte, wenn ich the_title(); in meinen Links und Zielen verwendete, wenn ein Datumslink wie 1980's nicht funktionierte, wenn der Slug des Posts 1980s war. Dummer Fehler, aber funktioniert gut in allen Browsern.
Vielen Dank dafür! Ich habe schon eine Weile danach gesucht und konnte nichts annähernd so Gutes finden. Ich habe dies einfach kopiert/eingefügt in meine HTML-Datei und die Scrollgeschwindigkeit geändert, und es funktionierte!
Das ist dein Freund aus ASIEN,
& ich bin verliebt in deinen Code
Vielen Dank, Kumpel ;)
Es funktioniert gut nach dem ersten Klick. Ich bekomme es jedoch beim ersten Klick nicht zum Laufen. Beim ersten Klick scrollt meine Seite nicht sanft. Sie springt einfach zum Abschnitt. Danach funktioniert es einwandfrei. Irgendwelche Ideen, warum das passieren könnte?
Funktioniert gut, aber behindert andere, zuvor funktionierende jQuery-Funktionen daran, korrekt zu arbeiten. Die genannten Funktionen haben Klassen hinzugefügt und entfernt. Funktioniert nach Verwendung dieses Skripts nicht mehr.
Aus irgendeinem Grund stört dieses Skript meine verschachtelten Kommentare. Ich verwende das html5blank WordPress-Theme. Ich bin mir nicht sicher, wie ich das beheben kann. Irgendwelche Gedanken? Denn ich bin ratlos
WOOOOOOOOOOOOO!!!!!!!!!!!!
Nach Tausenden von Versuchen… es hat wirklich funktioniert… vielen, vielen Dank!!!!!
Gibt es eine Möglichkeit, die Hash-Links in der Adressleiste zu behalten und das reibungslose Scrollen nach oben nur mit einem '#' zu ermöglichen?
Hast du schon eine Antwort bekommen? Ich habe eine sehr schöne Lösung, die ich auf jeder Website mit einem Scroll-to-Top-Button im Footer verwende, der nach einem bestimmten Scrollen erscheint… lass es mich einfach wissen,
Tschüss, Mary
Chris, dein Skript hat den Trick gemacht. Es funktioniert wirklich! Vielen Dank.
Danke für den schönen und einfachen Code. Ich habe ihn ein wenig angepasst, um den Hash in der URL beizubehalten.
Nachdem die Animation abgeschlossen ist, den Hash wieder zur URL hinzugefügt.
jQuery('a[href*=#]:not([href=#])').on('click', function () {if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
var target = jQuery(this.hash);
target = target.length ? target : jQuery('[name=' + this.hash.slice(1) + ']');
if (target.length) {
jQuery('html,body').stop().animate({
scrollTop: target.offset().top
}, 1000, undefined, function () {
location.hash = target.selector.substr(1);
});
return false;
}
}
});
Hey. Ich habe ein kleines Problem mit meiner Website. Ich habe ein Hauptnavigationsmenü und die verschiedenen Abschnitte haben ein Untermenü. Dieser Code funktioniert perfekt, wenn ich nur die Links der Hauptnavigation verwende. Nach der Verwendung des Untermenüs, das eine Standardfunktion hat, funktioniert beim Klicken auf den Hauptnavigationslink das prevent default nicht und meine Seite navigiert zum Abschnitt mit dem Standardverhalten.
Irgendeine Idee, warum das passieren könnte?
Ich denke,
('[name="' + this.hash.slice(1) + '"]')mit doppelten Anführungszeichen ist besser als nur('[name=' + this.hash.slice(1) + ']'), denn wenn Sie einen Namen mit Leerzeichen haben (z. B. "Karte von New York"), stürzt es nicht ab.Hat perfekt funktioniert, als ich es angeschlossen habe, und genau das, was ich brauchte. Vielen Dank!
Hey,
Das ist großartig für mein Menü; jedoch stört das animierte Scrollen die JQuery UI Tabs, die ich am unteren Ende der Seite habe. Die Störung tritt nur auf, wenn der Inhalt unter den JQuery UI Tabs die Seite weiter nach unten drückt, also habe ich dort vorerst etwas leeren Platz gelassen, falls Sie es überprüfen möchten. Wie würde ich die JQuery UI Tabs Anker-Tags vom Scrollen ausschließen?
Ich habe es repariert! Danke.
Ich verwende dies für einzelne Navigationen
$("nav").on('click','a',function (event) {event.preventDefault();
var elAttr = $(this).attr('href');
$('body,html').animate({
scrollTop: $(elAttr).offset().top
},700);
});
Es hat funktioniert. Danke!
Wirklich nette Hilfe für mich .. Vielen Dank im Voraus
Für alle, die dies mit Boostrap + Karussell-Steuerelementen zum Laufen bringen möchten, ändern Sie einfach die erste Zeile in diese
Danke dafür! Ich verwende JQuery-Tabs und das hat mein Problem behoben. :)
Vielen Dank! Das war genau die Lösung, die ich brauchte.
Vielen Dank! Schnelle und einfache Implementierung, die sofort funktionierte – und mir viel Mühe ersparte.
Der Code funktioniert super, aber in der Demo im Bereich "CSS Header" scrollen die #top-Links nicht ganz zu diesem Bereich. Welchen Teil des Codes muss ich anpassen, um das zu erreichen?
Hallo ,
Ich mag das Skript, danke, es ist einfacher zu verstehen und funktioniert sehr schnell
Danke
Hallo!
Dieser kleine Snippet funktioniert wirklich gut!
Nur ein Problem: Wenn ich auf meinen In-Page-Link klicke und er mich zur gewünschten Stelle auf der Seite scrollt und ich dann versuche, manuell zu scrollen, funktioniert das manuelle Scrollen nicht, bis ich mit meiner aktuellen Position auf der Seite "aufgeholt" habe.
Kann mir bitte jemand helfen?
Den Code angepasst, um Anker-IDs mit Punkten zu unterstützen.
Schön!
Kommentarformular sollte vor Kommentaren sein, ha! ..
Hallo Leute, ich frage mich, ob es eine Möglichkeit gibt, dieses Plugin in umgekehrter Reihenfolge zum Laufen zu bringen.
Wenn ich es zum ersten Mal benutze, funktioniert es, aber wenn ich zu dem benannten Anker komme, den ich zuerst in meiner Navigationsleiste angeklickt habe, und versuche, sanft nach oben oder weiter nach unten zu scrollen, ist es nicht mehr sanftes Scrollen.
Vielen Dank im Voraus. Tolles Plugin. Alles Gute!
Vielen Dank, es funktioniert super :)
Hallo,
Ich fragte mich, ob es eine Möglichkeit gibt, dies für Anker auf verschiedenen Seiten zum Laufen zu bringen?
Habe die Kommentare gelesen, konnte aber keine Lösung finden.
Beispiel:
<a href="faq.php#new" rel="nofollow">neue FAQ</a>sollte die Seite öffnen und sanft zum Anker scrollen.Auf derselben Seite funktioniert das Skript einwandfrei.
Hallo.. Schöne Arbeit.. Können Sie mir bitte sagen, wie ich dasselbe Div mit dem Maus-Scrollen lade.
Das könnte es sein, wonach Sie suchen. Diese Seite bietet ein Template, eine Parallax-Website mit "SMOOTH"-Scroll-Effekt zum Download.
http://iiiji.com/developing-parallax-smooth-scrolling-website/
Beim ersten Klick auf meinen Link scrollt er NIE sanft. Er funktioniert jedoch perfekt bei jedem anderen Mal (dem 2., 3., 4., 900., …). Ich vermute, es ist ein Problem mit der Lade-Reihenfolge? Jede Hilfe wäre sehr willkommen.
Ignorieren Sie meinen letzten Kommentar, am Code war nichts falsch. Das Problem wurde durch meine Browsereinstellungen verursacht…
Chris, danke für dieses großartige Skript. Aber es funktioniert nicht auf meinen mobilen Geräten. Wie kann ich das beheben? Unsere Seite ist responsiv, aber wenn ich die Fenstergröße auf weniger als 600px Breite ändere, funktioniert das Skript nicht mehr. Hat jemand eine Idee, wie man das beheben kann? Vielen Dank im Voraus!
http://elearning.theleansixsigmacompany.com/my-training/directions/
Vielen Dank für Ihre Hilfe! Das funktioniert so perfekt :))
Ich weiß Ihre Hilfe bei der Lösung von Designproblemen sehr zu schätzen.
Für jeden, der die Navigationsregisterkarten aktivieren möchte, wenn der Benutzer scrollt
Ich habe gerade eine Funktion hinzugefügt, die Navigationsregisterkarten aktiviert, während Sie scrollen & hier ist der Link mit dem Code, der mir geholfen hat.
http://codetheory.in/change-active-state-links-sticky-navigation-scroll/
Genial!!! Danke!!!
Ich habe das auf meiner Website verwendet, aber es funktioniert nicht … kann mir jemand sagen, warum?
Für diejenigen, die Bootstrap verwenden und die Störung mit anderen jQuery-Ankern wie Tabs stoppen möchten, hier ist ein schneller Fix.
Ändern Sie diese Zeile
Zu diesem
Fügen Sie dann die Klasse page-scroll zu Ihren a href-Tags hinzu.
Dies animiert nur a href mit der Klasse page-scroll
Ich habe (mit Hilfe) eine Auto-Scroll-Funktion in ein Widget in der Seitenleiste eingefügt. Ich möchte sie individuell für einige Beiträge hinzufügen, die eine andere Scroll-Geschwindigkeit benötigen. Ich kann beim besten Willen nicht herausfinden, wie. All diese Scroll-Codes hier und ich weiß nicht, wohin ich den Code überhaupt legen soll. In den CSS-Editor, in den Beitrag selbst? Offensichtlich weiß ich nicht viel über Code.
Ich habe es mit einem Widget-Shortcode herausgefunden und es funktioniert gut. Es ist ein Plug-in namens Widgetize Pages Light.
Der Code funktioniert hervorragend und war sehr einfach zu implementieren! Ich brauche jedoch Hilfe. Je nachdem, welcher Menüpunkt ausgewählt wurde, kann der Cursor des Benutzers nach dem Scrollen auf einem Bild mit einem Mouseover-Ereignis landen. Wenn das passiert, wird das Mouseover ausgeführt und ist wirklich nervig. Gibt es eine Möglichkeit, den Cursor an den linken Rand zu verschieben, damit der Cursor nicht auf einem Mouseover-Bild landet?
Funktioniert nicht, wenn html,body overflow:hidden hat
Ich verwende HTML5 und sehe, dass der Code funktioniert, wenn Sie ihn in den <body> vor dem Lesezeichen platzieren, also
Hat jemand Probleme mit der Verwendung des
:targetCSS-Selektors und diesem Code gehabt? Es schien meine Selektoren (die eine Animation auslösen sollten) zu ignorieren und alles funktionierte ohne das Skript.Hallo Mark,
Derzeit implementiere ich diesen Code mit
:target
CSS-Selektoren, und stelle fest, dass er das animierte Verhalten zum Anzeigen versteckter Divs bricht. Haben Sie eine Lösung gefunden?
Danke!
Schon gut! Habe es aus ein paar Kommentaren herausgefunden. Einfach hinzufügen
in der letzten if-Anweisung.
Du hast mir sehr geholfen, vielen Dank :) :)
Dieser Code funktioniert in Internet Explorer 8 und höheren Versionen nicht. . . Bitte helfen Sie….
Danke. Du bist perfekt!!!
Großartiges Beispiel, Chris! Ich habe (ein paar) Änderungen vorgenommen und eine benutzerdefinierte Angular-Direktive für wunderschönes, sanftes Scrollen erstellt. Danke!
Gibt es eine Möglichkeit, das Skript so zu ändern, dass es nach dem vollständigen Laden der Seite automatisch zum ersten Anker-ID scrollt?
Um all den Leuten zu antworten, die Konflikte haben, wie z.B. dass Bootstrap Tabs nicht mehr funktionieren oder es einen anderen Slider/Scroller kaputt macht. Die Lösung
Verwenden Sie rel, um ein sanftes Scrollen zu aktivieren, indem Sie das rel = ... einstellen.
Beispiel
<a href="#contact" rel="nofollow">nofollow? sollte natürlich scrollen.Und den Code ändern von
$('a[href*=#]:not([href=#])').click(function() {ZU
$("a[rel^='scrolling']").click(function() {Viel Glück!
Melroy
Ich bin gerade auf dieses Problem gestoßen und habe mir den Kopf zerbrochen, was zu tun ist. Aber das hat super funktioniert. Danke Melroy.
Hallo! Ich habe die Anweisungen befolgt, aber es funktioniert noch nicht. Keine Ahnung, was schief geht.
Hallo Davin,
Wie kann ich es dazu bringen, nur mit den Menüleisten-Links zu funktionieren? Der vorliegende Code stört die Tabbed Panels, die einen #-Link haben.
Wie füge ich eine Klasse in jeden ID-Abschnitt ein?
Hallo zusammen. Danke für eure Ideen und euren Code. Ich versuche, dies auf meiner Seite zum Laufen zu bringen, aber ich kann nicht herausfinden, wie ich das Scrollen etwa 160px unterhalb der aktuellen Stoppstelle im Beispiel anhalten lassen kann. Ich habe zum Beispiel einen Header, den ich immer anzeigen möchte, und das sanfte Scrollen sollte direkt unter diesem Header anhalten. Habe es über CSS #page-wrap versucht, auch an den verschiedenen #anchors-id, aber nichts davon hat funktioniert. Es scrollt immer ganz nach oben. Irgendeine Idee dazu? Vielen Dank im Voraus.
Hallo, ich habe es noch einmal versucht… etwas gefunden. Also nach weiterer Google-Suche zu diesem Thema denke ich, dass es etwas innerhalb des Javascripts sein muss. Die Sache ist, ich bin okay mit HTML, okay mit CSS, okay mit PHP (oder meistens…), aber kein Javascript-Geek.
Wie mache ich das richtig?
…
{scrollTop: targetOffset – 100}
…
Wäre das korrekt?
…
$(function() {
$('a[href*=#]:not([href=#])').click(function() {
if (location.pathname.replace(/^\//,"") == this.pathname.replace(/^\//,"") && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
if (target.length) {
$('html,body').animate({
scrollTop: target.offset().top-160
}, 1000);
return false;
}
}
});
});
…
Ich habe mein Menü als fest positionierte Punkte gestaltet. Gibt es eine schnelle Möglichkeit, eine aktive Klasse mit einem anderen Stil hinzuzufügen, so dass sich der Look des richtigen Punktes ändert, wann immer der Benutzer über den Abschnitt scrollt?
Es fehlt '='.
Sollte '===' anstatt '==' sein.
Ich habe den Code unten eingefügt.
/* Sanftes Scrollen */
Heiliger Strohsack, so einfach, so sauber! Vielen Dank!
Hallo. Ich bin neu in der Webentwicklung und versuche gerade, Ihren Code vollständig zu verstehen. Bevor ich diesen Beitrag gelesen habe, hatte ich ein sanftes Scrollen wie folgt codiert
Und um ein Scrollen zu einem bestimmten Element zu animieren
Ich versuche zu verstehen, warum Sie Code wie
if (location.pathname.replace(/^\//,"") == this.pathname.replace(/^\//,"") && location.hostname == this.hostname) {
var target = $(this.hash);
……..
Was ist der Zweck dieser Codezeilen?
Es hat perfekt auf meiner Website funktioniert!! Erstaunlich!
könnte mir jedoch jemand genau erklären, wie es funktioniert
Du bist fantastisch, Chris! Danke für diesen großartigen Schnipsel; er hat mir heute wirklich bei einer Aufgabe geholfen, die ich erledigen musste!
Es funktioniert brillant! Vielen Dank.
Hallo Leute. Meine Seite ist lovatotribe.com und das Skript funktioniert nicht :/ Was ist damit los?
versuchen Sie es mit document ready, das Skript lädt sich vor anderen Elementen und kollidiert möglicherweise mit dem Rest von js
Was ist document ready? Ich kenne mich nicht wirklich mit JS und Skripten aus
http://learn.jquery.com/using-jquery-core/document-ready/ aber wenn du nicht gut mit js bist, würde ich empfehlen, jemanden für 10 Dollar oder so dafür zu bezahlen, es gibt vielleicht Millionen von Gründen mit WordPress
Dies ist das einzige, was auf meiner Website jQuery benötigt, und deshalb versuche ich eine reine JS-Lösung zu finden, damit ich jQuery für meine Seite nicht mehr verwenden muss, aber ich konnte nichts finden, das überhaupt so flüssig ist wie die jQuery-Lösung. Was ist es an jQuery, das es so viel flüssiger scrollen lässt, und kennt jemand eine gute JS-Lösung?
Super, es funktioniert. Ich liebe dich. haha
Dieses Skript ist fantastisch.
Wow, hat bei mir super funktioniert! Ich arbeite gerade daran, die erstaunliche Seitenleiste auf der Bootstrap-Seite (http://getbootstrap.com/components/) nachzubilden, und das ist ein super hilfreicher Schritt. Danke!
Kann dasselbe getan werden, wenn Hash-URL verwendet wird?
z.B. "css-tricks.com/examples/SmoothPageScroll/#two"
Ich habe eine Seite mit einem Inhaltsverzeichnis und war auf der Suche nach einer Lösung für das Problem, dass Ankerlinks in der Historie auftauchen (wenn der Benutzer „Zurück“ drückt, gelangt er nicht tatsächlich „zurück“, sondern nur durch seine Reise auf der Seite).
Nach zwei Stunden Herumprobieren mit JavaScript window.location und scrollTo habe ich diesen einfachen und perfekten Code gefunden, also vielen Dank, Vielen Dank, VIELEN DANK.
Wenn jemand Probleme mit einem festen Menü hat, indem es zu einem Abschnitt scrollt und dann zurückscrollt, wenn man denselben Link erneut anklickt, ändert man einfach target.offset().top in document.querySelector(this.hash).offsetTop.
Wird so aussehen.
Haben Sie irgendwo in Ihrem CSS
overflow: hiddenverwendet? Selbst wenn overflow-x verwendet wird, kann dies dazu führen, dass der Scroll überhaupt nichts bewirkt. Es hat für mich funktioniert, es zu entfernen!Chris, wenn ich einen Vorschlag zur Barrierefreiheit machen darf, lohnt es sich, dies zu ändern, um den Fokus für die Tastatur zu integrieren und die URL zu aktualisieren.
Referenz
http://www.sitepoint.com/learning-to-focus/#the-result
Für diejenigen, die Probleme mit hervorgehobenen Elementen nach dem Scrollen haben, fügen Sie einfach Folgendes direkt vor return false hinzu
document.selection.empty();
return false;
Ich habe eine Website, bei der die Größe der Divs geändert wurde. Wenn solche Divs neu positioniert werden, erhalten sie eine neue Position. Wenn ein solches Skript nicht funktioniert, funktioniert dieses Glättungsscrollskript nicht. Bitte helfen Sie mir. Vielen Dank.
Vielen Dank, es funktioniert großartig!
SquirFly, vielen Dank!
Ich habe dies meiner mit Weebly erstellten Website hinzugefügt (ich bin ein Anfänger). Es funktioniert. Das Problem, das ich habe, ist, dass es zum Abschnitt springt. Ich kann es nicht zum Scrollen bringen. Es ist eine Animationsabfrage zum Easing geladen. Die Webseite ist http://www.jrs-spiceco.com
Kostenlose Gewürze für jeden, der mir helfen kann, dies zu lösen.
Als ich die Seite in Safari aufgerufen hatte, funktioniert das Scrollen nach unten jetzt auch in Chrome. Es scrollt jedoch nicht langsam nach oben zurück.
Musste neu laden, weil ich versucht hatte, klebrige Inhalte hinzuzufügen. Jetzt kann der Scroll nichts anderes als springen.
Hallo
Wenn ich „return false“ in „return true“ ändere, blinkt meine Seite jedes Mal, wenn ich auf ein Menü klicke.
Gibt es eine Lösung?
Falls jemand dieses Problem hat. Die Verwendung dieses codesite-weiten Codes auf einer Bootstrap-basierten Website führte dazu, dass Bootstrap-Akkordeons nicht mehr funktionierten (alles, was # im href verwendet). Meine Lösung war jedenfalls, dies hinzuzufügen
In Zeile 2 des Snippets.
#accord ist der Anfang des #, den ich verwendet habe, um jedes Akkordeon auszulösen, wie
Es ist WordPress, also
Ausgaben #accord2126 (oder was auch immer die Beitrags-ID ist)
Die neue Zeile im Smooth Scroll ignoriert dann alle #, die mit #accord beginnen, und jetzt funktionieren meine Akkordeons :)
Natürlich werden auch alle anderen #, die mit #accord beginnen, ausgeschlossen
Vielen Dank, Vanv, für diesen Trick. Ich habe danach gesucht und es hat mir Zeit gespart. Es funktioniert jetzt mit allen Bootstrap-Sachen, die Konflikte hatten.
Nochmal vielen Dank! :)
Hallo
Das Skript funktioniert gut,
aber wenn ich auf einen Link zu einem h2-Tag klicke, springt es hinter das h2. nicht genau zu dem h2, wo es sein sollte.
Irgendwelche Gedanken/Vorschläge, wie man dies nach dem „Anzeigen“ eines Zusammenbruchs auslösen kann?
Unter Verwendung von Bootstrap 3 sollte das Ereignis shown.bs.collapse verfügbar sein, ich bin mir nur unsicher, wie man das am einfachsten macht.
Danke für das Teilen! Und nochmals vielen Dank an vanv, der mich in die richtige Richtung gewiesen hat, um meine Seite nicht zu zerstören (ich hätte die schlechte Interaktion mit Akkordeons komplett übersehen). Exzellenter Beitrag! :)
Großartig! Vielen Dank! jQuery.scrollTo funktioniert nicht mit dem mobilen Menü, aber Ihr Skript läuft.
Danke! Es war sehr hilfreich für mich :)
Hallo,
hat jemand ein Problem mit Bootstrap Dropdown-Toggle?
Mein Menü schließt sich nicht, nachdem ich auf einen Link geklickt habe.
Fügen Sie den obigen Code in einen obigen Code-Tag ein.
Der HTML-Code: Beliebiger Text, den Sie wünschen
#contact ist mein Anker-Tag, und Sie sollten ihn ändern, je nachdem, wohin Sie auf der Website springen möchten.
Hallo Chris,
Sie sollten vielleicht einen Hinweis hinzufügen, dass Sie den hier geposteten Code NICHT verwenden können, wenn Sie sich um Barrierefreiheit sorgen. Dies kapert das normale Browserverhalten und setzt den Fokus (selbst wenn Sie tabindex="-1" setzen) nicht auf das Div mit dem Anker. Die Referenz-URL enthält einige Versionen, die barrierefrei implementiert werden können.
Danke! :)
Hallo, ich habe dieses Tutorial versucht, auf meiner Website anzuwenden, die auch diagonales Scrollen beinhaltet (ich habe 'scrollLeft:target.offset().left' in js hinzugefügt). Es funktioniert perfekt, bis ich 'overflow:hidden' in meinem CSS hinzufüge. Es wurde bereits mit '$.noConflict();' beantwortet, aber es funktioniert irgendwie nicht für meinen Code. Kann mir jemand bitte helfen, den Code mit 'overflow:hidden;' in meinem CSS zum Laufen zu bringen? Vielen Dank.
Hallo nochmals,
Ich habe ein paar Dinge in meinem Code geändert und es funktionierte einwandfrei. Ich verwende ‘$.noConflict();’ nicht mehr. Ich habe alle ‘$’ in ‘jQuery’ geändert und die ‘overflow’-Eigenschaft in meinem CSS für body{} auf ‘hidden’ geändert. Und der Code funktioniert genau so, wie ich es wollte. Vielen Dank, Ihr Code hat mein Projekt gerettet!
Außerdem, für diejenigen, die ein Scrollen in einem bestimmten Bereich Ihrer Website wünschen, fügen Sie einfach eine Höhe und ‘overflow:auto;’ in das CSS für diesen Abschnitt hinzu.
Und ja, ich habe an Devins Code gearbeitet.
Viele Grüße Chris und Devin.
Dies scheint nicht zu funktionieren, wenn der Ankerlink ein "."-Zeichen enthält. Ich habe versucht, es in meine Webvorlage zu integrieren, und die Unterabschnittslinks im Inhaltsverzeichnis (erstellt von pyHat) enthalten "." für die dieses Skript nicht funktioniert. Es funktioniert für den Rest der Links. Jeder Vorschlag wäre willkommen.
Noch nie Codepen benutzt, es ist super... jedenfalls...
Ich habe ein Beispiel für dich erstellt, das du verwenden kannst...
Ich bin Brasilianer, also falls ich etwas Falsches gesagt habe, ignoriere es einfach haha'
http://codepen.io/anon/pen/avdeqx
(habe nicht alle Kommentare gelesen, weiß also nicht, ob es schon jemand gesagt hat)
Viele Benutzer werden Sie dafür hassen, dass Sie das Standard-HTML-Verhalten durch dieses JavaScript ersetzen. In diesem Artikel sollte ein großer Haftungsausschluss stehen. Solche Dinge sollten nicht getan werden. Dies ist eine grundlegende Funktionalität, ändern Sie sie nicht.
Wenn zwei Links mit demselben „href anchor tag“ auf der Seite sind, scrollt die Seite nach oben und wieder zum Anker-Tag, anstatt einfach am Anker-Tag zu bleiben.
Irgendwelche Ideen, wie man sie am selben #Anker-Tag halten kann?
http://testing.apliiq.com/custom/pocket-tees/crew-neck-pocket-tees
Hallo, wie kann ich es auf meine Website stellen. Ich bin ein Anfänger, also weiß ich nicht, was ich tun soll, und ich bin wirklich verwirrt -_-
Danke für den Code, funktioniert wunderbar.
Ist es möglich, eine Klasse vom Scrollen auszuschließen? Danke
Ich habe ein Plugin dafür erstellt, das Popmotion anstelle von jQuery nutzt
https://github.com/Popmotion/scroll-to
Hallo Chris,
Ich habe diesen Code verwendet und er funktioniert perfekt. Aber ich habe bemerkt, dass er mit einer neuen Version von jQuery nicht funktioniert. Haben Sie einen neuen aktualisierten Code, der mit der neuen Version von jQuery funktioniert?
Hey alle, ich hatte ein Problem mit dem Überspringen der Seite, wenn ich versuche zu scrollen, während jQuery animiert. Ich habe ein kleines Stück Code hinzugefügt, um die Animation bei Benutzerinterferenz (Maus-Scroll, Pfeile nach oben oder unten usw.) abzubrechen.
Anstatt "Top" verwende ich einen Font Awesome Chevron, wie könnte ich in den Originalcode einen Ein-/Ausblende-Aspekt an einem bestimmten Seitenpunkt für dieses Symbol integrieren?
Danke
An den Autor, du bist Gott. Das hat mir den Tag gerettet! Bitte machen Sie weiter so.
Hey, das ist sehr nett. Danke!
Hallo,
Ich habe einen festen Header und möchte, dass er bis zum unteren Rand des Headers scrollt. Dies wird durch Franks Antwort oben angesprochen, aber ich verstehe nicht, wie die Codes kombiniert werden können.
Vielen Dank für jede Hilfe.
Ich habe zu früh gesprochen, ich habe es herausgefunden.
Hey,
Ich habe versucht, dies mit einem Dropdown-Menü zum Laufen zu bringen, aber ich habe es nicht geschafft. Irgendwelche Ideen, wie man es zum Laufen bringt?
Kommentar von SquirFly funktioniert.
Vielen Dank!
funktioniert perfekt, danke!
$ und animate sind keine nativen JS-Funktionen, dieses Beispiel funktioniert nicht!
Wenn Sie WordPress oder eine neue jQuery-Version verwenden, ändern Sie einfach alle $-Zeichen im Code-Snippet in „jQuery“, und es sollte funktionieren. Sie können die WP-Version von jQuery verwenden und müssen keine alte Version einbetten, um das $-Symbol zu unterstützen.
Ich hoffe, sowohl Smooth-Scrolling als auch :target-Tricksereien einzusetzen, aber die Smooth-Scroll-Technik entfernt das #Anker aus der URL, sodass das :target nicht ausgelöst wird. Irgendwelche Ideen zur Behebung?
http://emdac.org/chest-pain.html
Die Referenzlinks sind das, was ich richtig zum Laufen bringen möchte.
Nützlich!
Vielen Dank! Ihre Anweisungen funktionierten einwandfrei.
Hallo
Die verschiedenen Entwicklungen des Skripts funktionieren einwandfrei (zumindest als Endeffekt). Was ich freundlich fragen möchte, ist, wenn ich auf den Link klicke, der zurück nach oben führt, wird in der Adressleiste die Homepage-URL mit dem #namelink ergänzt
Gibt es eine Lösung, um dies zu vermeiden? Oder sollte es nicht erscheinen?
Vielen Dank
Robert
Wenn Sie eine statische Navigationsleiste haben, wird Ihr Ankertext wahrscheinlich davon verdeckt. Ich habe dies geändert, indem ich 70 vom Scrolltop abgezogen habe.
Ich habe auch die 1000 auf 500 geändert, um die Animation etwas zu beschleunigen (eine halbe Sekunde statt einer ganzen Sekunde).
Bootstrap gibt Akkordeonfehler, bitte helfen Sie :(
Perfekt.. funktioniert gut.
Vielen Dank
Hey, ist mir gerade aufgefallen, das funktioniert nicht mit jQuery 1.12.0 (was die neueste HTML5-Boilerplate verwendet).
Funktioniert einwandfrei mit 1.11.0. Ich dachte, ich lasse es Sie wissen!
Prost.
@Devin Sturgeon :- Danke für den Code, hat für mich gut funktioniert!
Hier ist eine etwas schönere Version des Clips
Danke, Bruder, es funktioniert.
Vielen Dank! Funktioniert super
Hey, ich habe mich gefragt, ob ein Wert von 'target' abgezogen werden könnte, um das Scrollen früher zu beenden, als es sollte. Zum Beispiel
Ziel = Ziel – 80;
um das Scrollen 80px früher zu beenden. Ich habe versucht, dies eine Weile herauszufinden, hatte aber keinen Erfolg, irgendwelche Ideen?
Vielen Dank :)
Vielen Dank für das Teilen, es funktioniert großartig.
Nur zur Info! Wenn jemand einen JS-Fehler bekommt
Uncaught Error: Syntax error, unrecognized expression: a[href*=#]:not([href=#])
Ich habe geändert
a[href*=#]:nicht([href=#]zu
'a[href*=\\#]:not([href=\\#])'Es erschien auf einer WordPress-Seite, die ich mit Update 4.5 pflege
Du hast mir gerade das Leben gerettet, Mann. Nach dem Update auf 4.5 funktionierten die Hälfte meiner Skripte nicht mehr. Ich habe das Problem auf dieses hier eingegrenzt, gesucht und ZACK – du hattest die Antwort. Vielen Dank!
Besser: Anführungszeichen verwenden
a[href*=”#”]:nicht([href=”#”])
https://github.com/jquery/jquery/issues/2824
https://www.w3.org/TR/css3-selectors/#attribute-selectors
DANKE!!!!!
Es funktioniert nur, wenn ich nach unten scrollen muss, aber es funktioniert nicht, wenn ich nach oben gehen muss?
$(function() {
$('a[href*=#]:not([href=#])').click(function() {
if (location.pathname.replace(/^\//,"") == this.pathname.replace(/^\//,"") && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
if (target.length) {
$('html,body').animate({
scrollTop: target.offset().top
}, 1000);
return false;
}
}
});
});
Wenn Sie WordPress verwenden und auf Version 4.5 aktualisieren, stellen Sie sicher, dass Sie die Sonderzeichen in der ersten Zeile escapen, um Fehler zu vermeiden. Kurze Zusammenfassung dazu hier: https://www.wpcover.com/upgraded-wordpress-4-5-syntax-error-unrecognized-expression/
Ich habe Ewigkeiten damit verbracht, eine jQuery-Lösung dafür zu finden, die tatsächlich im Internet Explorer funktionierte und nicht einfach zum # sprang.
Vielen Dank!
YO, DAS HAT IM ERSTEN SEKUNDEN VERSUCH FUNKTIONIERT
Aus irgendeinem Grund hat dies auf meiner Website mit dem WordPress 4.5.2 Update aufgehört zu funktionieren.
Alle meine anderen Skripte in derselben JS-Datei funktionierten weiterhin.
Vielen Dank!
Schön
Ich verstehe wirklich nicht den Sinn, ein Tutorial nur für Leute zu machen, die bereits wissen, wie man Javascript benutzt. Ich weiß nicht, wie man Javascript benutzt und dieses Tutorial sagt mir nichts, Konsequenz? Es ist sinnlos. Ich nehme deinen Code, ich füge ihn dazwischen ein, aber er funktioniert nicht, weil du, offensichtlich, etwas als selbstverständlich betrachtest.
Ich verstehe nicht den Nutzen, den geteilten Code (da sich der Code ändern kann) auf diese Weise zu kritisieren, umsonst. Ich sehe nicht, wo "Tutorial" steht, wo "damit lernen Sie JavaScript" steht. Es ist ein Snippet, kein Tutorial. Und es geht nicht davon aus, dass es für jeden einfach ist (obwohl dieses einfach ist). Und noch einmal, kostenloses Teilen des Autors, also vielleicht mehr Respekt und RTFM. Sie werden wütend, weil Ihr "Copy-Paste" ohne Mühe, wahrscheinlich auf einem fertigen WordPress-Theme oder ähnlichem, nicht funktioniert? Wirklich? Komm schon! :)
Kein Nutzen – nur Frustration. Vielen Dank an @css-tricks.com für eure großartige Arbeit! Zum Glück gibt es nicht so viele Leute wie Elena, die eure Arbeit respektlos behandeln (wie Diego sagte, umsonst).
@elena wenn du kein Javascript kannst, dann geh studieren oder nimm Online-Lektionen. Sobald du die Grundlagen kennst, wirst du verstehen, wie man dieses Skript hackt. Dies ist ein SNIPPET und kein TUTORIAL. Sei respektvoll gegenüber der Arbeit, die andere für die Gemeinschaft leisten.
Ist es möglich, dies zu tun, wenn Ihre Website horizontales Scrollen ermöglicht? Scheint nicht zu funktionieren, es funktioniert nur, wenn die Website vertikales Scrollen ermöglicht.
Ich benutze dieses Skript (Danke Chris!).
Ich habe niemanden gesehen, der das gepostet hat, also hier ist es.
Wir müssen die "#"s escapen, um Fehler zu vermeiden. Aktualisieren Sie die Abfrage auf diese
$("a[href*=\\#]:not([href=\\#])").click(function() {…
ziemlich gut, hat bei mir funktioniert
Hallo Chris,
Es funktioniert perfekt für meine Webseite, danke für das Teilen des Codes..
Hallo,
Ich habe eine Frage
Ich habe einen festen Header auf meiner Website.
Jetzt sollte der Scroll 100px vor dem Anker stoppen. Ist das möglich?
Danke.
Mit freundlichen Grüßen.
Bernd M.
Fügen Sie einfach einen Pixelwert am Ende der scrollTop-Zeile hinzu.
z.B. scrollTop: target.offset().top – 100
Danke, Callum!
Es funktioniert.
Ich habe versucht, es mit horizontalem Scrollen zum Laufen zu bringen, aber ohne Erfolg. Irgendwelche Vorschläge?
Es hat wie ein Zauber funktioniert! Vielen Dank!
Ich bin ein absoluter Neuling. Vielen Dank für den Code. Funktioniert super!
Aber ich habe einen Konflikt in Verbindung mit jQuery Popup Overlay. Die Scrollfunktion deaktiviert das Popup. Ich denke, es könnte daran liegen, dass beide Funktionen haben, die nicht benannt sind. Ich bin verwirrt über das Benennen von Funktionen.
Wie würde ich Ihre Funktion benennen und sie dann ausführen?
Hallo! Exzellenter Code.
Kann mir jemand helfen, wie ich dieses Snippet mit BS Carousel verwenden kann? Es verwendet auch Hashes, und jedes Mal, wenn ich versuche, die linke oder rechte Taste am Karussell zu drücken, rutscht es nur ein wenig nach oben, wo das Div beginnt.
Kann jemand etwas raten?
Selbst Neuling ;)
Kann jemand eine reine CSS-Lösung dafür geben?
Danke Chris. Hier ist mein Beitrag – dynamische Beschleunigung der Scrollzeit in Abhängigkeit von der gescrollten Distanz, unter Berücksichtigung der Distanz des Zielelements von oben. Max- und Min-Scrollzeit nach Bedarf ändern.
Geniales Snippet!
@mrhorse, ich habe deine Version verwendet. Zuerst dachte ich, es würde andersherum nicht funktionieren (sanftes Scrollen zurück auf der Seite); dann habe ich den Wert von baseMinScrollTime auf den gleichen Wert wie baseMaxScrollTime geändert und... voila!
„Mein Beispiel„
Ich werde versuchen, es in ein Projekt zu integrieren, das mit Bootstrap-Komponenten beladen ist ... also werde ich die verschiedenen Vorschläge, die in diesem Thread gepostet wurden, für solche Situationen testen.
Nochmals vielen Dank, @mrhorse... und dir auch, @Chris.
Ess
Ok... es funktioniert also nicht in einem Joomla!-Projekt, an dem ich arbeite. Habe versucht, es vor , vor , in den benutzerdefinierten Javascript-Bereich zu setzen... nichts.
Jede Hilfe dazu wäre sehr willkommen.
Ess
Danke Chris, funktioniert super!
Mit freundlichen Grüßen
Ronald
Dieses jQuery-Snippet begleitet mich schon immer. Ich liebe sanftes Scrollen. Ich habe das Snippet einfach in mein init.js-Skript eingefügt, das beim Laden des Dokuments ausgeführt wird.
In einer Website, die ich mache, habe ich das materialisierte CSS/JS implementiert, und die jQuery-Funktion, die mein Menü beim Klicken auf einen Menüpunkt schließt, all dies ist innerhalb von jQuery in meinen Skripten. Sobald ich dieses Snippet jedoch zu meinen Init-Skripten hinzufüge, bleibt mein Menü auch nach dem Klicken auf meinen Menüpunkt geöffnet. Ich habe nach Fehlern in Firebug gesucht, ohne Erfolg. Ich weiß, dass es daran liegt, dass etwas in dem jQuery-Snippet dies verursacht, weiß nur nicht, was es sein könnte, irgendwelche Vorschläge?
Dank an Chris Coyier & Devin Sturgeon,
Es funktioniert einwandfrei, es müssen keine Änderungen am Code vorgenommen werden.
Vielen Dank dafür. Es hat bis vor kurzem gut funktioniert. Jetzt, beim ersten Klick, scrollt es etwa 700px über den Abschnitt, zu dem es scrollen sollte. Alle nachfolgenden Klicks scrollen zur richtigen Position, nur der erste Klick ist seltsam.
Verwendet jQuery 3.1.0 und WordPress 4.6.1
Danke Charlotte :) Ich musste jedoch den Kompatibilitätsmodus verwenden, um es in WP zum Laufen zu bringen – alle "$" Zeichen durch "jQuery" ersetzt.. Verwende WordPress 4.6.1–en_GB .. seltsam .. aber ich habe keine Ahnung, was ich tue ; )
Das funktioniert wirklich gut für mich. Danke Chef
Fantastische Arbeit. Danke fürs Teilen!
Obwohl eine Referenz für den Code für jQuery gegeben ist, könnte mir jemand sagen, wie ich ihn mit JavaScript (window.scrollBy) einfügen soll…
Anscheinend scheint das Anwenden von onclick auf eine Funktion, die (window.scrollBy) enthält, nicht zu funktionieren... irgendwelche Vorschläge?
Mir ist aufgefallen, dass es ein Problem mit dem bereitgestellten Code gibt, da er speziell bei mir nicht funktioniert hat. Insbesondere die erste Codezeile
$(‘a[href*=”#”]:not([href=”#”])’).click(function()
Nun, dieser Selektor ist ungültig. # ist ein Sonderzeichen und muss wie a[href*=\#]:not([href=\#]) escaped werden
siehe https://api.jquery.com/category/selectors/
Ich hoffe, es hilft jemandem irgendwo
Entschuldigung, eigentlich sollte es wie a[href*=\#]:not([href=\#]) mit diesen \ vor dem # sein
Wenn das # nicht in Anführungszeichen stünde, ja, es müsste mit einem / maskiert werden, aber im hier bereitgestellten Code ist es in Anführungszeichen und muss daher nicht maskiert werden. Schauen Sie sich die funktionierende Demo am Ende der Seite an.
Danke Freund :)
Wie bekomme ich das mit einem Button-Klick zum Laufen, das funktioniert nur mit einem Anker-Tag
Gibt es hier einen Code, der die Anker-URL-Funktionalität nicht unterbricht?
Der Code im Beitrag fügt kein #location am Ende der URL hinzu, und die, die es tun, unterstützen keine Vor-/Zurück-Funktion.
Sie sind alle kaputt.
Hallo Chris,
Wenn die Seite mit Lazyload (Bilder) scrollt, ist der Scroll an der falschen Position
Dann ist der Code für Lazyload falsch, Sie sollten Bildhöhe und -breite in den img-Tag-Attributen hinzufügen, damit es bereits den entsprechenden Platz einnimmt.
Der Code funktionierte einwandfrei. Ich habe den Code einfach kopiert und keine Änderungen vorgenommen, und er funktionierte perfekt.
Aber warum gibt es auf dieser Website keine Paginierung für die Kommentare!! Ich musste zum Ende dieser Seite kommen, um diesen Kommentar zu schreiben.
Es wäre schön, wenn der Abschnitt „Kommentar hinterlassen“ oben wäre oder es eine Paginierung gäbe.
Ich verwende Shopify – Debut-Theme. Ich möchte ein sanftes Scrollen zu einigen Abschnitten auf der Startseite haben. Habe die notwendigen Ankerpunkte eingerichtet, derzeit springt der Menü-Button zu den einzelnen Abschnitten anstatt sanft zu scrollen.
Habe den folgenden Code in theme.liquid eingefügt, aber es funktioniert bei mir nicht.
Danke, ich benutze deinen sanften Effekt, es ist so einfach.
Hallo,
Dieser Code funktioniert erstaunlich gut! Das einzige Problem, das ich damit habe, ist jedoch, dass er mein Bootstrap-Modal aus irgendeinem Grund überhaupt nicht funktionieren lässt.
Irgendwelche Ideen, warum / wie man das umgehen kann?
Danke,
Alex
Ok… im Anschluss an meinen Kommentar vom 30.10.16 freue ich mich, sagen zu können, dass ich es in meinem Joomla!-Projekt zum Laufen gebracht habe. Ich musste das Skript nur in $(document).ready(function() {code here}) einschließen.
Nochmals vielen Dank, dass Sie mein Coding-Leben ein wenig einfacher gemacht haben.
Ess
Nun, obwohl dies wie eine einfache Lösung aussah, wird es mit Ihren Frameworks wie Bootstrap, die Anker verwenden, in Konflikt geraten.
Es wird auch der Grund sein, warum Sie Probleme mit Menüs, Modalen und anderen Skripten haben, die einen Anker verwenden.
Zum Beispiel funktionieren die BS-Tabs mit diesem Code nicht.
Schade, aber für mich nicht nutzbar.
Das Skript funktioniert großartig, aber nur, wenn ich das defer-Attribut von meinem Skript-Tag entferne. Das async-Attribut führt auch dazu, dass das Skript nicht mehr funktioniert. Gibt es eine Möglichkeit, dies mit einem dieser Attribute zum Laufen zu bringen?
Ich glaube, die richtige Version ist
$(document).scrollTop($(document).scrollTop() + $(‘a[name=”target”]’).offset().top)
Es funktioniert auch auf Mobilgeräten!
Hallo Chris,
Ich habe ein Problem mit dem Code festgestellt. Es funktioniert gut, wenn Sie nur einmal auf die Navigationsleisten klicken, aber das Problem tritt auf, wenn Sie mehrmals klicken. Zum Beispiel - es gibt 5 Navigationslinks (feste Position oben). Nehmen wir an, Sie klicken 10 Mal auf den 3. Link und klicken dann schnell auf den 5. und dann auf den 2. oder andere Links in der Reihe. Dann scrollt die Seite nicht oder reagiert nicht so schnell, sobald Sie auf andere Navigationsleisten klicken, nachdem Sie auf die zuerst geklickte Navigationsleiste geklickt haben. Sie wartet einige Zeit nach mehreren Klicks auf die zuerst geklickte Navigationsleiste, so als ob sie diese Mehrfachklicks noch zählt, und dann zählt sie diese Klicks auf andere Navigationsleisten. Ihre gesamte Seite beginnt, je nach Ihren Klicks und Zielen auf der Seite, hin und her zu animieren.
Bitte geben Sie eine Lösung für das Problem an.
Ich hoffe, ich bin klar, wenn nicht, können Sie gerne fragen.
danke
Wie würden die oben genannten Scroll-Lösungen mit zusätzlichen Ereignissen funktionieren? Nehmen wir zum Beispiel an, bei onClick() wollte ich a.) reibungslos zu einer bestimmten Position auf der Seite scrollen und b.) andere Elemente ausblenden? Vorbei sind die Zeiten, in denen man einfach Seitenanker einrichtete und einfach auf einen Link klickte, um mit einfachem HTML reibungslos zum Ort zu scrollen. Wie Faser macht mich das traurig.
Das andere, was mir an diesem Ansatz aufgefallen ist, ist, dass der Anker nach dem Klicken auf den Link im "aktiven" Zustand bleibt... Hmmm
Mann, das ist großartig! Geniale Arbeit!
Eine kurze Frage an jeden, der helfen kann.
Ich habe die Animationszeit geändert und es ist mir nicht gelungen, das Scrollen zu verlangsamen... entschuldigen Sie, ich hatte keine Zeit, mich selbst tiefer damit zu beschäftigen, aber ich hoffte, jemand wüsste die Lösung dafür?
Eine der einfachsten Möglichkeiten aus CSS – fügen Sie das Überlauf-Attribut zum Body-Element hinzu und setzen Sie dann das Scroll-Verhalten auf smooth. Funktioniert gut in FF :)
Hallo, ich weiß, dass dies ein sehr alter Beitrag ist, aber können Sie erklären, wie man dies ausführt, wenn ich den href wie
<a href="/#anchor">Anchor Text</a>habe, denn wenn ich dasselbe ohne den Schrägstrich habe, funktioniert es einwandfrei<a href="#anchor">Anchor Text</a>. Sehen Sie hier die Disparität. Ich würde es wirklich schätzen, wenn es eine einfache Lösung dafür gäbe.https://jsfiddle.net/ayanize/vu5bxh85/3/ – funktioniert nicht
https://jsfiddle.net/ayanize/sc92tL8L/23/ – funktioniert
Vielen Dank für den schönen Artikel übrigens.
Soweit ich weiß, ist
<a href="/#anchor" rel="nofollow">kein korrektes HTML.<a href="#anchor" rel="nofollow">– Korrekt<a href="/link_to_another_page" rel="nofollow">– Korrekt<a href="/#anchor" rel="nofollow">– FalschHallo,
Ich habe den Code auf meiner Seite verwendet und er funktionierte auf Anhieb. Aber ich habe eine Frage: Wenn ich auf einen Link klicke, wählt das Skript automatisch den Abschnitt aus, auf den er verlinkt ist. Das gefällt mir nicht, gibt es eine Möglichkeit, die Auswahl zu verhindern?
Vielen Dank.
Hallo, mir ist das gleiche Problem aufgefallen. Wenn Sie die folgenden Zeilen auskommentieren/entfernen, wird der Fokus entfernt. Ich weiß jedoch nicht, wie sich dies auf den Rest der Funktionalität auswirkt, aber es scheint zumindest für mich zu funktionieren :)
Funktioniert perfekt für In-Page-Links.
Was ist mit URLs? Ich bekomme es nicht zum Laufen auf Links zu anderen Seiten
z.B. /new-page.php#bottom
Ist das möglich?
Fügen Sie dies vor „return false;“ hinzu, um die Browser-URL zu aktualisieren.
window.location.hash = this.hash;Ist es möglich, reibungslos zu Ankerlinks zu scrollen, die sich in einem Div mit overflow-x: hidden befinden? Ich möchte einen Slider erstellen, bei dem das Klicken auf eine Schaltfläche zum nächsten Ankerlink scrollt. Das sanfte Scrollen erfolgt jedoch auf der Fenster-Scrollleiste, nicht auf der Scrollleiste des Divs mit overflow: hidden.
In der neuesten Version von Chrome verursacht die Smooth Scroll mit jQuery-Version des obigen Codes einen dicken, blauen Rahmen um das Element, das die Ankerquelle eines Hash-Links ist.
Wenn ich also auf einen Link mit einem Hash-Zeichen klicke, springt er mich gut zu diesem Abschnitt, platziert dann aber einen blauen Rahmen darum. Dies geschieht nur in Chrome. Die anderen Browser scheinen dies nicht zu tun.
Irgendwelche Ideen, warum? Ich möchte die ::focus-Outline nicht global ausblenden, aber das ist die einzige Möglichkeit, die ich sehe, um dies zu umgehen und den Code weiterhin funktionieren zu lassen.
Ja, es ist die focus()-Funktion. Einfach weiterhin mit CSS die
element::focus{
etwas für die Outline
}
…oder entfernen Sie den Code, der den Fokus setzt.
Tina, entferne nur diese Zeile: “$target.attr(‘tabindex’,’-1′);” ;)
Ich habe dies meiner Seite hinzugefügt, und ja, es scrollt jetzt reibungslos zur angegebenen Ankerposition auf derselben Seite.
Aber das ist nicht das, was ich brauche.
Ich möchte, dass der Link zuerst geöffnet wird (so dass er zur Seite mit dem Artikel gelangt) und dann nach unten zu diesem spezifischen Artikel scrollt. Im Moment scrollt er nur zur Ankerposition und scheint sich um alles vor dem Anker-Hash nicht zu kümmern. Ich verwende #g-mainbar als Anker (gantry5 / joomla)
Beispiel meiner Navigationsmenü-Links
1 -“http://www.xxx.nl/development/diensten/dienst1#g-mainbar”
2 -“http://www.xxx.nl/development/diensten/dienst2#g-mainbar”
3 -“http://www.xxx.nl/development/diensten/dienst3#g-mainbar”
Wenn ich also auf der Startseite bin und Informationen über „dienst2“ lesen möchte, drücke ich Menü-Button 2. Die Seite sollte geladen werden, und dann muss sie zu diesem Artikel scrollen. Ich brauche dieses Verhalten, weil sich oben auf jeder Seite ein Vollbild-Header-Bild befindet. Ich möchte, dass es etwas mehr Animation gibt, wohin der Benutzer tatsächlich navigiert hat.
Stefan, ich brauche dasselbe... hast du das jemals herausgefunden?
Ein paar Dinge, um die Sache etwas reibungsloser zu gestalten...
1) Die meisten Websites haben eine Navigationsleiste oder etwas Ähnliches, das versetzt werden muss. Sie können einen leeren Link als Anker in Ihr CSS einfügen, wie folgt:
2) Der bereitgestellte Code setzt den Hash nicht zurück, daher habe ich diese Zeilen über jQuery hinzugefügt
dann... nach dem Scrollen, füge diese Zeile hinzu...
Versuch das hier
Es scheint, dass in der neuesten Version von Chrome ein Fehler vorliegt, der dazu führt, dass das Scrollen springt, wenn Sie einen Offset (für eine feste Navigationsleiste) haben. Dies scheint ein Problem mit dem Fokus zu sein, dieser Codeblock
Hat jemand eine Abhilfe?
Danke!
Selbes Problem hier, ich habe es umgangen, indem ich eine Funktion erstellt habe, die jedes Scrollen bei Fokus abbricht.
Sie können dann .focusNoScroll() anstelle von .focus() verwenden, um auf das Element zu fokussieren, ohne dazu zu scrollen.
Falls es jemandem hilft, hier ist mein vollständiger Code, der das oben Genannte verwendet, die Höhe meines festen Navigationsheaders (die sich beim Scrollen und responsiv ändert) berücksichtigt und den Scroll entsprechend versetzt. Nach meinem Wissen funktioniert er wie erwartet.
Vielen Dank, kann bestätigen, dass dies für mich funktioniert!
Sehr nützliches Skript!
Da es sich beim Scrollen kurzer Strecken etwas langsam anfühlte, habe ich eine Art willkürlich berechnete Formel hinzugefügt, um die Scroll-Zeit relativ zur Entfernung zu verringern.
Wie füge ich einen sanften Scroll-Effekt zum Inhaltsverzeichnis (TOC) hinzu, wenn darauf geklickt wird?
Hallo. Es funktioniert perfekt, aber eine Frage: Ist es möglich, den aktiven Menüpunkt beim Klicken oder beim Seiten-Scrollen festzulegen?
Dieser Code funktioniert auf Shopify.
Beachten Sie, dass Sie für Shopify aus irgendeinem Grund benutzerdefinierte Skripte direkt vor dem schließenden Tag hinzufügen müssen.
Ich habe diesen Code auf einer französischen Website verwendet.
Die IDs wurden automatisch generiert und ich hatte Sonderzeichen darin.
Ich habe diese Zeile ersetzt
mit dieser
Und jetzt funktioniert es wie ein Zauber.
Großartige Arbeit!
Ich habe gerade versucht, eine zusätzliche Option hinzuzufügen, um den erreichten Abschnitt blinken zu lassen (oder eine andere Art von Effekt anzuzeigen), unter Verwendung von CSS-Animationen und der Pseudoklasse :target.
Aber ich bekomme es nicht zum Laufen, vielleicht weil :target mit diesem Skript nicht funktionieren kann, da der URL-Anker vom Skript selbst vor dem Browser verborgen wird, sodass der Browser die URL nicht mit dem Ziel in Beziehung setzen kann… liege ich falsch?
Hat jemand eine Lösung (oder kann jemand einen Weg vorschlagen), um das zu erreichen? Nicht unbedingt über CSS. Der beste Weg wäre (meiner Meinung nach), etwas innerhalb des Skripts hinzuzufügen (wie eine Funktion, die auf eine CSS-Klasse angewendet wird) und danach dieser Klasse das Element zuzuweisen, das wir blinken lassen möchten.
Tolles, einfach zu befolgendes Tutorial. Eine Frage: Weiß jemand, wie man verhindert, dass der Browser das Div/Element, zu dem gescrollt wird, hervorhebt?
Sie können auch mit CSS
html
{
scroll-behavior: smooth;
}
WOwow! TOLL! Danke Kumpels!
Re: CSS' smooth-scrolling-Verhalten... bitte nicht, zumindest noch nicht.
Ich leide seit etwa einem Monat an der gelegentlichen Website, die es verwendet. Das Scrollen funktioniert, und es ist flüssig, aber es fügt 500-1000ms leckere, leckere Verzögerung hinzu, bevor das Scrollen jedes Mal beginnt, wenn ich mein Mausrad benutze.
Zuerst dachte ich, es sei ein seltsamer Trend, überall Schnapppunkte zu haben, aber ich entdeckte, dass es diese CSS-Eigenschaft war, als ich sie gestern selbst ausprobierte.
Passiert (zumindest bei mir) in der aktuellen Version von Chrome, sowohl unter Windows als auch unter Ubuntu.
Aus Sicht der Barrierefreiheit: Was halten Sie davon,
$target.css('outline', 'none')hinzuzufügen, wenn das Element normalerweise nicht fokussierbar war? Wenn Sie normale Ankerlinks verwenden, wird bei einem nicht fokussierbaren Element wie einemdivkeine Umrandung hinzugefügt, daher habe ich das Gefühl, dass dies die Funktionalität der Standard-Browserfunktionalität näher bringen würde. So würde der aktualisierte Callback aussehen:Natürlich wollen wir die Outline nicht entfernen, wenn das Element, zu dem gescrollt wird, normalerweise fokussiert werden kann. Falls jemand Gründe hat, warum man dies nicht tun sollte, lassen Sie es mich bitte wissen!
Vielen Dank für den großartigen Artikel. Ich frage mich nur, ob die reine Javascript- und CSS-Verhaltensfunktionalität im Safari-Browser nicht unterstützt wird, als Sie auf die Polyfill-Lösung verwiesen haben, sagten Sie: "Sie würden dies wahrscheinlich nur verwenden, wenn Sie etwas mit dem Scrollen der Seite tun würden, das nicht mit #target-Sprunglinks und CSS erledigt werden konnte." Ich kann nicht verstehen, inwiefern diese Funktionalität des sanften Scrollens mit #target-Sprunglinks und CSS erreichbar war. Ich bin neu in diesem Bereich, daher schätze ich jede Hilfe sehr :)
Guter Beitrag, danke! Was soll
.not('[href="#0"]'verhindern? Gibt es eine magische Verwendung von #(int), von der ich nichts weiß?Hey JP! Das ist eine praktische Möglichkeit, jedes Element mit einem href-Attribut von #0 (d.h.
Link) auszuschließen. In diesem Fall ist das ein Ankerlink (#0 scrollt den Benutzer zum Element auf der Seite mitid="0") und das Snippet schließt jeden Link aus, der diese ID als Ziel hat.Der Punkt ist, dass IDs nicht mit einer Zahl beginnen können. Oder im Grunde sollten sie es nicht. Wenn Sie also #0 für einen Link verwenden, ist es ein toter Link, anstatt nur # allein, das Sie zum Anfang der Seite springen lässt.
Okay – das ist alles großartig und so weiter…, aber – es gibt ein großes Problem und eine Frage. Auf welche Weise können wir die URL sowohl durch Klicken auf Menüpunkte als auch durch manuelles Scrollen zu Abschnitts-IDs aktualisieren? Sie wird leider nur durch Klicken aktualisiert, nicht durch Scrollen. Das Hauptziel ist es, eine neue aktualisierte URL zu erhalten und sie weiter zu verwenden, z.B. in einer mehrseitigen/mehrsprachigen Umgebung. Hat jemand eine Idee, wie man dies in diesem funktionierenden Skript implementieren kann?
Entschuldigung für die Verzögerung – habe eine Antwort auf meine eigene Frage.
Entfernen Sie einfach „e.prevent.default()“ in menuItems.click(function(e){}) und fügen Sie
„location.hash = ” + id” in $(document).scroll(function(){}) direkt über dem Hinzufügen/Entfernen der aktiven Klasse zu Menüelementen hinzu.
Ich habe ein kurzes Gist für eine reine Js-Version erstellt: https://gist.github.com/hsnyc/6fca8b5c237ff80a650674680e0be082
Ich kann diesen von Ihnen erstellten Code für ein kommerzielles Projekt verwenden, das Sie vorhaben.
wenn Sie sich bedanken können
wenn Sie es nicht können, danke.
Ja, verwenden Sie, was Sie möchten.
Hallo, funktioniert super. Es scheint mit der Bootstrap-Carousel-Navigation in Konflikt zu geraten.
Die Website, auf der ich es implementiert habe, ist noch nicht online.
Vielen Dank! Das hat wirklich geholfen. Das Lesen über Barrierefreiheits-Scrolling hat mir gefallen. Eine bessere UX wäre es, einen Versatz über dem gescrollten Inhalt bereitzustellen, damit er nicht ganz nach oben auf den Bildschirm gelangt.
Ich finde das großartig!
Ich habe jedoch eine Frage…
Was ist der Zweck der folgenden Zeile?
Wenn das Ziel keine Länge hat, dann hat es keinen Hash…
macht das Sinn?
Ich verstehe den Zweck der zweiten Zeile nicht. Sie prüfen bereits, ob das Ziel eine Länge hat, in der if-Anweisung direkt darunter.
Vor HTML5 gab es ein Attribut namens
namefür Anker. Diese Zeile versucht,namezu verwenden, falls sie keinen brauchbaren Hash für dasid-Attribut finden kann. Dasname-Attribut wird nicht mehr unterstützt. Sie können diesen Code entfernen, wenn Sie möchten.Ich erhalte eine Ausnahme von JQuery, wenn der Link eine ID anstelle eines Ankernamens referenziert, da
[name=link]nicht existiert. IDs sind auch Anker.Ich benutze diesen Code schon seit einiger Zeit. Kürzlich bemerkte ich ein Problem im mobilen Safari, bei dem die Seite am Ende der Animation zum Scrollelement springt. Dies geschieht, weil ich das Scrollen auf eine festgelegte Entfernung vor dem Ankerpunkt eingestellt habe, und dann scheint iOS automatisch zum Element zu scrollen, wenn die focus()-Funktion aufgerufen wird. Um dies zu lösen, habe ich die Option {preventScroll: true} hinzugefügt, also focus({preventScroll: true}).
Oh ja, bezüglich des JS von Parimal oben – der Offset funktioniert nicht für Links von externen Websites und auch nicht für Links innerhalb der Website von einer Seite zur anderen (mit Anker)!
Wie löst man dieses Problem?
Ich weiß, dies ist ein älterer Beitrag und ich bin mir nicht sicher, ob Sie dies sehen werden, aber wenn ich Smooth-Scrolling auf einem "Zurück-nach-oben"-Button verwende, gibt es eine Möglichkeit, dem Button eine Klasse hinzuzufügen, während er nach oben scrollt, und die Klasse dann zu entfernen, sobald er oben angekommen ist. Zum Beispiel füge ich die Klasse 'show' hinzu, wenn er den von mir festgelegten Offset überschreitet, aber ich frage mich, ob ich einen Event-Listener hinzufügen kann, der beim Klicken auf den Button eine Klasse hinzufügt und wenn er oben ankommt, diese Klasse entfernt. Danke.
Basierend auf den Eingaben scheint es, dass der Benutzer Informationen zu verschiedenen Techniken und Tools zur Erzielung von reibungslosem Scrollen in der Webentwicklung bereitstellt. Er erwähnt native CSS-Funktionen wie "scroll-behavior", eine native JavaScript-Version des reibungslosen Scrollens und einen verfügbaren Polyfill von Dustan Kasten. Der Benutzer betont auch die Bedeutung der Berücksichtigung von Barrierefreiheit bei der Implementierung von reibungslosem Scrollen und schlägt vor, einen Artikel von Heather Migliorisi für Code-Lösungen zu lesen.