Javascript 流星滚动事件
我在meteor文档中找不到meteor的滚动事件。当有人在meteor应用程序中向下滚动窗口时,我该怎么做Javascript 流星滚动事件,javascript,jquery,meteor,Javascript,Jquery,Meteor,我在meteor文档中找不到meteor的滚动事件。当有人在meteor应用程序中向下滚动窗口时,我该怎么做 我尝试了“滚动窗口”:函数(事件){…},但没有按预期工作 我也一直在胡闹 在Template.Template.events中,我还没有找到一种干净的方法 目前显而易见的临时解决方案是使用一个简单的jQuery滚动事件 $(窗口)。滚动(函数(){//您的代码})应该可以做到这一点 我试图用作选择器但无效的是: “滚动*” “滚动体” “滚动文档” 自然地 “滚动窗口” 我在一个通用模
我尝试了
“滚动窗口”:函数(事件){…}
,但没有按预期工作 我也一直在胡闹
在Template.Template.events
中,我还没有找到一种干净的方法
目前显而易见的临时解决方案是使用一个简单的jQuery滚动事件
$(窗口)。滚动(函数(){//您的代码})代码>应该可以做到这一点
我试图用作选择器但无效的是:
“滚动*”
“滚动体”
“滚动文档”
自然地
“滚动窗口”
我在一个通用模板的事件中尝试了所有这些选择器,以及在UI.body
上的事件,因为这是包含页面主体的新blaze模板
重申一下:目前使用jQuery可能更好。这有点晚了,但我想出了一个解决方案;至少在我当前项目的背景下
我正在用Meteor实现D3,我想要一个定制的缩放功能,当用户滚动时可以改变模板的尺寸
创建一个被动变量“缩放”
Template.graph.onCreated(function() {
var self = this;
self.zoom = new ReactiveVar(0);
$(window).on('scroll', function(e) {
// ... event processing stuff;
// say it produces value 'zoomAmount' ...
self.zoom.set(zoomAmount);
}
});
创建一个返回缩放的辅助对象。
在隐藏元素的模板DOM中引用它,使其成为被动的
Template.graph.helpers({
zoom: function() {
// This will be called when 'zoom' changes,
// so treat this as your events function
return Template.instance().zoom.get();
}
});
作为部分解决方案,您可以在您关心的任何元素上侦听mouseweel
事件。很多时候这正是你想要的
例如,下面的事件侦听器将阻止用户使用滚轮滚动,但他们仍然可以使用页面侧面的导航栏。(如果未使用overflowy:hidden;
禁用它)
在Meteor中,滚动事件没有本机模板支持,因此您必须在template.name.onRendered
回调中执行。但是,如果不将其从Template.name.onDestroyed
中删除,将导致内存泄漏。这最好通过名称空间事件来实现,因为类似于$(window).off('scroll')代码>将从窗口分离所有滚动事件
import { $ } from 'jquery';
Template.myTemplateName.onRendered(function(){
// You can do this multiple times
$(window).on('scroll.whateverNamespace', function() { ... });
$(window).on('scroll.whateverNamespace', function() { ... });
})
Template.myTemplateName.onDestroyed(function(){
$(window).off('scroll.whateverNamespace');
})
现在已经很晚了,我想自从问这个问题以来已经发生了很大的变化,但是我自己也遇到了这个问题,对于其他可能需要知道的人来说,我发现的有效方法是创建一个名为“scroll.container”的帮助器,其中容器是一个包含页面主体的div(用户可以在我的应用程序中滚动)我的功能如下所示:
Template.main_page.events({
'scroll .container': function(event) {
console.log(event.currentTarget.scrollTop);
}
});
据我所知,这方面没有任何变化:这一建议让我感到不安。大多数用户可能使用轮子,但很多抓取,使用键盘快捷键或其他辅助工具来控制滚动。因此,除非你试图实现的内容非常符合“增强”类别,否则这一活动根本就不能依靠滚动事件。鼠标滚轮调用不一定意味着页面已被滚动。我遇到的问题是,如果导航到一个页面,并返回到上一个页面,则会多次添加该事件。@JakobAlexanderEichler使用Template.onDestroyed()方法将其关闭。
Template.main_page.events({
'scroll .container': function(event) {
console.log(event.currentTarget.scrollTop);
}
});