draggable 拖拽 把一个标签拖到另一个框

2020-11-20  本文已影响0人  文芬

拖拽的时候把一个标签拖动到另一个框,且这个框里已经有元素的话,不可再拖进去。
实现原理就是自定义属性,每次拖完去重置属性,标签有属性的不可再拖进去
支持i9及i9+

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            .fl{float: left;}
            ul li,ul.a {
            line-height: 30px;
            display: block;
            text-align: left;
            width: 200px;
            cursor: pointer;
            border: 1px solid #ccc;
            margin-top: 15px;
            height: 30px;
            background: #F0EFEF;
            border-radius: 5px;
        }
        
        </style>
    </head>
    <body>
        <ul class="fl" ondrop="drop(event)" ondragover="allowDrop(event)" id="teamName">
            <li ondrop="drop(event)" ondragover="allowDrop(event)" >
                <span id="0left2"  draggable="true" ondragstart="drag(event)" >7845454521</span>
            </li>
            <li ondrop="drop(event)" ondragover="allowDrop(event)" >
                <span id="0left3"  draggable="true" ondragstart="drag(event)" >121231212</span>
            </li>
        </ul>
        <div class="clum clearfix fl">
            <ul class="a" ondrop="drop(event)" ondragover="allowDrop(event)" data-drop-done="1">
                
            </ul>
            <ul class="a" ondrop="drop(event)" ondragover="allowDrop(event)" data-drop-done="1">
                
            </ul>
        </div>
    </body>
</html>
<script src="jquery-1.11.1.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
    //清除浏览器默认事件
    function allowDrop(ev) {
        ev.preventDefault();
    }
    //把可拖动元素set
    function drag(ev) {
        ev.dataTransfer.setData("Text", ev.target.id);
    }
    //有元素不能再拖进去
    function drop(ev) {
        if (ev.target.getAttribute('data-drop-done') == "1") {
            var data = ev.dataTransfer.getData("Text");
    
            ev.target.appendChild(document.getElementById(data));
    
            ev.target.setAttribute('data-drop-done', "");
            setAttr();
        }
    }
    
    // 重置可拖入的属性
    function setAttr() {
        $.each($('.clum ul'), function(i, val) {
            var hasChild = $(this).children().length>0 ? true : false;
            if (!hasChild) {
                $(this).attr('data-drop-done', 1);
            };
        })
        $.each($('#teamName  li'), function(i, val) {
            
            var hasChild = $(this).children().length>0 ? true : false;
            
            if (!hasChild) {
                $(this).attr('data-drop-done', 1);
            };
        })
    }
</script>
上一篇 下一篇

猜你喜欢

热点阅读