拖放四步走:
第一步:设置元素可拖放,即把 draggable属性设置为 true:
  例:<div id="div" draggable="true"></div>
第二部:拖动什么--ondragstrat和setData()
  例:function drag(ev){
         ev.dataTransfer.setData("Text",ev.target.id);
      }
上例中,数据类型是“Text”,值是可拖动的元素的id("div");

拓展:

dataTransfer对象:他提供了对于预定义的剪贴板格式的访问,也就是说,在拖拽过程中,可以通过dataTransfer对象来传输数据,以便在拖拽操作结束的时候对数据进行其他的操作。 该对象的属性:dropEflect:设置或返回拖放目标上允许发生的拖放行为。该属性的取值有:“null”,“copy”,“link ”,“move”.

effectAllowed:设置或返回被拖动元素允许发生的拖动行为,取值有:"none","copy","copyLink",copyMove","link","linkMove","move","all","uninitialized".

dataTransfer对象有5个方法:

1.setData(format,data):将指定格式的数据赋值给dataTransfer对象,format定义数据类型,data为待赋值的数据。

2.getData(format):从dataTransfer对象中获取指定格式的数据。

3.clearData([format]):从dataTransfer对象中删除制定格式的数据,参数可选。

4.addElement(element):添加自定义图标。

5.setDragImage(element,x,y):element设置自定义图标,x设置图标与鼠标在水平方向上的距离,y设置图标与鼠标在垂直方向上的距离。

第三步:放到何处-ondargover
      ondragover事件规定在何处放置被拖动的数据。默认地无法将数据/元素放置到其他元素中。如果要允许放置,必须阻止默认的处理方式。这里通过调用ondragover事件的event.preventDefault()方法:

event.preventDefault();

第四步:进行放置-ondrop
   当放置被拖拽数据时会发生drop事件,例:

 function drop(ev){
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data);
}

ondrop事件在可拖动的过程中会触发以下事件:
   1.在拖动目标上触发事件(源元素):
      a.ondragstart:用户开始拖动元素时触发;
      b.ondrag:元素正在拖动时触发;
      c.ondragend:用户完成拖动后触发。
  2.释放目标时触发的事件:
     a.ondragenter:当被拖动的对象进入容器范围内时触发;
     b.ondragover:当某被拖动的对象在另一对象容器范围内拖动时触发此事件;
     c.ondragleave:当被拖动的对象离开其容器范围内时触发;
     d.ondrap:在一个拖动过程中,释放鼠标键时触发此事件。

下面是一个用拖拽完成的数独游戏的部分代码:

function allowDrop(ev){
ev.preventDefault();
} function drag(ev){
ev.dataTransfer.setData("Text",ev.target.id);
}
function drop(ev){
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
} var del=[]; function start(){
var aCard=document.querySelectorAll(".card");
var oBox=document.getElementById("box");
var oContainer=document.querySelector(".container");
var aTd=document.getElementsByTagName("td"); var list=[];
var count=10;
var cNode=null; for(var i=0;i<aTd.length;i++){ //找出所有空的格子
if(aTd[i].innerHTML==""){
list.push(aTd[i]);
}
} for(var i=0;i<aCard.length;i++){
var that=null;
aCard[i].ondragstart=function(){ //开始拖动元素
drag(event);
that=this;
} for(var j=0;j<list.length;j++){
list[j].ondragover=function(){ //让所有空格子阻止浏览器对数据的默认操作
allowDrop(event);
} list[j].ondrop=function(){ cNode=that.cloneNode(true);
oContainer.appendChild(cNode); that.id="card"+count;
count++;
drop(event);
del.push(cNode);
dele();
}
}
} } start(); function dele(){
var oDelete=document.getElementById("delete"); for(var t=0;t<del.length;t++){
del[t].ondragstart=function(){ //开始拖动元素
drag(event);
} oDelete.ondragover=function(){
allowDrop(event);
}
oDelete.ondrop=function(){
drop(event);
this.innerHTML="";
}
}
} function check(){
var oBtn=document.getElementById("btn"); oBtn.onclick=function(){
isWin();
}
}

完整代码,请参见https://github.com/zhangyudan/a_little_game。

HTML5 拖放---drag和drop的更多相关文章

  1. 基于HTML5的Drag and Drop生成图片Base64信息

    HTML5的Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过Drag ...

  2. HTML5 之拖放(drag与drop)

    拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. HTML5 拖放实例 ...

  3. HTML5拖放(drag和drog)

    拖放(drag和drog)是HTML5的标准的组成部分,也是种常见的特性,意义为抓起一个元素放入到另外的一个位置,在HTML5中任何元素都可以被拖放,前题是要相关进行设置. 1.设置元素为可拖放,也就 ...

  4. 通过HTML5的Drag and Drop生成拓扑图片Base64信息

    HTML5 原生的 Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过 ...

  5. 炫酷的html5(Drag 和 drop)拖放

    在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放.也是一种常见的特性,即抓取对象以后拖到另一个位置. 浏览器支持 Internet Explorer 9.Firefox.Opera 12.C ...

  6. 拖放(Drag和Drop)--html5

    拖放,就是抓取一个对象后拖放到另一个位置.很常用的一个功能,在还没有html5的时候,我们实现这个功能,通常会用大量的js代码,再利用mousemove,mouseup等鼠标事件来实现,总的来说比较麻 ...

  7. HTML 5 拖放(Drag 和drop)

    浏览器支持 Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5. 1.把标签 draggable 属性设置为 true. 2.向标签添加on ...

  8. Android开发者指南-用户界面-拖放-Drag and Drop[原创译文]

      英文原文:http://developer.android.com/guide/topics/ui/drag-drop.html 版本:Android 4.0 r1 译者注:黄色底色为未决译文 快 ...

  9. 在Blazor中实现拖放(drag and drop)

    前言 我在实现一个含有待办列表功能的页面时,发现了一个好看的设计,它将待办分为--"待办","正在进行",和"已完成"三种状态,并且将待办通 ...

随机推荐

  1. float 的先后顺序 理解流

    <!DOCTYPE html><html><head><style> p{float:right;}</style></head> ...

  2. Date、Calendar、DateFormat、SimpleDateFormat、Timer、TimerTask类

    类 Date 在 JDK 1.1 之前,类 Date 有两个其他的函数.它允许把日期解释为年.月.日.小时.分钟和秒值. 它也允许格式化和解析日期字符串.不过,这些函数的 API 不易于实现国际化.从 ...

  3. JavaScript深入理解sort()方法

    一. 基本用法 let arr1 = [3, 5, 7, 1, 8, 7, 10, 20, 19] console.log(arr1.sort()) // [1, 10, 19, 20, 3, 5, ...

  4. 0x04 MySQl 表操作

    0x01 存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 详见:http://www.cnblogs.com/linhaifeng/articles/7213670.ht ...

  5. python并发编程&IO模型

    一 IO模型介绍 为了更好地了解IO模型,可先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(n ...

  6. 斯坦福大学Andrew Ng - 机器学习笔记(7) -- 异常检测

    大概用了一个月,Andrew Ng老师的机器学习视频断断续续看完了,以下是个人学习笔记,入门级别,权当总结.笔记难免有遗漏和误解,欢迎讨论. 鸣谢:中国海洋大学黄海广博士提供课程视频和个人笔记,在此深 ...

  7. MapReduceTopK TreeMap

    版权声明: https://blog.csdn.net/zhangxiango/article/details/33319281 MapReduce TopK统计加排序中介绍的TopK在mapredu ...

  8. web.xml文件配置说明

    web.xml作用: web.xml主要用来配置Filter.Listener.Servlet等,当我们去启动一个WEB项目时,容器(jetty.tomcat等)首先会读取项目web.xml配置文件里 ...

  9. 3.2 使用STC89C52控制MC20发送短信

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  10. Vimium~让您的Chrome起飞

    工欲善其事,必先利其器!撸起Vimium,我的Chrome就这么起飞了. 学起(了解几个快捷键即可)And撸起Vimium,想黑客一般在Chrome上飞起.Vimium常用快捷键(注:区分大小写)j, ...