jQuery Smooth-Scrolling-Seite Laden
Bin ich über das jQuery-Skript zu tun mit Smooth-Scrolling (zu Finden auf der CSS-Tricks.com):
/** Smooth Scrolling Functionality **/
jQuery(document).ready(function($) {
function filterPath(string) {
return string
.replace(/^\//,'')
.replace(/(index|default).[a-zA-Z]{3,4}$/,'')
.replace(/\/$/,'');
}
var locationPath = filterPath(location.pathname);
var scrollElem = scrollableElement('html', 'body');
var urlHash = '#' + window.location.href.split("#")[1];
$('a[href*=#]').each(function() {
$(this).click(function(event) {
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;
event.preventDefault();
$(scrollElem).animate({scrollTop: targetOffset}, 400, function() {
location.hash = target;
});
}
}
});
});
//use the first element that is "scrollable"
function scrollableElement(els) {
for (var i = 0, argLength = arguments.length; i <argLength; i++) {
var el = arguments[i],
$scrollElement = $(el);
if ($scrollElement.scrollTop()> 0) {
return el;
} else {
$scrollElement.scrollTop(1);
var isScrollable = $scrollElement.scrollTop()> 0;
$scrollElement.scrollTop(0);
if (isScrollable) {
return el;
}
}
}
return [];
}
});
/** END SMOOTH SCROLLING FUNCTIONALITY **/
Es funktioniert fantastisch, außer einer Sache, ich will, dass es funktioniert, wo, wenn jemand geht direkt an die url z.B. http://domain.com/page.html#anchor
es glatt Schriftrollen, die den Anker von oben auf der Seite geladen, jetzt geht es sofort an die Seite verankern, es sei denn, Sie haben geklickt, der auf einen Anker. Ich hoffe, das macht Sinn.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn es nicht zu spät für die Antwort dann hier gehen Sie....
Hier ist eine änderung des PSR ist der code, der tatsächlich funktioniert für glatte scrollen von Seite zu laden:
http://jsfiddle.net/9SDLw/1425/
Bessere version:
http://jsfiddle.net/9SDLw/1432/
Alles, was Sie tun müssen, ist dieses Skript zu ersetzen, das "myclass" mit einer Klasse oder ID der Steuerung, die sich auf die Seite, die Sie wollen, scrollen Sie zu.
Naveed
example.com/#example
Ich fand, dass dies der beste Weg, das zu tun, was ich will so weit:
@ Talons post ...
Mir 2, aber ich musste ein paar änderungen vornehmen.
1. Warum ersetzen Sie den "/"?
In meinem Fall macht es die url...
"http://[meine domain]/[meine Seite]/[mein Anker]" ...sehen aus wie...
"http:/[meine domain]/[meine Seite]/[mein Anker]"
und...
2. Chrome (meine aktuelle version: 40.0.2214.115 m) nicht in einer Zeile wie der folgenden...
Uncaught Error: Syntax Error, unrecognized expression: http:/[meine domain]/[meine Seite]/[my anchor]
Fand ich heraus, dass jQuery nicht mit "offset", wenn "target" ist ein full-href-http://.../#Anker.
zu beheben 1.
ersetzt:
mit:
zu beheben 2.
ersetzt:
mit:
Funktioniert nun bei mir perfekt, ohne Fehler.
Bitte kommentieren Sie diese ein, denn ich bin noch sehr neu in js/jquery...
thx @Talon
Können Sie tun, indem Sie mit.scrollTop()