HTML5拖拽效果

认真看例子,你会看得懂:

<body>
    <ul>
        <li draggable="true">我</li>
        <li draggable="true">爱</li>
        <li draggable="true">你</li>
    </ul>

<div id='div'><div>
<script>
    /*
        拖拽元素事件:事件对象为被拖拽元素
            dragstart:拖拽前触发
            drag:拖拽前、拖拽结束之间连续触发
            dragend:拖拽结束触发
        目标元素事件:事件对象为目标元素
            dragenter:进入目标元素触发,相当于mouseover
            dragover:进入目标、离开目标之间连续触发
            dragleave:离开目标元素触发,相当于mouseout
            drop:在目标元素上释放鼠标触发
    */
    var ali = document.getElementsByTagName('li');
    var adiv = document.getElementById('div');
    for(let i=0;i<ali.length;i++){
        ali[i].ondragstart = function (ev) {
            this.style.background = 'yellow';
            
            // dataTransfer对象可以用来保存被拖动的数据,参数必须都是字符串
            ev.dataTransfer.setData('content',this.innerText);

            // 拖拽进入目标元素时修改鼠标样式(值可以为:none,copy,copyLink,copyMove,link,linkMove,move,all,uninitialized)
            ev.dataTransfer.effectAllowed = 'copyLink';

            // 设置拖拽时的鼠标旁边显示的元素,三个参数:元素,横坐标x,纵坐标y
            ev.dataTransfer.setDragImage(this,0,0);
        }
        ali[i].ondrag = function () {
            console.log('拖拽中');
        }
        ali[i].ondragend = function () { 
            this.style.background = 'rgb(206, 204, 204)';
        }
    }
    adiv.ondragenter = function(){
        this.style.background = 'blue';
    }
    adiv.ondragover = function(event){
        console.log('进入了');
        // 要想触发drop事件,就必须在dragover事件中阻止默认事件
        event.preventDefault();
    }
    adiv.ondragleave = function(){
        this.style.background = 'red';
    }
    adiv.ondrop = function(event){
        // 阻止默认事件:以免让从外部被拖拽的元素执行浏览器的默认行为
        event.preventDefault();
        console.log('释放了',event.dataTransfer.getData('content'));
        adiv.innerText += event.dataTransfer.getData('content');

        // 读取从外部拖拽进来的文件信息
        console.log(event.dataTransfer.files);

        // 读取拖拽进来的文件
        var fd = new FileReader();
        fd.readAsDataURL(event.dataTransfer.files[0]);
        fd.onload=()=>{
            console.log('文件内容:',fd.result);
            var oimg = document.createElement('img');
            oimg.style.width = '50px';
            oimg.src = fd.result;
            adiv.appendChild(oimg);
        }
    }
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值