1,首先,你要告诉计算机那个元素可以拖动,或者是一张图,或者是一个盒子,在标签里面加上 draggable="true" 

2,然后,监听该元素被拖动的函数 ondragstart="drag(event)"

3,drag 里面告诉计算机是那个元素被拖动的 ev.dataTransfer.setData("Text",ev.target.id);

4,接下来将拖动的元素放到哪个盒子,(或者是经过那个盒子,经过某个盒子的时候触法 ondragover 函数 )当然了,这个盒子要告诉计算机,我是个盒子,可以把东西放我这里   ev.preventDefault(); 这句的意思就是说计算机别限制我“禁止”拖动

5,当鼠标松开的时候 触发事件 ondrop="drop(event)" , 这个函数里面 介绍是谁被拖动的ev.dataTransfer.getData("Text");,放到了哪里ev.target ,就把被拖动的元素插入这个盒子里面,ev.target.appendChild(document.getElementById(data));   效果就实现了。

6,这个是我自己的理解,有不对的欢迎指正。

下面,是简单的源码

<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
#div1 {width:488px;height:370px;padding:10px;border:1px solid #aaaaaa;}
#div2 {width:488px;height:370px;padding:10px;border:1px solid #aaaaaa;}
</style>
<script type="text/javascript"> 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));
}
</script>
<meta charset="utf-8">
</head>
<body> <p>请把 W3School 的图片拖放到矩形中:</p> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div> <br /> <img id="drag2" src="data:images/001(2)_01.jpg" draggable="true" ondragstart="drag(event)" width="460" height="221" /> </body>
</html>

上面这个是基本的这种功能,其实拖放有很强大的功能,本吊也仅仅知道其中的一小部分,下面贴一个稍微复杂点的应用

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title> <style>
*{ margin:0; padding:0}
.mask { position:fixed; width:100%; height:100%; background-color:rgba(0,0,0,.4); top:0px; left:0px;}
.mask_footer { width:300px; height:220px; position:relative; left:50%; top:50%; background-color:#fff; border:solid 1px #ccc ; margin-left:-150px; margin-top:-100px;}
.title {
background-color: #960;
color: #fff;
height:30px; line-height:30px;
cursor:move;
}
.close { width:20px; height:20px; font-size:18px; position:absolute; right:5px; top:5px; cursor:pointer;}
.close:hover { color:#fff;}
#but { width:200px; height:40px;}
</style>
</head> <body> <button type="button" value="test" id="but" >test</button> <div class="mask" ondrop="drop(event)" ondragover="allowDrop(event)">
<div class="mask_footer" id="testid" >
<span class="close">×</span>
<h3 class="title" draggable="true" draggable="true" ondragstart="drag(event)" >点击我可以移动位置</h3>
<div>文本内容》。。。、</div>
</div>
</div> <script>
var but =document.getElementById("but");
var mask = document.getElementsByClassName("mask")[0];
var clos = document.getElementsByClassName("close")[0];
but.addEventListener("click",show);
clos.addEventListener("click",hide);
var nowx , nowy ;
function show(){ mask.style.display = "block ";
}
function hide (){
mask.style.display = "none"; }
function allowDrop(ev){
ev.preventDefault(); }
function drag(ev){
var dragId = ev.target.parentNode.id;
var dragImg = document.getElementById(dragId);
ev.target.offsetX;
var yuanX = ev.target.parentNode.offsetLeft ;
var yuanY = ev.target.parentNode.offsetTop ;
nowx =ev.clientX ;
nowy =ev.clientY ;
nowx = nowx - yuanX ;
nowy = nowy - yuanY;
ev.dataTransfer.setData("Text",dragId);
ev.dataTransfer.setDragImage(dragImg,nowx,nowy);
}
function drop(ev){
ev.preventDefault();
var data = ev.dataTransfer.getData("Text"); var dX = ev.clientX -nowx;
var dY = ev.clientY -nowy ;
var ele = document.getElementById(data);
ele.style.left = dX +"px";
ele.style.top = dY +"px";
ele.style.marginLeft= "0px";
ele.style.marginTop = "0px";
} </script>
</body>
</html>

这个是模仿百度登陆框做的一个功能,当然了,也很普通。

html5 拖拽的简要介绍的更多相关文章

  1. HTML5拖拽功能中 dataTransfer对象详解

    有了HTML5,老板再也不用担心我们的上传了,再加上有拖拽上传是不是很酷.百度一下,有关HTML5拖拽上传的文章和实例不少,都缺不了一个至关重要的东东DataTransfer.但是详细介绍的不多,尤其 ...

  2. Html5拖拽复制

    拖拽是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖拽是标准的一部分,任何元素都能够拖拽. Html5拖拽非常常见的一个功能,但是大部分拖拽的案例都是一个剪切的过程, 项目中需 ...

  3. html5拖拽

    html5拖拽一 <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...

  4. HTML5 拖拽复制功能的实现方法

    Internet Explorer 9FirefoxOpera 12ChromeSafari 5 v1.0代码部分 <!DOCTYPE html><html><head& ...

  5. 每天一个JavaScript实例-html5拖拽

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  6. 基于html5拖拽api实现列表的拖拽排序

    基于html5拖拽api实现列表的拖拽排序 html代码: <ul ondrop="drop_handler(event);" ondragover="dragov ...

  7. html5拖拽事件 xhr2 实现文件上传 含进度条

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  8. html5拖拽总结

    拖拽(Drag 和 drop)是 HTML5 标准的组成部分.拖拽是一种常见的特性,即抓取对象以后拖到另一个位置. Internet Explorer 9.Firefox.Opera 12.Chrom ...

  9. HTML5拖拽实例

    最近应该会用到,借用一下......小妹儿,你又变懒了 拖拽相关属性 draggable属性是html5的全局属性,是html5支持拖放操作的方式之一,用来表示元素是否可以被拖放,draggable有 ...

随机推荐

  1. oracle查看表锁及解锁

    --kill session语句 1 alter system kill SESSION '2171,60490'; --以下几个为相关表 1 2 3 4 5 6 7 SELECT * FROM v$ ...

  2. cocos 事件分发2

    cocos的事件分发器CCTouchDispatcher,存在两个通道, m_pTargetedHandlers存储CMenu,CScrollView的事件处理器, 这里的处理器,在处理过消息后,会声 ...

  3. 388. Longest Absolute File Path

    就是看哪个文件的绝对路径最长,不是看最深,是看最长,跟文件夹名,文件名都有关. \n表示一波,可能存在一个文件,可能只有文件夹,但是我们需要检测. 之后的\t表示层数. 思路是如果当前层数多余已经有的 ...

  4. Webform Repeater的灵活运用

    案例:模拟购物列表 封装实体类:   数据访问类: 用Repeater展示: 1 <%@ Page Language="C#" AutoEventWireup="t ...

  5. debug.keystore文件不存在解决办法

    重装系统之后,丢失了debug.keystore,找了很久都没有找到,根据网上所讲的只要重新运行一个android项目;就会在avd中生成一个新的debug.keystroe,此法也没解决,索性直接重 ...

  6. css3 -&gt; 多栏布局

    在进行多栏布局时.使用bootstrap的栅格系统能够非常轻松的实现效果,事实上css3本身也提供了多兰布局的功能. 比方,我们在一个section标签内填充了非常多内容.同一时候希望内容可以显示成三 ...

  7. RichtextBox 行和列

    获得光标所在的行号 获得光标所在的列号 设置光标到指定行号 设置光标到指定列号 http://www.huifangseo.com/blog/6/7.html 获得光标所在的行号和列号 方法1 int ...

  8. java代理

    首先,java中为什么要提出代理的设计模式呢?代理模式的作用是:为其它对象提供一种代理以控制对这个对象的訪问.在某些情况下,一个客户不想或者不能直接引用还有一个对象,而代理对象能够在client和目标 ...

  9. 谷歌google搜索打不开、谷歌gmail邮箱及相关服务无法登录的解决的方法

    歌打不开 google打不开,与中国大陆封杀有关,可是主要是由于近期googleserver在全球范围内又一次进行了布局调整. 解决的方法是仅仅要改动用户本地计算机hosts文件就能够了. 一.Win ...

  10. 固定ip

    192.168.1.111 255.255.255.0 192.168.1.1 8.8.8.8 202.96.134.33