我有一个工作滚动mixin(你可以在这个要点中看到)。
App.Scrolling = Em.Mixin.create({
bindScrolling: function() {
var onScroll;
var _this = this;
var scrollFunc = function(){
return _this.scrolled();
};
onScroll = scrollFunc;
$(document).bind('touchmove', onScroll);
$(window).bind('scroll', onScroll);
},
unbindScrolling: function() {
$(window).unbind('scroll');
$(document).unbind('touchmove');
}
});
App.ApplicationView = Ember.View.extend(App.Scrolling, {
didInsertElement: function() {
this.bindScrolling();
},
willRemoveElement: function() {
this.unbindScrolling();
},
scrolled: function() {
console.log('MyView was scrolled : ' + document.body.scrollTop);
}
});
但我相信建议使用Ember运行循环(特别是去抖动 - http://emberjs.com/api/classes/Ember.run.html#method_debounce)去抖动。
此处的非工作代码示例:
问题代码在这里:
onScroll = Ember.run.debounce(this, scrollFunc, 200);
不幸的是,无论我使用什么上下文,我似乎无法让它发挥作用。
非常感谢一些见解。
谢谢,
克里斯
答案 0 :(得分:3)
如果将onScroll
分配给函数
onScroll = function(){Ember.run.debounce(this, scrollFunc, 200);};
答案 1 :(得分:0)
在Ember中去抖动功能的另一种方法如下:
App.Scrolling = Em.Mixin.create({
timer: null,
scrollBinding: function() {
this.set('timer', Em.run.debounce(this, this._scrollFunction, 100));
},
_scrollFunction: function() {
// This function will run after 100ms after scrolling stops
},
});