拖放事件

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript">
        function load(){
            var lists=document.getElementsByTagName("ul");
            var regexp=/\bdnd\b/;
            for(var i=0;i<lists.length;i++){
                if(regexp.test(lists[i].className)) dnd(lists[i]);
            }
            //dnd函数
            function dnd(list){
                var original_class=list.className;
                var entered=0;
                var beituo=null;
                //ondragenter事件
                list.οndragenter=function(e){
                    e=e || window.event;
                    document.getElementById("cont").innerHTML +="enter:"+ e.target;


                    if( e.stopPropagation) e.stopPropagation(); else
                        e.cancelBubble=true;
                    if (e.preventDefault) e.preventDefault();else e.defaultValue=false;


                    var from= e.relatedTarget;
                    entered++;
                    document.getElementById('count').innerText += e.srcElement;
                    //(from && !isChild(from,list)) ||


                    if(beituo !== this && entered==1 ){
                        var dt= e.dataTransfer;
                        var types=dt.types;
                        //IE types.contains("Text");
                        //Chrome types[0]==="text/plain";


                        if(!types || (types[0] && types[0]==="text/plain") || (types.contains && types.contains("Text")))
                        {
                            list.className=original_class+" dropable";
                            return false;
                        }
                        return ;
                    }
                    return false;
                };
                /*
                function isChild(a,b){
                    for(;a;a=a.parentNode)  {
                        document.getElementById('count').innerText += (a===b);
                        if(a===b) return true;
                    }
                    return false;
                }*/


                list.οndragοver=function(e){
                   // document.getElementById("cont").innerHTML +="over";
                    if(beituo==this) return true;
                    return false;
                };
                list.οndragleave=function(e){
                    e=e || window.event;
                    document.getElementById("cont").innerHTML +="leave:" + e.target;


                    if( e.stopPropagation) e.stopPropagation(); else
                        e.cancelBubble=true;
                    if (e.preventDefault) e.preventDefault();else e.defaultValue=false;
                    var to= e.relatedTarget;


                    entered--;
                   // document.getElementById('count').innerText +=entered;


                    if(beituo !==this && entered<=0){
                        list.className=original_class;
                        entered=0;
                    }
                    return false;
                };
                list.οndrοp=function(e){
                     e=e || window.event;
                    var dt= e.dataTransfer;
                    var text=dt.getData("Text");
                    if(text){
                        var item=document.createElement("li");
                        item.draggable=true;
                        item.appendChild(document.createTextNode(text));
                        list.appendChild(item);
                        list.className=original_class;
                        entered=0;
                        e.dataTransfer.dropEffect="copy";
                        return false;
                    }
                }


                var items=list.getElementsByTagName("li");
                for(var i=0;i<items.length;i++){
                    items[i].draggable=true;
                }


                list.οndragstart=function(e){
                    beituo=this;
                    document.getElementById("cont").innerHTML +='start';
                    var e=e || window.event;
                    var target= e.target || e.srcElement;
                    if(target.tagName !== "LI") return false;
                    var dt= e.dataTransfer;
                    dt.setData("Text",target.innerText || target.textContent);
                    //为move或者copy时兼容ie chrome
                    dt.effectAllowed="copy";


                }
                list.οndragend=function(e){
                    beituo=null;
                    document.getElementById("cont").innerHTML +=e.dataTransfer.dropEffect;
                    e =e || window.event;
                    var target= e.target || e.srcElement;
                    if(e.dataTransfer.dropEffect==="move")
                    target.parentNode.removeChild(target);
                }
            }
        }
    </script>
    <style>
        .dropable{
            border:5px solid black;
        }
        .dnd{


        }
        li{


            background-color:green;
            margin:10px;
            display: block;


        }
        ul{
            background-color:orange;
            height:150px;
            border: 5px solid red;
        }
    </style>
</head>
<body οnlοad="load()"  >
<div style="height:100px;background-color:green;"></div>
<ul class="dnd">
    <li>li1---1</li>
    <li>li1---2</li>
    <li>li1---3</li>
</ul>
<div style="height:100px;background-color:green;"></div>
<ul class="dnd" >
    <li>li2---1</li>
    <li>li2---2</li>
    <li>li2---3</li>
</ul>
<div id="count"></div>
<div id="cont"></div>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值