Meteor的滚动事件

我在meteor文档中找不到meteor的滚动事件。 当有人在meteor应用程序中滚动窗口时,我该怎么做?

我试过'scroll window' : function(event) { ... } ,它不能按预期工作。

我也一直在搞乱这个。

我还没有找到一种方法在Template.template.events干净利落地完成它。

现在显而易见的临时解决方案是使用简单的jQuery滚动事件。

$(window).scroll(function(){//your code}); 应该做的伎俩。

我试图用作选择器而无济于事的是:

'scroll *'

'scroll body'

'scroll document'

而且很自然

'scroll window'

我在通用模板的事件中尝试了所有这些选择器,以及UI.body的事件,因为这是包含页面主体的新的blaze模板。

重申:你最好暂时使用jQuery。

这有点晚了,但我提出了一个解决方案; 至少在我目前的项目中。

我正在使用Meteor实现D3,我想要一个自定义缩放function,可以在用户滚动时更改模板的尺寸。

创建一个反应变量’zoom’

 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中引用它以使其具有react native。

 Template.graph.helpers({ zoom: function() { // This will be called when 'zoom' changes, // so treat this as your events function return Template.instance().zoom.get(); } }); 

在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'); }) 

作为部分解决方案,您可以在您关心的任何元素上侦听mousewheel事件。 很多时候,这正是你想要的。

例如,以下事件侦听器将阻止用户使用滚轮滚动,但他们仍然可以使用页面侧面的导航栏。 (如果你还没有用overflowy: hidden;禁用它overflowy: hidden;

 Template.body.events({ 'mousewheel': function(event, template) { console.log("scrolled"); return false; } });