HTML5中的简单拖放

HTML5中的简单拖放

拖放是一种常见的特性,即抓取对象以后拖到另一个位置。在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。

为了让元素可拖动,需要使用 HTML5 draggable 属性,将其值设为true。链接,文本和图片默认是可拖动的(文本选中状态下可拖动,链接和图片任何情况下都可拖动),不需要 draggable 属性。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
     <style type="text/css">
         div{
             border: 1px solid red;
             height: 300px;
         }
     </style>
</head>
<body>
    <div id="dropBlock"></div>
  <img src="../image/2page-img1.jpg" id="imgs"/><br/>
</body>
<script>
    var imgs=document.getElementById("imgs");
    imgs.ondragstart=function(e){
      e.dataTransfer.setData("Text", e.target.id);
    }
    var div=document.getElementById("dropBlock");
    div.ondragover=function(e){
        e.preventDefault();
    }
    div.ondrop=function(e){
        e.preventDefault();
        var data= e.dataTransfer.getData("Text");
        e.target.appendChild(document.getElementById(data))
    }
</script>
</html>

拖动什么?

首先为被拖动的图片绑定一个ondragstart事件,它规定了被拖动的数据。

dataTransfer.setData() 方法设置被拖数据的数据类型和值:

e.dataTransfer.setData("Text", e.target.id);

在这个例子中,数据类型是 "Text",值是可拖动元素的 id ("imgs")。

放到何处?

为投区(id为dropBlock)绑定了一个ondragover事件,它规定在何处放置被拖动的数据。

默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。

这要通过调用 ondragover 事件的 event.preventDefault() 方法:

进行放置

为投区(id为dropBlock)绑定了一个ondrop事件,当放置被拖数据时,该事件会发生。

该事件会执行下述代码:

 div.ondrop=function(e){
        e.preventDefault();
        var data= e.dataTransfer.getData("Text");
        e.target.appendChild(document.getElementById(data))
    }

代码解释:

  • 调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)
  • 通过 dataTransfer.getData("Text") 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。
  • 被拖数据是被拖元素的 id ("imgs")
  • 把被拖元素追加到放置元素(目标元素)中
时间: 2024-10-10 09:42:50

HTML5中的简单拖放的相关文章

基于html5实现的简单拖放

h5新增了关于拖放的API,通过拖放API可以让html页面的任何元素都变成可以拖动的.这是一个小例子,帮助理解. <html> <head> <meta charset="utf-8"> <meta name="author" content="dongfeng"> <title>html5拖拽</title> <style> #sourse{ width: 2

用HTML5写一个简单的HTML页面

HTML5的<!doctype>声明 在HTML 4.01中doctype这样写: <!DOCTYPE html PUBLIC "-//W3C/DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> 在HTML5中很简单: <!DOCTYPE html> HTML5的<meta>标签 <meta>标签在 HTML 4.01 中这样写: <m

HTML5中的&lt;canvas&gt;画布:简单介绍(0)

<canvas> 标签是 HTML 5 中的新标签,像所有的dom对象一样它有自己本身的属性.方法和事件, 其中就有绘图的方法,js能够调用它来进行绘图 ,最近在研读<html5与css3权威指南>下面对其中最好玩的canvas的学习做下读书笔记与实 验.温馨提示:以下所有实验请使用最新版的opera,火狐. 定义: <canvas> 标签定义图形,比如图表和其他图像. <canvas> 标签只是图形容器,您必须使用脚本(javascript)来绘制图形.

HTML5中的Web Storage(sessionStorage||localStorage)理解与简单实例

Web Storage是什么? Web Storage功能,顾名思义,就是在Web上针对客户端本地储存数据的功能,具体来说Web Storage分为两种: sessionStorage: 将数据保存在session对象中,所谓session是指用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.session对象可以用来保存在这段时间内所要求保存的任何数据. localStorage: 将数据保存在客户端本地的硬件设备(通常指硬盘,当然可以是其他的硬

HTML5中的跨文档消息传递

跨文档消息传送(cross-document messaging),有时候也简称为XDM,指的是来自不同域的页面间传递消息.例如,www.w3cmm.com域中的一个页面与一个位于内嵌框架中的p2p.w3cmm.com域中的页面通信.在XDM机制出现之前,更稳妥地实现这种通信需要花很多功夫.XDM把这种机制规范化,让我们能既稳妥有简单地实现跨文档通信. XDM的核心是postMessage()方法.在HTML5规范中,除了XDM部分之外的其它部分也会提到这个方法名,但都是为了同一个目的:向另一个

HTML5中引入的关键特性

新特性 描述 accesskey 定义通过键盘访问元素的快捷键 contenteditable 该特性设置为true时,浏览器应该允许用户编辑元素的内容.不指定变化后的内容如何保存 contextmenu 定义menu元素的DOM id作为定义钙元素特性的上下文菜单 data-X 制定可以包含在标签中的用户定义的元数据,而不必担心这些元数据与当前的特性或者未来的特性冲突.使用这种类型的特性可以避免创建自定义特性或者过载class特性的常见方法 draggable 定义特性时,允许元素与其内容可以

[html5] 学习笔记- html拖放

拖放是一种常见的特性,即抓取对象以后拖到另一个位置,在HTML5中,拖放是标准的一部分,任何元素都能够拖放. 1.html5拖放:(drag和drop)是HTML5标准的组成部分 拖动开始:ondragstart:调用了一个函数,drag(event),它规定了被拖动的数据 设置拖动数据:setData():设置被拖数据的数据类型和值 放入位置:ondragover:事件规定在何处放置被拖动的数据 放置:ondrop:当放置被拖动数据时,会发生drop事件 下例是将网页上的图片,拖放到网页上的指

HTML5中的canvas基本概念及绘图

* Canvas(画布) * 基本内容 * 简单来说,HTML5提供的新元素<canvas> * Canvas在HTML页面提供画布的功能 * 在画布中绘制各种图形 * Canvas绘制的图形与HTML页面无关 * 无法通过DOM获取绘制的图形 * 无法为绘制的图形绑定DOM事件 * 只能使用Canvas提供的API * Canvas用途 * 在HTML页面中绘制图表(例如柱状图.饼状图等) * 网页游戏 - Flash技术 * 使用HTML5中的Canvas * 如何使用Canvas * 在

HTML5中的SVG

* SVG * 基本内容 * SVG并不属于HTML5专有内容 * HTML5提供有关SVG原生的内容 * 在HTML5出现之前,就有SVG内容 * SVG,简单来说就是矢量图 * SVG文件的扩展名为".svg" * SVG使用的是XML语法 * 概念 * SVG是一种使用XML技术描述二维图形的语言 * SVG的特点 * SVG绘制图形可以被搜索引擎抓取 * SVG在图片质量不下降的情况下,被放大 * SVG与Canvas的区别 * SVG * 不依赖分辨率 * 支持事件绑定 *