HTML5拖拽API的使用实例

首先介绍一下HTML5拖拽过程中产生的事件:

如果A被拖动到B内部,则

1. A会触发ondragstart, ondrag, ondragend,分别代表拖拽开始,拖拽进行中和拖拽结束;

2. B会触发ondragenter, ondragover, ondragleave, ondrop,分别代表A物体进入B,在B上面,从B上方离开,在B上方松手停止拖拽;

3. 如果拖动本地文件,则不会触发ondragstart事件;

4. 事件间的数据传递使用e.dataTransfer.setDate(k, v)e.dataTransfer.getData(k)

需要注意的几点:

0. 将A的draggable属性设置为true,虽然你不设置可能也能拽;

1. dom默认拒绝对象在其内部放置,所以往往要用

B.ondragover = function(e){ e.preventDefault(); };

来取消掉默认事件;

2. 某些浏览器默认在拖放后以链接形式打开A,故需要使用

B.οndrοp= function(e){ e.preventDefault(); };

3. firefox中拖放图片会打开新页面,这个还是比较烦的,解决方法是先获取body元素,然后

body.ondrop = function(e){
   e.stopPropagation();
   e.preventDefault();  //注意这俩位置不能反了
};

 4. firefox中,无法通过ondrag等事件实时获取鼠标位置,如

A.ondrag = function(e){
   console.log(e.offsetX, e.offsetY); 
};

这一般会输出两个0

解决方法是在document中设置事件监听

document.ondragover = function(e){
    e = e.originalEvent || e;
    x = e.clientX || e.pageX;
    y = e.clientY || e.pageY;
}

 

以下是一个实例,可在HTML页面中拖动图片:

<!DOCTYPE html>  
<html>  
<head lang="en">  
    <meta charset="UTF-8">  
    <title></title>  
    <style>  
        body{  
            margin:0;  
            min-height: 700px;
            position: relative;  
        }  
        img{  
            position:absolute;  
            left: 0;
            top: 0;
        }  
    </style>  
</head>  
<body>  
<h3>可拖动赤酱</h3>  
<img id="chi" src="nyachichi.png" alt="chichiyan" draggable="true" />  
<script>  
    var chi = document.getElementById("chi");
    var body = document.getElementsByTagName("body")[0];
    var offsetX, offsetY, x, y;
    
    document.ondragover = function(e){
        e = e.originalEvent || e;
        x = e.clientX || e.pageX;
        y = e.clientY || e.pageY;
    }
    
    body.ondragover = function(e){
        e.preventDefault();
    }
    
    body.ondrop = function(e){
        e.stopPropagation();
        e.preventDefault();
        console.log("事件源chi拖动结束");
    }
    
    chi.ondragstart=function(e){  
        console.log('事件源chi开始拖动');  
        offsetX = e.offsetX;  
        offsetY = e.offsetY;
        
    }  
chi.ondrag
=function(e){ <!-- console.log('事件源chi拖动中'); --> } chi.ondragend=function(e){ e.preventDefault(); chi.style.left = x-offsetX + "px"; chi.style.top = y-offsetY + "px"; } </script> </body> </html>

 

转载于:https://www.cnblogs.com/SteelArm/p/8681280.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值