Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 流星滚动事件_Javascript_Jquery_Meteor - Fatal编程技术网

Javascript 流星滚动事件

Javascript 流星滚动事件,javascript,jquery,meteor,Javascript,Jquery,Meteor,我在meteor文档中找不到meteor的滚动事件。当有人在meteor应用程序中向下滚动窗口时,我该怎么做 我尝试了“滚动窗口”:函数(事件){…},但没有按预期工作 我也一直在胡闹 在Template.Template.events中,我还没有找到一种干净的方法 目前显而易见的临时解决方案是使用一个简单的jQuery滚动事件 $(窗口)。滚动(函数(){//您的代码})应该可以做到这一点 我试图用作选择器但无效的是: “滚动*” “滚动体” “滚动文档” 自然地 “滚动窗口” 我在一个通用模

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


我尝试了
“滚动窗口”:函数(事件){…}
,但没有按预期工作

我也一直在胡闹

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

});