requirements: CoffeeScript, Backbone.js, Underscore.js
_.debounceメソッドを使うと、簡単にイベント実行を間引きできるので、それを活用して簡易的なモジュールを作ってみた。
このモジュール(=コンストラクター)は、ウインドウがスクロールしだすとscroll:start
、スクロールが終わるとscroll:end
、リサイズしだすとresize:start
、リサイズが終わるとresize:end
イベントをそれぞれトリガーする。
screen.coffee
module.exports= class extends Backbone.View
WAIT= {start: 100, end: 500}
el: window
events:
scroll: ->@trigger "_scroll"
resize: ->@trigger "_resize"
initialize: (opts= {})->
opts= _.defaults opts,
wait: _.defaults (opts.wait ? {}), WAIT
@wait= opts.wait
listenScroll: ->
@listenTo @, "_scroll", _.debounce ->
@trigger "scroll:start"
, @wait.start, immediate= on
@listenTo @, "_scroll", _.debounce ->
@trigger "scroll:end"
, @wait.end
listenResize: ->
@listenTo @, "_resize", _.debounce ->
@trigger "resize:start"
, 100, immediate= on
@listenTo @, "_resize", _.debounce ->
@trigger "resize:end"
, 100
stopListeningScroll: ->
@stopListening @, "_scroll"
stopListeningResize: ->
@stopListening @, "_resize"
このモジュールをアプリ側からrequireして使う:
screen= new (require "screen.coffee")
wait: end: 1000
someView.listenTo screen, "scroll:end", someView.toggle
みたいに。