Javascript 传入哈希路径url的窗口滚动
我有一个包含一些固定和绝对元素的页面,这些元素导致了散列路径链接的问题。我能够在用户使用Javascript 传入哈希路径url的窗口滚动,javascript,html,twitter-bootstrap,Javascript,Html,Twitter Bootstrap,我有一个包含一些固定和绝对元素的页面,这些元素导致了散列路径链接的问题。我能够在用户使用function(){window.scrollBy(0,-80)}在页面上导航时修复它但是,如果我尝试在我的文档上调用此选项(滚动以获取传入的哈希值),它将不起作用 我发现它不起作用的原因是,在文档准备好之前,页面实际上不会调整为哈希值。如果我无法在文档准备就绪时执行此操作,我什么时候可以执行此操作?很明显,只有在加载整个页面(包括所有JS)后,浏览器才会从哈希滚动到HTML元素,我认为最好的选择是将操作绑
function(){window.scrollBy(0,-80)}在页面上导航时修复它
但是,如果我尝试在我的文档上调用此选项(滚动以获取传入的哈希值),它将不起作用
我发现它不起作用的原因是,在文档准备好之前,页面实际上不会调整为哈希值。如果我无法在文档准备就绪时执行此操作,我什么时候可以执行此操作?很明显,只有在加载整个页面(包括所有JS)后,浏览器才会从哈希滚动到HTML元素,我认为最好的选择是将操作绑定到页面的
滚动
事件
您可以尝试以下方法:
<script type="text/javascript">
$(function() {
// Retrieves the hash from URL
var hash = window.location.hash.substring(1);
// If hash length > 0 (there is actually a hash)
// And the #hash element exists on page
if(hash.length > 0 && $('#'+ hash).size() > 0){
// Binds a function to the page scroll
$(document).on('scroll', function(){
// Here's the bright part: when the browser finish loading the page, it will
// scroll right to the #hash element. So, whenever the page is scrolled, if
// the #hash element offset top matches the page scroll offset, it means the page
// was scrolled right to that element.
var elemTop = $('#'+ hash).offset().top; // Retrieve element's offset top
var docTop = $(document).scrollTop(); // Retrieve page's offset
if(elemTop == docTop){
alert('Now I do my stuff!! :)');
// Do your stuff
}
// And now you make sure "your stuff" won't happen again if the user
// accidentally scrolls precisely to the #hash element's offset by
// unbinding scroll action of the page.
$(document).unbind('scroll');
});
}
});
</script>
$(函数(){
//从URL检索哈希
var hash=window.location.hash.substring(1);
//如果哈希长度>0(实际上存在哈希)
//页面上存在#hash元素
if(hash.length>0&&$('#'+hash.size()>0){
//将函数绑定到页面滚动
$(文档).on('scroll',function(){
//这里有一个亮点:当浏览器完成加载页面时,它将
//向右滚动到#hash元素。因此,每当滚动页面时,如果
//#hash元素offset top与页面滚动偏移匹配,表示页面
//已向右滚动到该元素。
var elemTop=$('#'+hash).offset().top;//检索元素的偏移量top
var docTop=$(document).scrollTop();//检索页面的偏移量
if(elemTop==docTop){
警惕('现在我做我的事!!:)';
//做你的事
}
//现在你要确保如果用户
//意外地精确滚动到#散列元素的偏移量
//页面的解除绑定滚动操作。
$(文档)。解除绑定(“滚动”);
});
}
});
我希望这能帮助你解决你的问题!如果有什么不清楚的地方,请告诉我。谢谢你解答这个古老的问题。我很高兴它终于有了答案,而且这个答案也很有效!