检测滚动事件
Backbone.js detecting scroll event
我有以下视图
var FullWindow = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'detect_scroll');
},
// bind the events
events : {
"scroll" : "detect_scroll"
},
detect_scroll: function() {
console.log('detected');
}
});
我通过
初始化它var full_window = new FullWindow({el:$('body')});
但我认为它不起作用。
当我将事件更改为
时events : {
"click" : "detect_scroll"
},
没关系。
怎么了?
我不认为body
元素将触发一个滚动事件,除非你明确地给它一个滚动条设置设置其overflow
属性为scroll
在CSS中。来自jQuery文档:
当用户滚动到元素中的不同位置时,将scroll事件发送给元素。它不仅适用于窗口对象,也适用于设置了overflow CSS属性为scroll的可滚动框架和元素(或者当元素的显式高度或宽度小于其内容的高度或宽度时为auto)。
假设您没有显式地为body
元素提供具有overflow:scroll
和/或固定高度的滚动条,则您想要侦听的scroll
事件可能是由window
对象触发的,而不是body
。
我认为这里最好的方法是放弃骨干事件绑定(这实际上只是一个速记,只适用于view.el
元素内的事件),并直接绑定到initialize()
中的窗口:
initialize: function() {
_.bindAll(this, 'detect_scroll');
// bind to window
$(window).scroll(this.detect_scroll);
}
我认为问题在于Backbone使用事件委托来捕获事件,也就是说它将侦听器附加到this.$el
,并且scroll
事件根据定义不会冒泡。因此,如果scroll
事件发生在this.$el
的子(或后代)上,则该事件不能在this.$el
上观察到。
它对click
有效的原因,只是因为click
冒泡。
body和window的滚动条是不同的,你必须确保你没有在window对象上滚动。下面的示例说明了您可能遇到的问题。
jsfiddle
我不确定你是否可以改变'el'的文件。窗口对象,但我不认为这将是一个很好的解决方案。我想说,你最好的选择是使用CSS,就像我做的那样,帮助你使用body元素,或者在body中创建一个div,并引用body标签。
好运。
我有同样的问题,这就是我如何实现它
var MyView = Backbone.View.extend({
el: $('body'),
initialize: function() {
$(window).scroll(function() {
if ($(window).scrollTop()!=0 && $(window).scrollTop() == $(document).height() - $(window).height()) {
if (mpListModel.get('next')) {
var res = confirm('Next page?');
if (res==true) {
myView.fetch()
}
}
}
});
},
events: {},
fetch: function() {
//fetch stuff
}
});var = myView ();
afterRender: function() {
// <div id="page-content" class="page-content"> la class qui contiens le scroll
var $scrollable = this.$el.find('.page-content');
$scrollable.scroll(function() {
alert("event scroll ");
});
},
- 只覆盖箭头键滚动事件
- Javascript如何找到滚动事件的来源
- 谷歌地图劫持了iphone's滚动(触摸事件)-如何恢复
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- jquery/ajax无限滚动事件
- 如何检测滚动事件是否像在触摸设备上一样只触发一次
- 如何查明鼠标按下事件是否发生在滚动条上或元素中的其他任何位置
- 为什么不'我的窗口滚动事件根本没有启动.其他答案没有解决问题
- 在滚动时,在隐藏滚动条和隐藏溢出的同时触发事件
- 如何用javascript调用函数,然后在滚动事件中调用该函数的特定实例
- 将事件列表滚动到给定月份的第一个事件
- '滚动'事件未在CompositeView中激发
- 从父元素取消绑定滚动事件并绑定到子元素
- JavaScript/jQuery未触发滚动事件
- 如何使用javascript检测不可滚动元素中的滚动事件和方向
- Javascript鼠标滚轮事件滚动
- 点击未触发溢出事件:滚动
- 将jquery事件滚动与“;在“上”;
- actionscript 3-as3中的鼠标事件滚动flash和html.有没有办法停止使用javascript
- jquery和事件滚动