デフォルトでは、ウェブサイトにアンカーがあると、リンクをクリックするとアドレスバーのURLが変更されます(例:www.mysite.com/#anchor)手動でアンカーにスクロールしたときにURLを変更しますか?
変更することは可能ですかアンカーにスクロールするとすぐにアドレスバーのURLが表示されますか?または、新しいアンカーをヒットしたときに、複数のアンカーとアドレスバーのURLが変更された長いドキュメントを持っていますか?
デフォルトでは、ウェブサイトにアンカーがあると、リンクをクリックするとアドレスバーのURLが変更されます(例:www.mysite.com/#anchor)手動でアンカーにスクロールしたときにURLを変更しますか?
変更することは可能ですかアンカーにスクロールするとすぐにアドレスバーのURLが表示されますか?または、新しいアンカーをヒットしたときに、複数のアンカーとアドレスバーのURLが変更された長いドキュメントを持っていますか?
はこのjQueryプラグインを使用してみてください(おそらくジャンプの原因になります)。それはクールな機能がたくさんあり、あなたはブラウザのハッシュを更新するためにwindow.location.hash
を使うことができます。
また、「スクロール」イベントを追加して、アンカーに達したときを確認することもできます。ここで
は、イベントを説明するための作業フィドルです:http://jsfiddle.net/gugahoi/2ZjWP/8/ 例:
$(function() {
var currentHash = "#initial_hash"
$(document).scroll(function() {
$('.anchor_tags').each(function() {
var top = window.pageYOffset;
var distance = top - $(this).offset().top;
var hash = $(this).attr('href');
// 30 is an arbitrary padding choice,
// if you want a precise check then use distance===0
if (distance < 30 && distance > -30 && currentHash != hash) {
window.location.hash = (hash);
currentHash = hash;
}
});
});
});
あなたはアドレスバー
window.history.pushstate
location.hashが便利です –
回答には大きな部分を含める必要があります。リンクにはインターネットを壊す習慣がありません(はい、リンク腐敗はティムBLのペットピーブです)。 –
あなたはjQueryのスクロールイベント(http://api.jquery.com/scroll/)に結合し、呼ばれるコールバック関数の呼び出しごとに、どのように遠くに確認することができますこの値をチェックしてユーザーがスクロールしたことを文書化します。.scrollTop(http://api.jquery.com/scrollTop/)、te location.hashオブジェクト(http://www.w3schools.com/jsref/prop_loc_hash.asp)を操作してアンカーを設定します。
それはこのようなものになるだろう:あなたがそれらを選択した後にアンカーを並べ替える場合は最初の可視アンカーは常に設定されるように、あなたは、より正確かもしれない
// Checks if the passed element is visible on the screen after scrolling
// source: http://stackoverflow.com/questions/487073/check-if-element-is-visible-after-scrolling
function isScrolledIntoView(elem) {
var docViewTop = $(window).scrollTop();
var docViewBottom = docViewTop + $(window).height();
var elemTop = $(elem).offset().top;
var elemBottom = elemTop + $(elem).height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}
$('#document').scroll(function(e) {
var anchors = $('.anchor');
for (var i = 0; i < anchors.length; ++i) {
if (isScrolledIntoView(anchors[i])){
var href = $(anchors[i]).attr('href');
location.hash = href.slice(href.indexOf('#') + 1);
break;
}
}
});
。
こんにちは、これを共有していただきありがとうございます。上のコードで動作するサンプルHTMLマークアップを投稿してください。 – Advanced
ここに例があります:http://jsfiddle.net/7d5qU/10/。それはうまくいくはずですが、jsfiddleが内側のURLを隠すので、私はそれを証明することができませんでした... –
私はこのようなことをする必要があると思います。試行していない
var myElements = $("div.anchor"); // You target anchors
$(window).scroll(function(e) {
var scrollTop = $(window).scrollTop();
myElements.each(function(el,i) {
if ($(this).offset().top > scrollTop && $(myElements[i+1]).offset().top < scrollTop) {
location.hash = this.id;
}
});
});`
ありがとう、上記のすべての答えも正しいです! – r1987
すごい!私のプロジェクトにこれをフォークしたバージョンを使用しています。しかし、これを使用すると、ハッシュが変更されるたびに「スクロールジャンプ」が発生することがわかりました。そのため、問題を修正した履歴APIを使用しました。 \t \t \t(history.pushState){ \t \t \t履歴場合。pushState(null、null、 "#" + hash); \t \t \t} 他\t \t \t { \t \t \t window.location.hash = '#myhash'。 \t \t \t – Prashant