测试拖动Table行

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>测试拖动Table行</title>
    <script type="text/javascript" src="base.js"></script>
</head>
<body>
    <a id="text_1"></a>
    <h1><a href="#text_2">Hello1</a></h1>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <a id="text_2"></a>
    <h1><a href="#text_3">Hello2</a></h1>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
        <style>
            .table{
                width:60%;
                border: 1px solid red;
                border-collapse: collapse;
            }
            .table td{
                border: 1px solid red;
                height: 20px;
            }
        </style>

        <script>
            window.onload = function() {
                //绑定事件
                var addEvent = document.addEventListener ? function (el, type, callback) {
                    //W3C

                    //第3个参数用来设置事件是在事件捕获时执行,还是事件冒泡时执行;
                    //true=捕获时执行  false=冒泡时执行
                    //为了与 IE 统一,都在冒泡时执行
                    el.addEventListener(type, callback, false);
                } : function (el, type, callback) {
                    //IE

                    //attachEvent()方法没有相关设置,默认是在事件冒泡时执行的.
                    el.attachEvent("on" + type, callback);
                };

                //移除事件
                var removeEvent = document.removeEventListener ? function (el, type, callback) {
                    //W3C
                    el.removeEventListener(type, callback);
                } : function (el, type, callback) {
                    //IE
                    el.detachEvent("on" + type, callback);
                };

                //精确获取样式
                var getStyle = document.defaultView ? function (el, style) {
                    //W3C
                    return document.defaultView.getComputedStyle(el, null).getPropertyValue(style);
                } : function (el, style) {
                    style = style.replace(/\-(\w)/g, function ($, $1) {
                        return $1.toUpperCase();
                    });
                    return el.currentStyle[style];
                };

                var dragManager = {
                    clientY: 0,
                    draging: function (e) {//mousemove时拖动行
                        var dragObj = dragManager.dragObj;
                        if (dragObj) {
                            e = e || event;
                            if (window.getSelection()) {
                                //W3C
                                window.getSelection().removeAllRanges();
                            } else if (document.selection) {
                                //IE
                                document.selection.empty();
                            }
                            var y = e.clientY;
                            var down = y > dragManager.clientY;//是否向下移动
                            var tr = document.elementFromPoint(e.clientX, e.clientY);
                            if (tr && tr.nodeName == "TD") {
                                tr = tr.parentNode;
                                dragManager.clientY = y;
                                if (dragObj !== tr) {
                                    tr.parentNode.insertBefore(dragObj, (down ? tr.nextSibling : tr));
                                }
                            }
                        }
                    },
                    dragStart: function(e) {
                        e = e || event;
                        var target = e.target || e.srcElement;
                        if (target.nodeName == "TD") {
                            target = target.parentNode;
                            dragManager.dragObj = target;
                            if (!target.getAttribute("data-background")) {
                                var background = getStyle(target, "background-color");
                                target.setAttribute("data-background", background);
                            }
                            //显示为可移动的状态
                            target.style.backgroundColor = "#ccc";
                            target.style.cursor = "move";
                            dragManager.clientY = e.clientY;
                            addEvent(document, "mousemove", dragManager.draging);
                            addEvent(document, "mouseup", dragManager.dragEnd);
                        }
                    },
                    dragEnd: function (e) {
                        var dragObj = dragManager.dragObj;
                        if (dragObj) {
                            e = e || event;
                            var target = e.target || e.srcElement;
                            if (target.nodeName == "TD") {
                                target = target.parentNode;
                                dragObj.style.backgroundColor = dragObj.getAttribute("data-background");
                                dragObj.style.cursor = "default";
                                dragManager.dragObj = null;
                                removeEvent(target, "mouseover", dragManager.draging);
                                removeEvent(target, "mouseup", dragManager.dragEnd);

                                setTrBgColor();
                            }
                        }
                    },
                    main: function (el) {
                        addEvent(el, "mousedown", dragManager.dragStart);
                    }
                };

                //奇偶行的背景色区分
                var setTrBgColor = function () {
                    var table = document.getElementById("table");
                    var trs = table.getElementsByTagName("tr");
                    var i = 0, len = trs.length;
                    for (; i < len; i++) {
                        if (i % 2 == 1) {
                            trs[i].style.backgroundColor = "#eee";
                        } else {
                            trs[i].style.backgroundColor = "#fff";
                        }
                    }
                };

                setTrBgColor();
                var el = document.getElementById("table");
                dragManager.main(el);
            };
        </script>
    <h1>表格行拖动</h1>
    <table id="table" class="table">
        <tbody>
        <tr>
            <td>1</td>
            <td>One</td>
            <td>dom.require</td>
        </tr>
        <tr id="2" >
            <td class="2">2</td>
            <td>Two</td>
            <td>ControlJS </td>
        </tr>
        <tr id="3" >
            <td class="3">3</td>
            <td>Three</td>
            <td>HeadJS</td>
        </tr>
        <tr id="4" >
            <td class="4">4</td>
            <td>Four</td>
            <td>LAB.js</td>
        </tr>
        <tr id="5" >
            <td class="5">5</td>
            <td>Five</td>
            <td>$script.js</td>
        </tr>
        <tr id="6" >
            <td class="6">6</td>
            <td>Six</td>
            <td>NBL.js</td>
        </tr>
        </tbody>
    </table>

    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <a id="text_3"></a>
    <h1><a href="#text_1">Hello3</a></h1>

    <A HREF="doc1.html#numbers" TARGET="window2" onmouseover="window.status='Click here to jump to the anchor numbers in doc1.html in window2';return true;">Numbers</A>
    <A HREF=""
        onMouseOver="window.status='Click this if you dare!'; return true"
        onClick="this.href='doc1.html#numbers'">
        <B>Click me</B></A>
    <label for="name" onmouseover="this.title='Click me to let the input get the focus.'">姓名:</label>
    <input id="name">
    <dialog id="dialog">Dialog</dialog>
    <button onclick="document.getElementById('dialog').show()">点我</button>
    <br><br><br>
    <input type="color">
    <input type="date">
    <input type="datetime">
    <input type="datetime-local">
    <input type="email">
    <input type="image">
    <input type="month">
    <input type="number">
    <input type="range">
    <input type="search">
    <input type="time">
    <input type="url">
    <input type="week">
</body>
</html>

猜你喜欢

转载自blog.csdn.net/hsl0530hsl/article/details/80213988