• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > H5拖放API基础篇

H5拖放API基础篇

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含H5拖放等相关知识,匿名希望在学习及工作中可以帮助到您
  不要搞错,本文不是讲如何拖地的。看过《javascript精粹》朋友应该知道,他实现拖放的过程比较复杂,现在时代不同了,我们用H5的新的拖放API就能非常方便的实现拖放效果了。最近在园子见一园友写了一篇《HTML5 进阶系列:拖放 API 实现拖放排序》,真乃大师之作,大~熊同学作为一代菜鸟(不是宗师),无法与之想比,遂推出基础篇,希望各位园友有所收获。

一、一个简单的例子--地上有石子捡几个吧

  


    地上有石子,捡几个吧
    
    
        
        
        
    
    
    我是篮子    
    
    我是地
    
        石子
        石子
        石子
        石子
        石子
        石子
        石子
        石子
        石子
        石子


  (gif演示是用的edge,我的ubuntu做gif太麻烦了,借了个windows)

  

  这里用一个简单的例子演示了如何实现拖放,那么问题来了,从上面的演示中你可以猜出一些属性和方法的用法了,那些方法的作用究竟是怎样的?那些个属性又是啥意思呢?下面一一到来。

二、实现拖放的一般步骤

  1、找到一个可拖的元素

  正如不是所有人都叫大熊一样,并不是所有的元素都是可以被拖的。img和a元素默认可拖,其他元素默认不可拖,当时可以加一个draggable=true让它可拖。

  


<p draggable='true'></p>


  2、处理拖放有关事件

  所有相关事件如下:(这个摘自:http://www.cnblogs.com/linxin/p/6794542.html)

  源对象:

  • dragstart:源对象开始拖放。

  • drag:源对象拖放过程中。

  • dragend:源对象拖放结束。

  过程对象:

  • dragenter:源对象开始进入过程对象范围内。

  • dragover:源对象在过程对象范围内移动。

  • dragleave:源对象离开过程对象的范围。

  目标对象:

  • drop:源对象被拖放到目标对象内。

  我们可以用一个测试来看看这些事件的触发时机和事件对象为何物。

  


<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>testEvents</title>
    <style type="text/css">
        .source{
            width: 50px;
            height: 50px;
            border: 1px solid red;
        }
        .process{
            width: 100px;
            height: 100px;
            border: 1px solid black;
            margin-top: 10px;
        }
        .dest{
            width: 100px;
            height: 100px;
            border: 1px solid green;
            margin-top: 10px;
        }
    </style></head><body>
    <p class="source" id="source" draggable="true"></p>
    <p class="process" id="process"></p>
    <p class="dest" id="dest"></p>
    <script type="text/javascript">
    window.onload=function(){        var source = document.getElementById("source");        var process = document.getElementById("process");        var dest = document.getElementById("dest");        var sourceEle;

        source.addEventListener("dragstart",function(e){
            console.log("source dragstart");
            console.log(e);
            sourceEle = e.target;            var dt = e.dataTransfer;
            dt.effectedAllowed = "all";
        },false);

        process.addEventListener("dragenter",function(e){
            console.log("process dragenter");
            console.log(e);
        },false);

        process.addEventListener("dragover",function(e){
            console.log("process dragover");
            console.log(e);
        },false);

        process.addEventListener("dragleave",function(e){
            console.log("process dragleave");
            console.log(e);
        },false);

        source.addEventListener("drag",function(e){
            console.log("source drag");
            console.log(e);
        },false);

        dest.addEventListener("dragend",function(e){
            console.log("dest dragend");
            console.log(e);
            e.preventDefault();
        },false);

        dest.addEventListener("drop",function(e){
            console.log("dest drop");
            console.log(e);
            dest.appendChild(sourceEle);
            e.preventDefault();
            e.stopPropagation();
        },false);

        document.ondragover = function(e){e.preventDefault();}
        document.ondrop = function(e){e.preventDefault();}
    }    </script></body></html>


  这个例子将拖放过过程涉及的事件做了一个罗列,这里不再细讲,你可以查看控制台看看事件的触发顺序和事件对象。

三、一个重要的对象DataTransfer对象

  这里首字母大写了,严格说叫做一个类,每一次拖放会实例化这个类,保存在事件对象的dataTransfer属性中。其属性和方法见下表(来自:http://www.cnblogs.com/ijjyo/p/4316232.html)

  感谢这位兄台的总结,拿了你这么多东西,谢谢啊。

  

  

  下面做一些简单的测试

  关于effectAllowed和dropEffect,这里将前者置为effectAllowed后者用下拉列表选择,以便于看到不同的鼠标样式。

  


<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>testEvents</title>
    <style type="text/css">
        .source{
            width: 50px;
            height: 50px;
            border: 1px solid red;
        }
        .process{
            width: 100px;
            height: 100px;
            border: 1px solid black;
            margin-top: 10px;
        }
        .dest{
            width: 100px;
            height: 100px;
            border: 1px solid green;
            margin-top: 10px;
        }
    </style></head><body>
    <select id="dpe">
        <option value="copy">copy</option>
        <option value="move">move</option>
        <option value="link">link</option>
        <option value="none">none</option>
    </select>
    <p class="source" id="source" draggable="true"></p>
    <p class="process" id="process"></p>
    <p class="dest" id="dest"></p>
    <script type="text/javascript">
    window.onload=function(){        var source = document.getElementById("source");        var process = document.getElementById("process");        var dest = document.getElementById("dest");        var dpe = document.getElementById("dpe");        var dpev;

        dpe.onchange = function(){
            dpev = this.value;
        }        var sourceEle;

        source.addEventListener("dragstart",function(e){
            console.log("source dragstart");
            console.log(e);
            sourceEle = e.target;            var dt = e.dataTransfer;
            dt.effectedAllowed = "all";
  


 

您可能想查找下面的文章:

相关文章

  • 2017-08-06HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
  • 2018-12-03H5中在拖动的元素或选择的文本进入到有效的放置目标时触发的事件ondragenter
  • 2018-12-03移动端HTML5模拟长按删除事件(附代码)
  • 2018-12-03H5学习之旅-H5的块标签的使用(9)
  • 2018-12-03如何使用HTML5中postMessage实现Ajax中的POST跨域问题的详细介绍
  • 2017-08-06html5图片上传预览示例分享
  • 2018-12-03用Canvas绘制贝赛尔曲线
  • 2018-12-03HTML5开发手机应用-详细介绍viewport的作用(图文)
  • 2018-12-03使用Vue按需加载提升用户体验
  • 2017-08-06详解通过HTML5 Canvas实现图片的平移及旋转变化的方法

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • H5上滑跳转页面的实现(代码实例)
    • 分段式基于SVG文字超酷创意动画特效
    • 小强的HTML5移动开发之路(15)——HTML5中的音频
    • 让IE下支持Html5的placeholder属性的插件
    • 你不知道的5个HTML5新功能
    • HTML5和Webkit实现树叶飘落动画
    • 移动端网站设计优化要点
    • node.js中文件之间的引入教程实例
    • HTML5实践-使用CSS3 Media Queries实现响应式设计的代码分享
    • CSS3 Flexbox该怎么使用?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有