缓动平滑滚动不起作用

Smooth scrolling with easing isn't working

我有一个 JQuery 函数,它应该允许使用 JQuery 缓动进行平滑滚动,但是它不起作用,我似乎找不到错误。

函数的代码是

$(function(){
    $('a[href*=#]').click(function() {
        if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”) && location.hostname == this.hostname) {
            var $target = $(this.hash);
            $target = $target.length && $target || $('[name=' + this.hash.slice(1) +']');
            if ($target.length) {
                var targetOffset = $target.offset().top;
                $(‘html,body’).animate({scrollTop: targetOffset}, {duration:1600,easing:'easeInBounce'});
                return false;
            }
        }
    });
});

我做了一个JSFiddle 里面的函数来举个例子。 (我包含了 JQuery 缓动的代码)

JSFiddle 中有一个类似的函数,但是,即使这个函数确实有效,它也不包括使用缓动的选项。如果能帮助我解决问题,我将不胜感激

编辑

扩展我的意思是行不通的;单击链接时没有动画,它只是立即滚动到页面中的那个位置。

你这里发生了一些非常奇怪的事情。

在下一行中,您使用的是单个双引号而不是两个单引号

if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”) && location.hostname == this.hostname) {

在这一行中,您使用的字符不是单引号

$(‘html,body’).animate()

最后我们明白了。 jsFiddle

$(function(){
    $('a[href*="#"]').click(function() {
        if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
            var $target = $(this.hash);
            $target = $target.length && $target || $('[name=' + this.hash.slice(1) +']');
            if ($target.length) {
                var targetOffset = $target.offset().top;
                $('html,body').animate({scrollTop: targetOffset}, {duration:1600,easing:'easeInBounce'});
                return false;
            }
        }
    });
});

编辑

为了回答您在此答案的评论中提出的问题,为了让“#”link 正常工作,我们将您的 $target = 行更改为此

$target = $target.length ? $target : $('html');

为了让锚点出现在页面上,我们简单地从函数中删除 return false;。在玩完代码后,我将其简化为:

$(function () {
     $('a[href*="#"]').click(function () {
        var $target = $(this.hash);
        $target = $target.length ? $target : $('html');
        var targetOffset = $target.offset().top;
        $('html,body').animate({scrollTop: targetOffset}, {duration: 1600, easing: 'easeInBounce'});
     });
});

单击 link 后,我得到了一个带有上述解决方案的问题,它会在平滑滚动之前向下移动。对于那些和我有同样问题的人,你可以使用这个版本,它效果更好

    // Smooth scrolling using jQuery easing with other links
    $('a[href*="#"]').click(function() {
        if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
            var target = $(this.hash);
            target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
            if (target.length) {
                $('html, body').animate({
                    scrollTop: (target.offset().top - 54)
                }, 1000, "easeInOutExpo");
                return false;
            }
        }
    });