HTML5新增的拖放API

其实所谓的拖放就是拖动那个元素,然后就会打开一个新的页面,根据拖动元素所随带的信息来实现不同的功能。如果没有携带,则有浏览器自己来决定如何做。

<body>
    <div id="source" style="width:80px;height:80px;border:1px solid black; background-color:#bbb;" draggable="true">
    我不想让你知道我是谁
    </div>
    <script type="text/javascript">
        var source = document.getElementById("source");
        source.ondragstart = function(evt){
            evt.dataTransfer.setData("text/plain" , "http://www.sina.com");
        }
    </script>
</body>

-------》在拖动的时候图片上方会显示“禁止”图标。document对象默认阻止了拖动事件,而其他HTML组件也是位于document对象内的,因此它们也不能接受“放”。

所以需要在script代码中添加对于“放”的处理。

通过javascript代码把该元素移动到相应的位置:

<body>
<div id="source" style="width:80px;height:80px;
    border:1px solid black;
    background-color: #bbb;"
    draggable="true">疯狂</div>
<script type="text/javascript">
    var source = document.getElementById("source");
    source.ondragstart = function(evt)
    {
        // 让拖动操作携带数据
        evt.dataTransfer.setData("text/plain" , "www.fkjava.org");
    }
    document.ondragover = function(evt)
    {
        // 取消事件的默认行为
        return false;
    }
    document.ondrop = function(evt)
    {
        source.style.position = "absolute";
        source.style.left = evt.pageX + "px";
        source.style.top = evt.pageY + "px";
        // 取消事件的默认行为
        return false;
    }
</script>
</body>

------->DataTransfer对象

拖放触发的拖放事件有一个dataTransfer属性,该属性值是一个DataTransfer对象,该对象包含如下属性和方法。

            通过DataTransfer对象,可以让拖放操作实现更丰富的功能-----开发者可以在拖放开始时,将拖放源的数据存入DataTransfer对象中,然后在拖放结束时从DataTransfer对象读取数据,这样就可以完成更复杂的拖放操作。


实现一个允许通过拖放来添加、删除“收藏项”的功能。

<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 通过拖放实现添加、删除 </title>
    <style type="text/css">
        div>div{
            display: inline-block;
            padding: 10px;
            background-color: #aaa;
            margin: 3px;
        }
    </style>
</head>
<body>
<div style="width:600px;border:1px solid black;">
<h2>可将喜欢的项目拖入收藏夹</h2>
<div draggable="true" ondragstart="dsHandler(event);">疯狂Java联盟</div>
<div draggable="true" ondragstart="dsHandler(event);">疯狂软件教育</div>
<div draggable="true" ondragstart="dsHandler(event);">关于我们</div>
<div draggable="true" ondragstart="dsHandler(event);">疯狂成员</div>
</div>
<div id="dest"
    style="width:400px;height:260px;
    border:1px solid black;float:left;">
    <h2 ondragleave="return false;">收藏夹</h2>
</div>
<img id="gb" draggable="false" src="garbagebin.png"
    alt="垃圾桶" style="float:left;"/>
<script type="text/javascript">
    var dest = document.getElementById("dest");
    // 开始拖动事件的事件监听器
    var dsHandler = function(evt)
    {
        // 将被拖动元素的innerHTML属性值设置成被拖动的数据
        evt.dataTransfer.setData("text/plain"
            , "<item>" + evt.target.innerHTML);
    }
    dest.ondrop = function(evt)
    {
        var text = evt.dataTransfer.getData("text/plain");
        // 如果该text以<item>开头
        if (text.indexOf("<item>") == 0)
        {
            // 创建一个新的div元素
            var newEle = document.createElement("div");
            // 以当前时间为该元素生成一个唯一的ID
            newEle.id = new Date().getUTCMilliseconds();
            // 该元素内容为“拖”过来的数据
            newEle.innerHTML = text.substring(6);
            // 设置该元素允许拖动
            newEle.draggable="true";
            // 为该元素的开始拖动事件指定监听器
            newEle.ondragstart = function(evt)
            {
                // 将被拖动元素的id属性值设置成被拖动的数据
                evt.dataTransfer.setData("text/plain"
                    , "<remove>" + newEle.id);
            }
            dest.appendChild(newEle);
        }

    }
    // 当把被拖动元素“放”到垃圾桶上时激发该方法。
    document.getElementById("gb").ondrop = function(evt)
    {
        var id = evt.dataTransfer.getData("text/plain");
        // 如果id以<remove>开头
        if (id.indexOf("<remove>") == 0)
        {
            // 根据“拖”过来的数据,获取被拖动的元素
            var target = document.getElementById(id.substring(8));
            // 删除被拖动的元素
            dest.removeChild(target);
        }
    }
    document.ondragover = function(evt)
    {
        // 取消事件的默认行为
        return false;
    }
    document.ondrop = function(evt)
    {
        // 取消事件的默认行为
        return false;
    }
</script>
</body>


------>拖放行为

设置effectAllowed、dropEffect两个属性可以控制施放行为。

effectAllowed用于控制被拖动元素的拖动行为,因此通常建议在ondragstart事件监听器中设置DataTransfer对象的effectAllowed属性;而dropEffect则控制被“放”入的目标组件的行为,因此通常建议在ondragover事件监听器中设置DataTransfer对象的dropEffect属性。

<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 拖放行为 </title>
</head>
<body>
<div id="source" draggable="true" style="width:80px;height:60px;
    border:1px solid black;">拖动我</div>
<script type="text/javascript">
    var source = document.getElementById("source");
    var dest = document.getElementById("text");
    source.ondragstart = function(evt)
    {
        var dt = evt.dataTransfer;
        // 可设置move、copy等属性值看看效果
        dt.effectAllowed = ‘link‘;
        dt.setData("text/plain", "www.fkjava.org");
    }
    // 允许拖动
    document.ondragover = function(e){return false;};
</script>
</body>


改变拖动图标:

<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 拖放行为 </title>
</head>
<body>
<div id="source" draggable="true" style="width:80px;height:60px;
    border:1px solid black;">拖动我</div>
<script type="text/javascript">
    var source = document.getElementById("source");
    var dest = document.getElementById("text");
    var myIcon = document.createElement("img");
    myIcon.src = "my.gif";
    source.ondragstart = function(evt)
    {
        var dt = evt.dataTransfer;
        // 可设置move、copy等属性值看看效果
         dt.effectAllowed = ‘link‘;
        dt.setDragImage(myIcon , 0 , 0);
        dt.setData("text/plain", "www.fkjava.org");
    }
    // 允许拖动
    document.ondragover = function(e){return false;};
</script>
</body>
</html>

时间: 2024-10-27 08:13:43

HTML5新增的拖放API的相关文章

HTML5新增的拖放API---(一)

HTML5新增了关于拖放的API,通过API可以让HTML页面的任意元素都变成可拖动的,通过使用拖放机制可以开发出更友好的人机交互的界面. 拖放操作可以分为两个动作:在某个元素上按下鼠标移动鼠标(没有松开鼠标),此时开始拖动:在拖动的过程中,只要没有松开鼠标,将会不断产生事件-----这个过程称为“拖”.把被拖动的元素拖动到另外一个元素上并松开鼠标-----这个过程被称为“放”. 一.启动拖放 在HTML5中,<img .../>元素默认就是可拖动的:而<a .../>元素只要设置

html5的新特性——拖放API

在HTML5之前只能使用鼠标事件模拟出"拖放"效果:HTML5专门为拖放提供了7个事件句柄.  被拖动的源对象可以触发的事件: (1)ondragstart:源对象开始被拖动 (2)ondrag:源对象被拖动过程中(鼠标可能在移动也可能未移动) (3)ondragend:源对象被拖动结束 拖动源对象可以进入到上方的目标对象可以触发的事件: (1)ondragenter:目标对象被源对象拖动着进入 (2)ondragover:目标对象被源对象拖动着悬停在上方   注意:必须组织drago

HTML5新增Canvas标签及对应属性、API详解(基础一)

知识说明: HTML5新增的canvas标签,通过创建画布,在画布上创建任何想要的形状,下面将canvas的API以及属性做一个整理,并且附上时钟的示例,便于后期复习学习!Fighting! 一.标签原型 <canvas width=”1000” height=”1000” id=”myCanvas”> 您的浏览器版本过低,不支持HTML5新增的canvas标签. </canvas> 使用js获取该画布,并指定对象 <script> Var canvasID = doc

HTML5 文件拖放API讲解

本章向大家讲解一下HTML 5中文件API与拖放API的使用方法.HTML5的文件API,可以在浏览器中直接显示客户端文件的信息或文件中的内容,而通过拖放API,可以直接将位于客户端中的文件拖动到浏览器中,也可以单独拖动页面中的元素或者元素中的内容. HTML5拖拽文件预览效果图: 在线演示 以前,我们使用file控件,单击上传按钮后选择计算机中的文件.在HTML5中,我们可以先将计算机中的文件直接拖动到浏览器中进行预览,确定文件是我们所需要的,然后单击上传按钮将该文件上传到服务器端. 我们使用

Html5之高级-11 拖放API (拖放事件、dataTransfer对象、setDragImage方法)

一.拖放API WEB 拖放 - 在桌面应用程序上,可以将元素从一个位置拖放到另一个位置,但在Web上,开发者没有一种能够实现这种操作的标准技术,从而在Web上去实现这个功能并不太容易 - 在 HTML5 标准中引入了拖放API,从而使我们有可能开发出于桌面应用程序完全相同的 Web应用程序 源元素事件 - 在拖放 API 中引入了一些新的事件,其中有一些元素是由源元素(拖动的元素)触发,称之为源元素事件,另一些事件由目标元素触发(源元素投放的元素) - 源元素事件: - dragstart:当

HTML5拖放API

拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 浏览器支持 Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5 支持拖放. 注释:在 Safari 5.1.2 中不支持拖放. 拖放步骤 1.对象元素的draggable属性设置为true(draggable="true").还需要注意的是a元素和img元素必须指定href.dragstart 被拖放的元素

HTML5新增的一些属性和功能之六——拖拽事件

拖放事件的前提是分为源对象和目标对象,你鼠标拖着的是源对象,你要放置的位置是目标对象,区分这两个对象是因为HTML5的拖放事件对两者是不同的. 被拖动的源对象可以触发的事件: 1).ondragstart:源对象开始被拖动 2).ondrag:源对象被拖动过程中(鼠标可能移动也可能不移动) 3).ondragend:源对象被拖动结束 拖动源对象可以进入到上方的目标对象可以触发的事件: 1).ondragenter:目标对象被源对象拖动着进入 2).ondragover:目标对象被源对象拖动着悬停

php 下 html5 XHR2 + FormData + File API 上传文件

FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormData的最大优点就是我们可以异步上传一个二进制文件. 例1如下: <!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>

HTML5 学习笔记(二)——HTML5新增属性与表单元素

目录 一.HTML5新增属性 1.1.contextmenu 1.2.contentEditable 1.3.hidden 1.4.draggable 1.5.data-* 1.6.placeholder占位属性 1.7.required必填属性 1.8.pattern正则属性 1.9.autofocus自动聚焦属性 1.10.autocomplete自动完成属性 1.11.novalidate不验证属性 1.12.multiple多选属性 二.HTML5表单新功能解析 2.1.表单结构更自由