StrangeElement

  • /*
     * @title StrangeElement
     * @description リンクやボタン、画像などをドラッグで移動できます。ただそれだけです。Firefox限定?動作不安定(うまくドラッグできなかったり、位置がおかしかったり)
     * @include http://*
     * @license MIT License
     * @require 
     */
    
    (function(){
        var nodeNames = ["BODY", "A", "INPUT", "IMG", "SPAN", "DIV", "TEXTAREA"];
    
        var target = null;
        var oldBorder = "";
        var mouseX = -1;
        var mouseY = -1;
    
        function addEvent(node){
            if(nodeCheck(node)){
                addClick(node);
                addMouseDown(node);
            }
    
            var children = node.childNodes;
    
            for(var i = 0; i < children.length; i++){
                addEvent(children[i]);
            }
        }
    
        function addClick(node){
            node.addEventListener("click", function(e){
                e.stopPropagation();
                e.preventDefault();            
            }, false);
        }
    
        function addMouseDown(node){
            node.addEventListener("mousedown", function(e){
                target = node;
                oldBorder = node.style.border;
    
                target.style.border = "solid 1px blue";
                target.style.position = "absolute";
                target.style.left = e.screenX + "px";
                target.style.top = e.screenY + "px";
    
                e.stopPropagation();
                e.preventDefault();
            }, false);
        }
    
        function addMouseMove(node){
            node.addEventListener("mousemove", function(e){
                if(target){
                    target.style.left = e.clientX + "px";
                    target.style.top = e.clientY + "px";
    
                    e.stopPropagation();
                    e.preventDefault();
                }
            }, false);
        }
    
        function addMouseUp(node){
            node.addEventListener("mouseup", function(e){
                mouseX = -1;
                target.style.border = oldBorder;
                target = null;
    
                e.stopPropagation();
                e.preventDefault();
            }, false);
        }
    
        function nodeCheck(node){
            for(var i = 0; i < nodeNames.length; i++){
                if(nodeNames[i] == node.nodeName){
                    return true;
                }
            }
    
            return false;
        }
    
        document.getElementsByTagName("HTML")[0].style.position = "absolute";
        addEvent(document);
        addMouseUp(document);
        addMouseMove(document);
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2010/06/01 12:10:10 - 2010-06-01