dragLikeAdobeReader

By javascripter Last update Jun 24, 2008 — Installed 97 times.
// ==UserScript==
// @name           dragLikeAdobeReader
// @namespace      http://d.hatena.ne.jp/javascripter/
// @include        http*
// ==/UserScript==
(function() {
  document.documentElement.style.cursor = '-moz-grab';

  var grabbing = null;
  var x = null;
  var y = null;
  var rule = /input|textarea|button|select|a/i;
  var select = null;
  var sRange = window.getSelection();

  window.addEventListener('mousedown',
  function(e) {
    if (select && e.button == 0) {
      sRange.removeAllRanges();
      select = false;
    }
    if (rule.test(e.target.tagName) || e.altKey || e.button != 0){
      document.documentElement.style.cursor = 'auto';
      select = true;
    return;
    }
    grabbing = true;
    document.documentElement.style.cursor = '-moz-grabbing';
    x = e.clientX,
    y = e.clientY;
    e.preventDefault();
  },
  false);
  window.addEventListener('mouseup',
  function(e) {
    if (rule.test(e.target.tagName) || !grabbing || e.button != 0) return;
    grabbing = false;
    document.documentElement.style.cursor = '-moz-grab';
    x,
    y = null;
    e.preventDefault();
  },
  false);

  window.addEventListener('mousemove',
  function(e) {
    if (grabbing && e.button ==0) {
      scrollDocument(e);
      e.preventDefault();
    }
  },
  false);

  function scrollDocument(e) {
    window.scrollBy(x - (x = e.clientX), y - (y = e.clientY));
  }
})();