Javascript Jquery和带有Rails和Haml的CoffeeScript scrollTo

Javascript Jquery和带有Rails和Haml的CoffeeScript scrollTo,javascript,jquery,ruby-on-rails,coffeescript,haml,Javascript,Jquery,Ruby On Rails,Coffeescript,Haml,我正在尝试使用CoffeeScriptRails和Haml执行一项非常简单的任务。我没怎么用过咖啡脚本,但我想试试 当用户按下按钮时,我希望视图滚动到某个div id。在我的页面顶部,我有一个如下的id: #area_1 = link_to "Area", "#", id: "area_button_1" $ -> scrollToArea = (button, area) -> $(button).click -> scrollTo(area, 8

我正在尝试使用
CoffeeScript
Rails
Haml
执行一项非常简单的任务。我没怎么用过咖啡脚本,但我想试试

当用户按下按钮时,我希望视图滚动到某个div id。在我的页面顶部,我有一个如下的id:

#area_1
= link_to "Area", "#", id: "area_button_1"
$ ->
  scrollToArea = (button, area) ->
    $(button).click ->
      scrollTo(area, 800)
:javascript
  scrollToArea("#area_button_1", "#area_1") 
$(function() {
  var scrollToArea = function(button, area) { ... };
});
我的链接如下所示:

#area_1
= link_to "Area", "#", id: "area_button_1"
$ ->
  scrollToArea = (button, area) ->
    $(button).click ->
      scrollTo(area, 800)
:javascript
  scrollToArea("#area_button_1", "#area_1") 
$(function() {
  var scrollToArea = function(button, area) { ... };
});
在自动生成的
CoffeScript
文件中,我有一个如下函数:

#area_1
= link_to "Area", "#", id: "area_button_1"
$ ->
  scrollToArea = (button, area) ->
    $(button).click ->
      scrollTo(area, 800)
:javascript
  scrollToArea("#area_button_1", "#area_1") 
$(function() {
  var scrollToArea = function(button, area) { ... };
});
我尝试在我的一个视图文件中调用此方法,如下所示:

#area_1
= link_to "Area", "#", id: "area_button_1"
$ ->
  scrollToArea = (button, area) ->
    $(button).click ->
      scrollTo(area, 800)
:javascript
  scrollToArea("#area_button_1", "#area_1") 
$(function() {
  var scrollToArea = function(button, area) { ... };
});

但这不起作用。你知道我做错了什么吗

我不熟悉coffeeScript,但这里有一个jQuery来完成这个任务,希望它的翻译应该很简单

这样做的目的是使窗口的
scrollTop
与目标元素的顶部
offset()
位置相等

<a href="#button" class="scroll-trigger">Go to button</a>


如果要设置滚动动画,请使用以下命令:

$('.scroll-trigger').click(function() {
    var $el = $(this);
    $('html, body').animate({
        scrollTop: $($el.attr('href')).offset().top
    }, 2000);
});

您可能有范围界定问题<代码>$->是一个函数调用,类似于:

$(function() { ...
});
并自动生成CoffeeScript,使您的CoffeeScript成为JavaScript,如下所示:

#area_1
= link_to "Area", "#", id: "area_button_1"
$ ->
  scrollToArea = (button, area) ->
    $(button).click ->
      scrollTo(area, 800)
:javascript
  scrollToArea("#area_button_1", "#area_1") 
$(function() {
  var scrollToArea = function(button, area) { ... };
});
在整个过程中(除非您)还有另一个自动执行的函数包装器,以防止范围爬行

您甚至不需要这里的
$->
,该代码只是定义了一个函数,因此它可以随时运行,您不需要等到DOM准备就绪。如果要在其他地方使用,还需要将
scrollToArea
函数推入全局名称空间。结果如下:

window.scrollToArea = (button, area) ->
  $(button).click ->
    scrollTo(area, 800)
或:

在使用
scolltorea
的地方,您可能还需要一个
$()
包装器,在DOM准备就绪之前,您可能不想调用
scrollToArea

:javascript
  $(function() { scrollToArea("#area_button_1", "#area_1") )

我不是汉密尔顿人,所以我希望我没有破坏语法。

谢谢,我目前正在努力解决的主要是翻译部分。或者我可能错过了一些与Rails或Haml相关的东西。
scrollTop
scrollTo
之间有什么区别
scrollTo
似乎更简单……您必须为此使用一个插件,因为只有在普通的jQuery中才有。谢谢,scrollTo似乎不像Roy指出的那样工作(如果我没有得到插件的话)。如何将其转换为
CoffeeScript
$(“html,body”).animate({scrollTop:$(“#area_3”).offset().top},'fast')?@Anders:去掉分号,你就完成了(或者留下分号,你就完成了)。或者你可以这样做:我问了另一个(不相关的)咖啡脚本问题。如果你想看,就看一看,好像你知道自己在做什么。:)