Gibt es eine Möglichkeit (mit CSS3, JS oder irgendetwas dazwischen), dass eine Seite an einem bestimmten Punkt nach unten scrollen kann?
Ich möchte, dass meine Seite geladen wird, ohne dass der Header beim Laden anfänglich angezeigt wird (dh er befindet sich über dem tatsächlichen Ansichtsfenster des Benutzers).
Gibt es eine einfache/einfache Möglichkeit, dies zu tun?
Sie können Standard-Javascript verwenden: window.scroll(x, y)
.
Dies sollte ziemlich gut funktionieren, wenn man bedenkt, dass Sie dies bei onload
tun, d. H. Das Fenster sollte bei (0, 0) beginnen. Spielen Sie mit (x, y)
herum, bis Sie die Kopfzeile an die Position bringen, mit der Sie zufrieden sind. Natürlich müssen Sie es jederzeit ändern, wenn sich der Header bewegt.
Beispiel:
<body onLoad="window.scroll(0, 150)">
Wenn Sie eine id
einer div
zugewiesen haben, die Ihren Inhalt nach dem Header enthält, können Sie die Seite wahrscheinlich mit einer solchen URL, http://website.com/page#id
, laden.
Dies bringt Sie zu dem Punkt, an dem das div vorhanden ist.
Sie können window.scroll(x,y)
beim Laden der Seite verwenden.
Dies sind sehr einfache Tricks dafür:
Erstellen Sie eine CSS-Offset-Klasse und weisen Sie sie dem Körper zu
.offset{
margin-top:-500px;
}
Dieser Körper wird also mit einem Versatz von 500px von oben geladen
Fügen Sie dann den folgenden Code zum Körper hinzu
<body class="offset" onLoad="window.scroll(0, 150)">
entfernen Sie anschließend mit Jquery die Offset-Klasse, wenn die Seite geladen wird
$(document).ready(function(){
$(".row").removeClass("offset");
});
Die aktuellen Antworten führen zu einem spürbaren "Sprung" auf der Seite oder Sie müssen die genaue Pixelnummer kennen, die Sie springen möchten.
Ich wollte eine Lösung, die an einem Container vorbeigeht, unabhängig von der Größe/dem Inhalt des Containers.
HTML
<div class="skip-me">Skip this content</div>
CSS
// Hide the content initially with display: none.
.skip-me {
display: none;
}
.unhide {
display: block;
}
JS
// Unhide the content and jump to the right place on the page at the same time
function restoreAndSkipContent() {
var hidden = document.querySelector('.skip-me');
hidden.classList.add('unhide');
window.scroll(0, hidden.offsetHeight);
};
restoreAndSkipContent();
HTML - Benannte Anker
Sie können auch gute alte Anker verwenden. Definieren Sie einen benannten Anker mit
<a id="start">any text</a>
Dies sollte an dem Punkt definiert werden, der in Sicht sein muss. Da es auch im unteren Bereich des Bildschirms sichtbar sein kann, müssen Sie den Anker möglicherweise etwas tiefer als erforderlich verankern. Auf diese Weise stellen wir sicher, dass Inhalte, die nicht angezeigt werden müssen, gut ausgeblendet sind .. Wenn das Bild beim Laden der Seite nach unten verschoben wird, sollte die URL page.aspx # start anstelle von page.aspx sein
<a href="#start">access within the same page</a>
<a href="page.aspx#start">access from outside the page</a>
Verwenden Sie Javascript window.scroll
:
$(window).scroll(function(){
if ($(this).scrollTop() > 100){
$('something').hide();
}
else{
$j('something').show();
}
});
Verwendung von Javascript scrollBy
. Damit diese Methode funktioniert, muss die visible-Eigenschaft der Bildlaufleiste des Fensters auf true gesetzt sein. Stellen Sie also sicher, dass Ihre Seite lang genug ist, um die vertikale Bildlaufleiste anzuzeigen.
<html>
<head>
</head>
<body onLoad="window.scrollBy(0,100)">
<div style="height:300px;"> Some text </div>
<div style="height:900px;"> Some text 2 </div>
</body>
</html>
in jquery gibt es eine Funktion namens .scroll () .. Sie können diese Funktion verwenden, um die Kopfzeile nur sichtbar zu machen, wenn der Benutzer die Site scrollt.
Die kombinierte Lösung
Jede einzelne JavaScript-first-Lösung kann (und wird es normalerweise tun) zu einem Schluckauf vor dem pageLoad-Ereignis führen. Wie Uday vorgeschlagen hat, ist die Verwendung der negativen CSS-Marge der beste Weg, um nahtlos gescrollte Ladevorgänge zu erzielen.
Persönlich verwende ich ein Code-Snippet, das dem von Uday ähnelt, jedoch leicht optimiert ist, damit es in Browsern ohne JavaScript funktioniert und die Scroll-Deklaration nicht wiederholt wird.
<!doctype html>
<html>
<head>
<style>
/* Can be in an external stylesheet as well */
/* This is the ONLY place where you will specify the scroll offset */
BODY.initialoffset {margin-top: -100px; /* Or whatever scroll value you need */}
</style>
<noscript>
<!-- Browsers without JavaScript should ignore all this margin/scroll trickery -->
<style>
BODY.initialoffset {margin-top: initial; /* Or 0, if you wish */}
</style>
</noscript>
</head>
<body onLoad = "(function(){var B=document.getElementsByTagName('body')[0],S=B.currentStyle||window.getComputedStyle(B),Y=parseInt(S.marginTop);B.className=B.className.replace(/\binitialoffset\b/g,'');window.scroll(0,-Y);})()">
</body>
</html>
Die kurze selbstaufrufende Funktion im Attribut onLoad kann wie folgt erweitert werden:
(function(){
/* Read the marginTop property of the BODY element */
var body=document.getElementsByTagName('body')[0],
style=body.currentStyle||window.getComputedStyle(body),
offsetY=parseInt(style.marginTop);
/* Remove the initialoffset class from the BODY. (This is the ugly, but everywhere-working alternative)... */
body.className=body.className.replace(/\binitialoffset\b/gi,'');
/* ...and replace it with the actual scroll */
window.scroll(0, -offsetY);
})()
Diese Arbeit für mich.
<div class="demo">
<h2>Demo</h2>
</div>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script>
$(document).ready(function () {
$('html, body').animate({
scrollTop: $('.demo').offset().top
}, 'slow');
});
</script>
Vielen Dank.