Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 传入哈希路径url的窗口滚动_Javascript_Html_Twitter Bootstrap - Fatal编程技术网

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){
警惕('现在我做我的事!!:)';
//做你的事
}
//现在你要确保如果用户
//意外地精确滚动到#散列元素的偏移量
//页面的解除绑定滚动操作。
$(文档)。解除绑定(“滚动”);
});
}
});

我希望这能帮助你解决你的问题!如果有什么不清楚的地方,请告诉我。

谢谢你解答这个古老的问题。我很高兴它终于有了答案,而且这个答案也很有效!