码迷,mamicode.com
首页 > Windows程序 > 详细

HTML5拖拽API的使用实例

时间:2018-03-31 13:24:40      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:ack   OLE   src   解决   停止   star   head   tran   date   

首先介绍一下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.ondrop= 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>

 

HTML5拖拽API的使用实例

标签:ack   OLE   src   解决   停止   star   head   tran   date   

原文地址:https://www.cnblogs.com/SteelArm/p/8681280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!