HTML5 拖放---drag和drop

拖放四步走:
第一步:设置元素可拖放,即把 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。

时间: 2024-10-13 12:28:15

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

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

直击现场 基于HTML5的Drag and Drop生成图片Base64信息 发表于4个月前(2014-12-19 00:58)   阅读(103) | 评论(0) 11人收藏此文章, 我要收藏 赞0 慕课网,程序员升职加薪神器,点击免费学习 摘要 HTML5的Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过Drag and Drop生成图片的Base64的字符串信

使用HTML5本地 Drag和Drop API(native API)

人人都爱使用方便..具有互动的用户界面.并且随着智能手机的引入,用户的期望瞬间高了一大截.他们希望网站一目了然,交互动作尽人皆知.总之,他们希望你的网站使用起来超级简单. 让你的用户能在你的网站实现拖拽之类的操作吧,这会让你的网站更加具有交互性.因为人们都知道如何把东西从X拖到Y位置,知道如果把A拖到B前面的话,那么A就会先显示出来. 处理拖动,拖入之类的操作以前总是javascript的事情,开发者们早先也有自己的方法构建交互动作或者使用预制解决方案.随着HTML5 Drag和Drop API

HTML5拖放(drag和drog)

拖放(drag和drog)是HTML5的标准的组成部分,也是种常见的特性,意义为抓起一个元素放入到另外的一个位置,在HTML5中任何元素都可以被拖放,前题是要相关进行设置. 1.设置元素为可拖放,也就是把drapgable属性设置为true 2.拖动什么-ondragstart和setData(),规定元素被拖动时会发生什么? (1):ondragstart属性调用了一个函数drag(event),它规定了被拖动的数据. (2):dataTransfer.setData()方法设置被拖动数据的数

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

HTML5 原生的 Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过Drag and Drop生成图片的Base64的字符串信息. 使用Base64方式的图片有诸多好处,可将多个图片信息整合到单个js文件避免多次http请求,可以避免WebGL例子跨域访问的安全限制无法本地文件运行等好处,当然弊端也不少例如不能有效利用浏览器图片缓存机制等.使用HT for Web的

Android 用户界面---拖放(Drag and Drop)

Android 用户界面---拖放(Drag and Drop)(一) Android 用户界面---拖放(Drag and Drop)(二) Android 用户界面---拖放(Drag and Drop)(三)

HTML 5 拖放(Drag 和drop)

浏览器支持 Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5. 1.把标签 draggable 属性设置为 true. 2.向标签添加ondragstart 属性调用了一个函数drag(event). function drag(ev){ ev.dataTransfer.setData("Text",ev.target.id);    }  //设置被拖数据的数据类型和值 3.向要拖放的位置(目标元素)标签添加ondrago

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

英文原文:http://developer.android.com/guide/topics/ui/drag-drop.html 版本:Android 4.0 r1 译者注:黄色底色为未决译文 快速查看 允许用户在Activity layout范围内用图形化的手势来转移数据 可用于转移数据之外的其它用途 只在同一应用程序内有效 需要API 11. 在本文中 概述 拖放过程 拖动事件侦听器及回调方法 拖动事件 拖动阴影 拖放操作的设计 开始拖动 响应拖动开始事件 拖动过程中的事件处理 响应放下事件

HTML5 拖放(Drag 和 Drop)功能开发——基础实战

随着HTML5的普及度越来越高,现在写代码也遇到一些了,经过同事的点播开展了一次Dojo活动用以技术交流,我也乘此机会将HTML5的拖放功能整理了一下. 简介 拖拽(Drag/Drop)是个非常普遍的功能.在生活中,拖放物品其实是相当常见的一个动作.标榜“互联网生活尖凿狮”的程序猿也在一直试图用鼠标模拟出“手”的操作,用来给用户以更好的体验,你可以抓住一个对象,并且拖动到你想放置的区域.很多javascript都类似实现了相关的功能,例如,jQueryUI的draganddrop组件,比如<JS

HTML5 CSS3 专题 : 拖放 (Drag and Drop)

本来准备写一个支持多图片拖拽上传的例子,但是为了更好的理解,先介绍一下HTML5的拖放. 拖放(Drag 和 drop)是 HTML5 标准的组成部分. 浏览器支持 Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5 支持拖放. 被拖元素,dragElement : 1.添加事件:ondragstart 2.添加属性:dragable 放置元素,dropElement: 1.添加事件:ondargenter , ondragover ,