2021-11-16 一天一个例子 li拖拽

实现li标签的拖拽功能,在html5之后,链接、文本和图像默认是可以拖动的,其他的控件想要实现拖拽,在定义的时候将 draggable 设置为true。
在进行拖拽的时候,使用具体的一些方法:

for(var i=0;i<aA.length;i++){
	
		aA[i].ondragstart = function(ev){ //拖拽前触发
		
			this.style.background = 'yellow';
			
			ev.dataTransfer.setData('a','hello');  //存储一个键值对 : value值必须是字符串
			
			ev.dataTransfer.effectAllowed = 'link';
			
		
		};
		
		aA[i].ondragend = function(){  //拖拽结束触发
	}
	
	oDiv.ondragenter = function(){  //相当于onmouseover
	};
	
	oDiv.ondragleave = function(){  //相当于onmouseout	
	};
	
	oDiv.ondragover = function(ev){ //进入目标、离开目标之间,连续触发
	};
	
	oDiv.ondrop = function(ev){  //释放鼠标的时候触发


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
      
      
            margin: 0;
            padding: 0;
        }
        ul{
      
      
            list-style: none;    
        }
        li{
      
      
            float: left;
            width: 200px;
            margin: 10px;
        }
        p{
      
      
            height:30px;
            line-height:30px;
            text-indent:1em;
            font-weight:bold;
            border-bottom:1px #333 dashed;
        }
        #shopping_car{
      
      
            width: 600px;
            height: 300px;
            border: 1px #000 solid;
            clear: both;
        }
        .box1{
      
      
            float:left; width:200px;
        }
        .box2{
      
      
            float:left; width:200px;
        }
        .box3{
      
      
            float:left; width:200px;
        }
    </style>

    <script>
        window.onload = function(){
      
      
            //首先是每一个li是可以进行拖动的,所以
            var aLi = document.getElementsByTagName("li");
            var oDiv = document.getElementById('shopping_car');

            var obj ={
      
      };
			//这里主要是拖拽时进行数据的存储
            for(var i = 0;i<aLi.length;i++){
      
      
                aLi[i].ondragstart = function(ev){
      
      
                    var aP = this.getElementsByTagName('p');
                    ev.dataTransfer.setData('title',aP[0].innerHTML);
                    //这里在进行拖拽的进行保存一个键值对,vaule必须是字符串
                    ev.dataTransfer.setData('money',aP[1].innerHTML);
                };
            }
            oDiv.ondragover = function(ev){
      
      //进入目标、离开目标之间,连续触发。
                ev.preventDefault();//阻止默认事件:元素就可以释放了。
            };
            oDiv.ondrop = function(ev){
      
       //释放鼠标的时候进行释放
                //在释放的时候就将拖拽时保存的数据在div中创建li进行显示
                ev.preventDefault();
                //获取刚刚保存的数据
                var sTitle = ev.dataTransfer.getData('title');
                var sMoney = ev.dataTransfer.getData('money');


                //这里是为了区别是否是第一次拖进div,第一次拖拽进div就需要新建p、新建span等
                if(!obj[sTitle]) {
      
      
                    var oP = document.createElement('p');

                    var oSpan = document.createElement('span');
                    oSpan.className = 'box1';
                    oSpan.innerHTML = 1;
                    oP.appendChild(oSpan);

                    var oSpan = document.createElement('span');
                    oSpan.className = 'box2';
                    oSpan.innerHTML = sTitle;
                    oP.appendChild(oSpan);

                    var oSpan = document.createElement('span');
                    oSpan.className = 'box3';
                    oSpan.innerHTML = sMoney;
                    oP.appendChild(oSpan);

                    oDiv.appendChild(oP);

                    obj[sTitle] = 1;
                }else{
      
      
                    //第二次之后的拖拽都是只用改变number即可,
                    var box1 = document.getElementsByClassName('box1');
                    var box2 = document.getElementsByClassName('box2');
                    for(var i = 0; i< box2.length;i++){
      
      
                        if(box2[i].innerHTML == sTitle){
      
      
                            box1[i].innerHTML = parseInt(box1[i].innerHTML) + 1;
                        }
                    }
                }
            };
            
        };
    </script>

</head>
<body>
    <ul>
        <li draggable="true"> 
            <p>java</p>
            <p>40¥</p>
        </li>
        <li draggable="true">
            <p>kotlin</p>
            <p>69¥</p>
        </li>
        <li draggable="true">
            <p>js</p>
            <p>48¥</p>
        </li>
    </ul>
   <div id="shopping_car"></div>
    
</body>
</html>

注意的地方是: var aP = this.getElementsByTagName(‘p’); 这里刚开始我是写的 document.getElementsByTagName(),这里应该是this。如果写的document的话就是只能获取到第一个li下面的p元素,不能正确获取都li的title。

猜你喜欢

转载自blog.csdn.net/qq_45204129/article/details/121357557