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:去掉分号,你就完成了(或者留下分号,你就完成了)。或者你可以这样做:我问了另一个(不相关的)咖啡脚本问题。如果你想看,就看一看,好像你知道自己在做什么。:)