• 多个div拖拽功能


    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>1231</title>
    <style type="text/css">
    *{margin:0;padding:0;}
    ul,li{list-style-type:none;}
    a{text-decoration:none;}
    a:hover{text-decoration:underline;}
    img{border:0;}
    .wrapper{700px;margin:10px auto;}
    .top{height:40px;text-align:center;line-height:40px;}
    .content ul{float:left;}
    .content li{200px;height:100px;margin:3px;border:1px solid red;}
    .content p{height:20px;background:#ccc;cursor:move;}
    </style>
    </head>

    <body>
    <div class="wrapper">
        <div class="top"><h1>drag</h1></div>
        <div class="content" id = "drag">
            <ul>
                <li><p>demo0</p></li>
                <li><p>demo1</p></li>
                <li><p>demo2</p></li>
            </ul>
            <ul>
                <li><p>demo3</p></li>
                <li><p>demo4</p></li>
                <li><p>demo5</p></li>
            </ul>
            <ul>
                <li><p>demo6</p></li>
                <li><p>demo7</p></li>
                <li><p>demo8</p></li>
            </ul>
        </div>
    </div>
    <script type="text/javascript">
    window.onload = function(){
        var drag = document.getElementById("drag"),
            oPara = drag.getElementsByTagName("p"),
            oLi = drag.getElementsByTagName("li"),
            dragObj = {};
        for(var i=0,len=oPara.length;i<len;i++){
            oPara[i].onmousedown = function(e){
                if(dragObj.o != null){ return false;}
                dragObj.o = this.parentNode;
                var data = getXY(dragObj.o),
                    e = e || window.event;
                    dragObj.xx = [(e.clientX - data[0]),(e.clientY-data[1])];
                dragObj.o.style.left = e.clientX - dragObj.xx[0]+"px";
                dragObj.o.style.top = e.clientY - dragObj.xx[1]+"px";
                dragObj.o.style.width = data[2]+"px";
                dragObj.o.style.height = data[3]+"px";
                dragObj.o.style.position = "absolute";
                var cloneDiv = document.createElement("li");
                cloneDiv.style.width = data[2]+"px";
                cloneDiv.style.height = data[3]+"px";
                dragObj.otemp = cloneDiv;
                dragObj.o.parentNode.insertBefore(cloneDiv,dragObj.o);
            }
        }
        document.onmousemove = function(e){
            var e = e || window.event;
            if( dragObj.o != null){
                dragObj.o.style.left = e.clientX - dragObj.xx[0]+"px";
                dragObj.o.style.top = e.clientY - dragObj.xx[1]+"px";
                createtmpl(e);
            }
        }
        document.onmouseup = function(){
            if(dragObj.o != null){
                dragObj.o.style.width=oLi[0].offsetWidth+"px";
                dragObj.o.style.height=oLi[0].offsetHeight+"px";
                dragObj.otemp.parentNode.insertBefore(dragObj.o,dragObj.otemp)
                dragObj.o.style.position=""
                dragObj.otemp.parentNode.removeChild(dragObj.otemp);
                dragObj={}
            }
        }
        function createtmpl(e){
            for(var i=0,len=oLi.length;i<len;i++){
                if(oLi[i] == dragObj.o){
                    continue;
                }
                var b = inner(oLi[i],e);
                if(b == 0){ continue; }
                if(b == 1){
                    oLi[i].parentNode.insertBefore(dragObj.otemp,oLi[i]);
                }else{
                    if(oLi[oLi[i].parentNode.children.length-1] == oLi[i]){
                        oLi[i].parentNode.appendChild(dragObj.otemp);
                    }else{
                        oLi[i].parentNode.insertBefore(dragObj.otemp,nextSibling(oLi[i]));
                    }
                }
            }
        }
    }
    function nextSibling(obj){
        var onext = obj.nextSibling;
        while(onext.nodeType != 1){
            onext = onext.nextSibling;
        }
    }
    function inner(obj,e){
       var a = getXY(obj);
        if(e.clientX>a[0]&&e.clientX<(a[0]+a[2])&&e.clientY>a[1]&&e.clientY<(a[1]+a[3])){
            if(e.clientY < (a[1] + a[3]/2)){
                return 1;
            }else{
                return 2;
            }
        }else{
            return 0;
        }
    }
    function getXY(obj){
        var l = obj.offsetLeft,
            t = obj.offsetTop,
            w = obj.offsetWidth,
            h = obj.offsetHeight;
        while(obj = obj.offsetParent){
            l += obj.offsetLeft;
            t += obj.offsetTop;
        }
        return [l,t,w,h];
    }
    </script>
    </body>
    </html>

  • 相关阅读:
    JavaScript-Runoob:JavaScript JSON
    JavaScript-Runoob:JavaScript let 和 Const
    JavaScript-Runoob:JavaScript this 关键字
    System.AttributeTargets.cs
    笔记-bat:列表
    Nginx模块举例说明
    Docker拉取镜像报错 uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
    Mysql聚簇索引和非聚簇索引的区别
    Atitit。Cas机制 软件开发 编程语言 无锁机制 java c# php
    百度ueditor编辑支持word内容和截图的复制黏贴
  • 原文地址:https://www.cnblogs.com/xiuciedward/p/3293190.html
Copyright © 2020-2023  润新知