Wie um zu verhindern, springen Sie auf einen Anker auf?
Benutze ich e.preventDefault();
zu deaktivieren Standard-Anker Verhalten.
Gibt es eine Möglichkeit zu verhindern, dass nur springen Aktion, um ein Ziel, auf klicken Sie auf?
Habe ich versucht:
var hash = window.location.hash;
var link = $('a');
$('a').click(function() {
e.preventDefault();
hash = "#"+link.attr("href");
});
Aber es funktioniert nicht: http://jsfiddle.net/ynts/LgcmB/.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie auch angeben, Ereignis-argument in der Funktion. Durch die Benennung als
e
oderevent
und dann können Sie es verändern.jsfiddle.net/ynts/Jgkmt/embedded/result/#anchor
nach dem Klick.window.location
gesetzt ist, wird ein Sprung zu#anchor
passiert :(.#anchor
(aufwindow.location = hash;
) → Sprung zup#anchor
passiert. Also alle Schritte der Standard-Klick-Aktion auf einen Anker-link sind hier. Meine Idee war nur#anchor
Hinzugefügt Seite-Adresse in adress-Leiste und keine scroll-Seite zup#anchor
.$(window).hashchange( function(e) { e.preventDefault(); });
ich denke, es wird funktionieren und wenn arbeiten, dann vergessen Sie nicht, etwas zu tun 😉<script> $(document).ready(function() { var hash = window.location.hash; var link = $('a'); $('a').click(function(e) { e.preventDefault(); hash = link.attr("href"); window.location = hash; }); }); $(window).hashchange( function(e) { e.preventDefault(); }); </script>
Sie waren das hinzufügen der Funktion in andere Ereignis, das Auftritt, auf auf!#href-value
zu einer Seite, Adresse in adress-Leiste, wenn eine Registerkarte geklickt wird. Allerdings, wenn die URL aktualisiert wird, eine Seite springt, umdiv#href-value
. Also verliere ich "Glätte" des tabs Verhalten.window.location.hash = hash
ist sicherer alswindow.location = hash
ist es nicht?Ist dies die einzige Lösung, die ich gefunden habe, das funktioniert konsistent für alle desktop-und mobilen Browsern mit verschiedenen client-UI-Bibliotheken und-frameworks. Indem man die Fenster-Koordinaten, bevor das scrollen beginnt, können wir wiederherstellen und beibehalten der aktuellen scroll-position.
Zu nur verhindern, dass das "springen" Sie zu verwenden haben, andere id für das Ziel-element als das, was angegeben ist in den Anker.
z.B. für einen link auf einer neuen Registerkarte verwenden,
und für das target-element der Maske die id
Dann in dein script Anhängen der Maske an die echten hash, und verwenden Sie es, um das element.
Dadurch bleibt die hash Lage, Veränderungen in der browser-history, die gesteuert werden können, indem Sie die vorwärts/zurück-Tasten, und erkannt, beim laden der Seite mit der
hashchange
Ereignis, wenn Benutzer die Seite mit dem hash angegeben.Sollten Sie binden ein onclick-Ereignis zu verankern, und geben Sie
return false;
als Ergebnis.Die
return false;
- Anweisung bewirkt, dass Standard-click-Verhalten (springen) nicht funktionieren würde.Finden Sie mehr info hier: Wie zu deaktivieren Anker "springen" beim laden der Seite?
$("a[href='#']").on('click', function(event) { return false; });
Müssen Sie zum bestehen der Veranstaltung auf die Funktion.