Chrome在document.ready上加载jQuery脚本时可能存在错误

时间:2013-01-03 20:50:26

标签: jquery google-chrome

我想执行以下脚本

$('html, body').animate({
    scrollTop: $('#deckblatt').offset().top
}, 1)

deckblatt是我页面上的第一个content-div。

Chrome不会这样做,但FF会这样做。

令人困惑的部分是我在第二页上运行了相同的异常方法,这在Chrome和FF上完全正常。

我错过了什么或者是否有更好的方法来实现我想要实现的目标,阻止浏览器在之前向下滚动时自动跳转到页面的某个部分?

提前谢谢。

修改

以下是第一个项目的完整代码,该代码未正确运行

sprottenwels

这是第二个的代码,工作正常

#2

1 个答案:

答案 0 :(得分:0)

这不是Chrome错误。你的original code包含一些奇怪的东西。

  • 您没有scroll-top类的任何元素,在向下滚动时应显示该元素,用户可以单击该元素滚动到顶部。
  • 您没有topbottom ID中的任何元素,就像在另一个中一样。
  • 你从JSFiddle代码中遗漏了一些needed CSS codes,你在其他工作示例中有这些代码。
  • 但是,您的JavaScript代码中未定义最重要的错误:target变量之一,并使用“#top”字符串检查其相等性。这会导致ReferenceError异常。我想你想检查click事件的target元素的id是否等于"#top"字符串。为此,您应该声明例如事件处理程序中的event参数,并使用event.target.id。 所以不要这样:

    $('.scroll').click(function(){
    
        $('html, body').animate({
            scrollTop: $(this.id).offset().top
        }, 500);
    
        setTimeout("$('.scroll-top').fadeIn();",510 );
    
        if (target == "#top"){$('.scroll-top').hide() ;}
    
    });
    

    您应该使用以下代码:

    $('.scroll').click(function(event) { // declaring event variable as an argument
        $('html, body').animate({
            scrollTop: $(this.id).offset().top
        }, 500);
    
        // inspecting the id of the click event's target element
        if (event.target.id == "#top") {
          $('.scroll-top').hide();
        } 
        else {
          setTimeout(function () {
            $('.scroll-top').fadeIn();
          }, 510);
        }
    
    });
    

我修改了你的original code,取消了很多不需要的东西,但还剩下很多东西:

http://jsfiddle.net/uKcQG/3/

它仍然是一个小小的车,但现在滚动似乎正常工作。

但正如我在评论中所建议的,你绝对应该使用Ariel Flesler的 jQuery scrollTo插件完成这项任务:http://demos.flesler.com/jquery/scrollTo/