【问题标题】:Trigger Scroll toTop after window.location.replace JQuery在 window.location.replace JQuery 之后触发滚动到顶部
【发布时间】:2016-10-17 09:29:42
【问题描述】:

我希望有人可以帮助我解决我遇到的这个编程问题。

我有一个 footer.php 文件,它链接到另一个页面上的一系列 bs-tab 组 - 让我们说 about.php(为了论证)。我希望使用 JQuery 完成的任务流程如下:

(假设我们在 index.php 上)

  1. 单击footer.php 中的链接到about.php 上的选项卡组。
  2. 将路由链接到正确的选项卡组。
  3. 加载页面并通过滚动到页面顶部完成。这模仿了站点的其余页面加载行为。这就是为什么需要这样做。

我遇到的问题是,当这些选项卡组位于同一页面上时(about.php),链接工作正常:

单击事件 > 选项卡组更改 > 活动导航选项卡状态切换 > 页面滚动到顶部

然而,当在另一个页面上时(比如从 index.php 路由到 about.php),会发生以下情况:

单击事件 > 选项卡组更改 > 活动导航选项卡状态切换 > 哈希锚点到页面顶部,但不滚动到页面顶部。

我快速测试了一下,发现我们从index.php改成about.php后,序列好像有问题:

window.location.replace(link_url);

窗口位置改变后如何完成编程序列?

这是我的代码,提前谢谢你:

HTML - 在 footer.php 中找到:

 <div class="col-lg-3 col-md-3 col-sm-3 col-xs-6 footer-links">
        <h3>Tab Groups</h3>
        <ul>
        <li class="tab1"><a class="active" href="/link#hashtag1" data-toggle="tab">hashtag1</a></li>
        <li class="tab2"><a href="/link#hashtag2" data-toggle="tab">hashtag2</a></li>
        <li class="tab3" ><a href="/link#hashtag3" data-toggle="tab">hashtag3</a></li>
        </ul>
 </div>

JS:

$('.footer-links a').on('click', function(e) {

    var link_url = $(this).attr('href');
    var link_hash = link_url.substring(link_url.indexOf('#')+1);
    var totalLink = window.location.pathname + '#' + link_hash;

    if (totalLink !== link_url) {
        window.location.replace(link_url);
    }

    $(this).tab('show');

    $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
        var activeTab = this.href.split('#');
        $('.nav a').filter('[href="#'+activeTab[1]+'"]').tab('show');
    });

//below doesn't happen after the page loads

    if($(window).scrollTop() > 0){
        $('html, body').animatescroll({scrollSpeed:1000,easing:'easeOutQuint',padding:0});
    } else {
        $(window).scrollTop(0);
    }

});

【问题讨论】:

    标签: javascript jquery twitter-bootstrap tabs scrolltop


    【解决方案1】:

    您错过的是,当您执行window.location.replace(link_url) 时,您的整个页面都会重新呈现。基本上,您永远不会到达 $(this).tab('show') 以及下面的任何内容。

    您应该做的是向您的 URL 添加另一个参数(或将其存储在 LocalStorage 中,例如),然后在页面加载时检查此参数。

    if (totalLink !== link_url) {
        window.location.replace(link_url + "&top=true");
    }
    

    然后在您的 document.ready 中检查此参数并滚动到顶部。

    $(document).ready(function() {
       ...
       // This is simplified version
       // For a robust version check this: http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript
       var params = location.search.split("=");
       if (params.indexOf("top=true") >= 0) {
          scrollToTop(); //same as you did in your onClick, extract it outside
       }
       ...
    }
    

    【讨论】:

    • 嗨,谢谢你,一个很好的建议。我看过这个,发现使用这个过程消除了一个问题并创建了另一个问题:D 我在添加这个脚本时看到的是 /link#hashtag 附加了“&top=true”,因此,选项卡组现在没有路由通过,但现在点击页面顶部。 :D 我是否在您的评论中遗漏了什么 - 还是我们也需要更改 HTML?感谢您的帮助。
    • 您好,感谢您再次与我们联系。我在测试时确实将footer.php中的链接格式化为这个,发现我得到了相同的结果,但是url结果如下:host/page.php?top=true#hashtag&top=true
    • 由于我看不到你的整个代码,我只能提供一些基本的想法。如果它已经存在,请不要附加 top=true。
    • 他们真的很有帮助,所以感谢您抽出宝贵的时间。我发现使用这个:window.location.replace(link_url).append('top=true');已经对路由进行了排序,但是,我看到了一些不稳定的行为,我需要对其进行排序。
    • 很乐意提供帮助:)
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    相关资源
    最近更新 更多