素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

JSDeferred


JSDeferred –
CodeRepos::Share – Trac
は簡単に非同期処理ができるライブラリ。

JSDeferredを使うと、AutoPagerizeのアイコンをカーソル移動に少し遅れて移動するスクリプトは下のように書ける。

// ==UserScript==
// @name           moveAutoPagerizeIcon
// @namespace      http://d.hatena.ne.jp/javascripter/
// @include        http*
// @require        http://svn.coderepos.org/share/lang/javascript/jsdeferred/trunk/jsdeferred.userscript.js
// ==/UserScript==

with (D()) {
  var icon = document.getElementById('autopagerize_icon'),
      last;
  if (icon == null) return;
  var s = icon.style;
  document.addEventListener('mousemove', function (e) {
    last = Date.now();
    var d = last;
    wait(0.5).
    next(function () {
      if (last == d) {
        var _color = getComputedStyle(icon, null).backgroundColor;
        s.backgroundColor = 'red';
        wait(0.5).
        next(function () {
          s.backgroundColor = _color;
        });
      } else {
        s.top = e.clientY + 'px';
        s.left = e.clientX + 'px';
      }
    });
  }, false);
}

addEventListenerもラップしたいんだけど、どうしたらいいんだろう。Deferred.registerっていうメソッドがあるのでそれを使えばいいのかな?