无法调用相同的.animate和scrollTop:两次没有错误

时间:2013-01-28 19:50:57

标签: jquery callback coffeescript

对于javascript,我是初学者。我是一名用户体验设计师,我试图在我的个人网站上使用一些代码。到目前为止,它进展顺利,但我有一个错误,谷歌到目前为止还没有帮我解决。

我正在做的是使用按钮执行以下操作:

  1. 点击后,它会使用回调统计.toggle。
  2. 回调的第一部分使用.slideDown打开一个部分并向下滚动以显示隐藏的内容
  3. 同时,无论您点击它的位置如何,它都会将该部分的顶部从页面顶部移动到50px。这就是隐藏的内容现在填充页面。
  4. 这部分工作正常,没有错误。这是我的问题。

    1. 在回调中,我希望它使用.slideUp再次关闭内容区域。这很好。
    2. 但是当我尝试再次使用scrollTop时,我收到了这个错误:

      未捕获的TypeError:对象#的属性“top”不是函数

    3. 这是我的咖啡因:

      jQuery(document).ready theExpander = ->
        jQuery("#expander").toggle (->
          # first callback to slide it down
          jQuery(".expanding").slideDown 1000
          jQuery(this).toggleClass "darker"
          jQuery("html, body").animate
            scrollTop: jQuery(this).offset().top - 50
          , 600
          jQuery(".more").addClass "hidden"
          jQuery(".less").addClass "shown"
        ), ->
          # second callback to slide it up
          jQuery(".expanding").slideUp 1000
          jQuery(this).toggleClass "darker"
          jQuery("html, body").animate
            scrollTop: jQuery(this).offset().top 200
          , 600
          jQuery(".more").removeClass "hidden"
          jQuery(".less").removeClass "shown"
      

      第二次点击正在启动回调的按钮时出现错误。我不清楚为什么会这样。我可以不让回调使用相同的scrollTop两次吗?

      有没有人知道我在这做什么?如果我在第二个回调中删除这些行,它可以正常工作:

          jQuery("html, body").animate
            scrollTop: jQuery(this).offset().top 200
          , 600
      

      我从哪里开始?我是否需要在第二次回调中为Property 'top' of object #<Object> is not a function错误或遗漏重新识别ID?

      我是通过极端的试错来写这个,这是我做过的第一次回调。如果有人可以指出我的方式的错误,那将非常感激。

1 个答案:

答案 0 :(得分:1)

jQuery(this).offset().top 200

被翻译为

jQuery(this).offset().top(200)

由于top不是函数,而是属性,因此会出错。

你的意思是?

jQuery(this).offset().top - 200