Backbone.js正在检测滚动事件

lymnna71  于 2022-11-10  发布在  其他
关注(0)|答案(5)|浏览(142)

我有以下看法

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"
},

没关系的,我很好
你怎么了?

vof42yt1

vof42yt11#

我不认为body元素会触发scroll事件,除非您通过在CSS中将overflow属性设置为scroll来显式地给予它一个滚动条。
当用户滚动到元素中的不同位置时,scroll事件将被发送到该元素。它适用于窗口对象,但也适用于可滚动框架和溢出CSS属性设置为scroll(或当元素的显式高度或宽度小于其内容的高度或宽度时设置为auto)的元素。
假设您没有显式地为body元素提供overflow:scroll和/或固定高度的滚动条,那么您要侦听的scroll事件可能是由window对象触发的,而不是由body触发的。
我认为这里最好的方法是删除Backbone事件绑定(这实际上只是一种简写,只适用于view.el元素中的事件),并直接绑定到initialize()中的窗口:

initialize: function() {
    _.bindAll(this, 'detect_scroll');
    // bind to window
    $(window).scroll(this.detect_scroll);
}
rpppsulh

rpppsulh2#

我认为问题在于Backbone使用事件委托来捕获事件,也就是说,它将监听器附加到this.$el,并且scroll事件没有根据定义冒泡。因此,如果scroll事件发生在this.$el的子(或后代)上,则在this.$el上无法观察到该事件。
它对click有效的原因,只是因为click冒泡了。

ltqd579y

ltqd579y3#

body和window的滚动条是不同的,你必须确保你没有在window对象上滚动。这里有一个jsfiddle说明你可能遇到的问题。
jsfiddle
我不确定是否可以将'el'改为document.window对象,但我认为这不是一个好的解决方案。我认为最好的办法是使用CSS,就像我在body元素中所做的那样,或者在body中创建一个div,并在body标签中引用该节。
祝你好运

kokeuurv

kokeuurv4#

我遇到了同样问题,这是我实现它的方法

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
}

});变量myView =我的视图();

6yjfywim

6yjfywim5#

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

相关问题