javascript - jQuery on click事件到scrollToTop然后重定向

标签 javascript jquery html css twitter-bootstrap

这可能很简单 - 但我似乎无法理解这一点。我有一个时髦的动画导航栏,当单击导航栏 href 时我想要一个快速的 scrollToTop - 然后我想重定向到那个 href。这就是我到目前为止所拥有的,但不太管用。

<script>
  $(document).ready(function () {

    $(window).scroll(function () {
        if ($(this).scrollTop() > 100) {
            $('.scrollup').fadeIn();
        } else {
            $('.scrollup').fadeOut();
        }
    });

        $('.scrollup').click(function () {
          $("html, body").animate({
            scrollTop: 0
          }, 600, function() {
             var baseurl = window.location.origin+window.location.pathname;
             $(location).delay(800).attr('href', baseurl + this.getAttribute('href'));
          });
       return false;
    });
  });
</script>

如果有人需要,这是与导航栏相关的基本 html:

<!-- Sticky Navbar -->
<nav class="navbar" role="navigation">
    <!-- Toggle Button -->
    <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-ex1-collapse">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar top-bar"></span>
            <span class="icon-bar middle-bar"></span>
            <span class="icon-bar bottom-bar"></span>
        </button>
    </div>
    <!-- /Toggle Button -->

    <!-- Center Menu -->
    <div class="collapse navbar-collapse navbar-ex1-collapse">
        <ul class="nav navbar-nav navbar-top navbar-left">
            <!-- <li class="active">
                <a class="animated-menu-item" href="#">Home</a>
            </li> -->
            <li>
                <a class="animated-menu-item scrollup" href="/our-wines">OUR WINES</a>
            </li>
            <li>
                <a class="animated-menu-item" href="/about-us">ABOUT US</a>
            </li>
        </ul>
        <ul class="nav navbar-nav navbar-top navbar-right">
            <li>
                <a class="animated-menu-item" href="/latest">LATEST</a>
            </li>
            <li>
                <a class="animated-menu-item" href="/contact">CONTACT</a>
            </li>
        </ul>
    </div>
    <!-- /Center Menu -->
</nav>

最佳答案

点击链接后,我们可以将函数分为三个主要部分以提高可读性:

  1. 停止链接的默认 Action 并获取URL
  2. 运行动画
  3. 转到链接 URL

下面是它应该是什么样子的一个工作示例,我已经在相关部分上面发表了评论:

$(document).ready(function(){
    $('.link').click(function(e){

        //stop the link from immediately working
        e.preventDefault();
        
        //get the link href
        var href = $(this).attr('href');
        
        //do your animation
        $("html, body").animate({
            scrollTop: 0
        }, 600);
        
        //wait 600 ms and redirect to the URL we grabbed earlier
        setTimeout(function(){ 
            window.location = href;
        }, 600, href);
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="link" href="http://www.google.com">Google Link</a>

请记住,重定向不会在代码段内起作用,您很可能必须在您的环境中对此进行测试,但我确实在临时 index.html 文件中有这个确切的代码并且它只是工作很好。

编辑:

根据 KevinB 的评论,.delay() 在此实例中不起作用,因为它用于在标准效果 队列中对事件进行排队。根据 jQuery API documentation :

The .delay() method is best for delaying between queued jQuery effects. Because it is limited — it doesn't, for example, offer a way to cancel the delay — .delay() is not a replacement for JavaScript's native setTimeout function, which may be more appropriate for certain use cases.

关于javascript - jQuery on click事件到scrollToTop然后重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45445166/

相关文章:

javascript - 阻止字符串末尾的垂直空格 - 正则表达式

javascript - 动态添加/删除多个输入字段

javascript - 输入错误的输入时显示无效消息

javascript - 根据方向调整图像大小以填充 Div

javascript - toggleClass - 父兄弟选择器 - 问题

javascript - 用户到达页面底部。元素淡出?

javascript - 带有循环的 jQuery 中的 setTimeout

php - HTML 表单停止重定向并允许 PHP 从 HTML 文件中调用 JavaScript

javascript - 刷新我的 jQuery 数据表的具体示例?

jQuery 从字符串中获取数字