【问题标题】:Take window to same scroll position on reload重新加载时将窗口带到相同的滚动位置
【发布时间】:2016-03-25 16:57:54
【问题描述】:

在使用按钮或下拉菜单后,我正在使用以下代码将窗口带到相同的滚动位置。下面的代码中给出了其中一个按钮 (#english) 的示例。

已编辑

f(localStorage.getItem("scroll"))  
    {
        window.scrollTo(0, parseInt(localStorage.getItem("scroll")));

    }



        $("#english").on("click",function()
        {
             localStorage.setItem("scroll", document.body.scrollTop);
        });

window.localStorage.clear();

这在 Safari 中运行良好,但在 Firefox 中则不行。

似乎无法让它在 Firefox 中运行。任何人,请。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    根据 this document.body.scrollTop 在 Firefox 中已弃用,请改用 document.documentElement.scrollTop。您可能需要插入一些条件逻辑才能在 Safari 中使用 document.body.scrollTop,在 Firefox 中使用 document.documentElement.scrollTop

    将您的点击处理程序更改为类似

    $("#english").on("click",function(){
        var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
        localStorage.setItem("scroll", scrollTop);
    });
    

    如果localStorage中不存在滚动则

    localStorage.clear(); 
    typeof localStorage.getItem("scroll"); // "object"
    

    如果存在滚动则

    localStorage.setItem("scroll", 1000);
    typeof localStorage.getItem("scroll"); // "string"
    

    如果滚动为 0

    localStorage.setItem("scroll", 0);
    typeof localStorage.getItem("scroll"); // "string"
    

    因此,除非“滚动”明确设置为未定义,否则typeof localStorage.getItem('scroll') === 'undefined'; 将永远不会返回 true。

    如果scroll不存在,则其值为null

    localStorage.clear(); 
    localStorage.getItem("scroll"); // null
    

    null === true //false
    

    所以

    if(localStorage.getItem("scroll"))  
            {
                window.scrollTo(0, parseInt(localStorage.getItem("scroll")));
    
            }
    

    如果存在滚动(当然是数字)将滚动,如果不存在则不会滚动。您是否在寻找其他行为?

    【讨论】:

    • 如果你是这个意思: if(!localStorage.getItem("scroll")) { window.scrollTo(0, localStorage.getItem("scroll")); } 它不工作。
    • 对不起,你要if(localStorage.getItem('scroll'))
    • 谢谢马特。很抱歉延迟回复,b'n away。需要页面滚动回与单击加载新页面的按钮时完全相同的滚动位置。
    • 将我问题中的代码编辑为您的答案。它在 Safari 中有效,但在 Firefox 中无效(在 Mac 上)
    【解决方案2】:

    这行得通:

    <script>
    
    /*makes a new page jump to same scroll position as the scroll position when the link is activated*/ 
    
    if(localStorage.getItem('scroll'))  
            {
                window.scrollTo(0, parseInt(localStorage.getItem("scroll")));
    
            }
    
    $("#englishflag").on("click",function()
    {
         localStorage.setItem("scroll", window.pageYOffset);
    });
    
    
     window.localStorage.clear();
    
      /*END*/ 
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多