LoginSignup
0
0

More than 5 years have passed since last update.

ウインドウのリサイズとスクロールの開始と終了を通知するオブジェクト

Posted at

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

みたいに。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0