Ich habe eine Navbar oben. Wenn die Seite geladen wird, ist sie "relativ". Wenn ich scrolle. es ändert sich zu "behoben". Es gibt ein Problem mit Ankern auf der Seite. Wenn die Seite geladen wird und ich oben auf der Seite bin, blicke ich durch Klicken auf den Link zu einem Anker in den Abschnitt und ein Teil davon wird ausgeblendet. Wenn ich denselben Link an dieser Stelle anklicke, scrollt er zum oberen Teil des richtigen Abschnitts.Festnavigation und Anker
Was kann ich tun, um dieses Problem zu beheben?
Die HTML
<nav id="fixedmenu">
<ul>
<li><a href="#brends">Brends</a></li>
</ul>
</li>
...
<section id="brends"></section>
Die Javascript
$(document).ready(function() {
$('a[href^="#"]').click(function() {
var target = $(this.hash);
if (target.length == 0) target = $('a[name="' + this.hash.substr(1) + '"]');
if (target.length == 0) target = $('html');
$('html, body').animate({ scrollTop: target.offset().top }, 800);
return false;
});
});
und
$(document).ready(function() {
var div = $('#fixedmenu');
var start = $(div).offset().top;
var wnd = $(document).width();
$.event.add(window, "scroll", function() {
var p = $(window).scrollTop();
$(div).css('position',((p) > start && wnd > 319) ? 'fixed' : 'static');
$(div).css('top',((p)>start) ? '0px' : '');
$(div).width($('.container').width());
$(div).css('box-shadow', '0px 3px 5px 0px rgba(50, 50, 50, 0.4');
});
});
UPD: auf diese Weise
Gelöst$(document).ready(function() {
$('a[href^="#"]').click(function() {
var target = $(this.hash);
if (target.length == 0) target = $('a[name="' + this.hash.substr(1) + '"]');
if (target.length == 0) target = $('html');
var menuheight = $('#fixedmenu').height();
var ofs = ($('#fixedmenu').css('position') == 'fixed') ? menuheight : menuheight * 2;
$('html, body').animate({ scrollTop: target.offset().top - ofs }, 800);
return false;
});
});
Das funktioniert nicht. Javascript funktioniert gut, aber zuerst klicken, wenn ich oben auf der Seite bin und nav ist "relativ" scrollt direkt an Anker und ein Teil des Abschnitts ist hinter nav, was behoben wurde. Dann funktioniert es gut. –
OMG, alles was ich tun musste war: var ofs = ($ ('# fixedmenu'). Css ('position') == 'fixed')? Menühöhe: Menühöhe * 2; und dann abziehen ofs ... –
nett! Ich nehme an, dass Sie ofs als Offset verwenden - das geht zu dem, was ich sagen wollte - wenn das Nav fixiert ist, müssen Sie den Platz berücksichtigen, den es normalerweise in der Dom aufnehmen und die Offset-Accrodinlgy anpassen würde. gut done1 – gavgrif