html5之拖放

1)创建来源项目

1.1)draggable属性的值:

true——此元素能被拖动;

false——此元素不能被拖动;

auto——浏览器能够自主决定某个元素能否被拖动;

1.2)被拖动元素的事件:

dragstart——在元素開始被拖动时触发;

drag——在元素被拖动时重复触发。

dragend——在拖动操作完毕时触发;

2)创建释放区

2.1)释放区事件:

dragenter——当被拖动元素进入释放区所占领的屏幕空间时触发;

dragover——当被拖动元素在释放区内触发时移动触发;

dragleave——当被拖动元素没有放入就离开释放区时触发;

drop——当被拖动元素在释放区放下时触发。

<!DOCTYPE HTML>
<html>
    <head>
        <title>Example</title>
        <style>
            #src > * {float:left;}
            #src > img {border: thin solid black; padding: 2px; margin:4px;}
            #target {border: thin solid black; margin:4px;}
            #target { height: 81px; width: 81px; text-align: center; display: table;}
            #target > p {display: table-cell; vertical-align: middle;}
            img.dragged {background-color: lightgrey;}
        </style>
    </head>
    <body>
        <div id="src">
            <img draggable="true" id="banana" src="banana100.png" alt="banana"/>
            <img draggable="true" id="apple" src="apple100.png" alt="apple"/>
            <img draggable="true" id="cherries" src="cherries100.png" alt="cherry"/>
            <div id="target">
                <p id="msg">Drop Here</p>
            </div>
        </div>            

        <script>
            var src = document.getElementById("src");
            var target = document.getElementById("target");
            var msg = document.getElementById("msg");

            var draggedID;

            target.ondragenter = handleDrag;
            target.ondragover = handleDrag;

            function handleDrag(e) {
                e.preventDefault();
            }

            target.ondrop = function(e) {
                var newElem = document.getElementById(draggedID).cloneNode(false);
                target.innerHTML = "";
                target.appendChild(newElem);
                e.preventDefault();
            }

            src.ondragstart = function(e) {
                draggedID = e.target.id;
                e.target.classList.add("dragged");
            }

            src.ondragend = function(e) {
                var elems = document.querySelectorAll(".dragged");
                for (var i = 0; i < elems.length; i++) {
                    elems[i].classList.remove("dragged");
                }
            }
        </script>
    </body>
</html>

3)使用DataTransfer对象

3.1)与拖放操作所触发的事件同一时候派发的对象是DragEvent,它派生于MouseEvent。

DragEvent对象定义的额外属性:

dataTransfer——返回用于数据传输到释放区的对象(DataTransfer);

3.2)DataTransfer对象定义的属性:

types——返回数据的格式。

getData(<format>)——返回指定格式的数据;

setData(<format>,<data>)——设置指定格式的数据。

clearData(<format>)——移除指定格式的数据。

files——返回已被拖动文件的列表。

<!DOCTYPE HTML>
<html>
    <head>
        <title>Example</title>
        <style>
            #src > * {float:left;}
            #src > img {border: thin solid black; padding: 2px; margin:4px;}
            #target {border: thin solid black; margin:4px;}
            #target { height: 81px; width: 81px; text-align: center; display: table;}
            #target > p {display: table-cell; vertical-align: middle;}
            img.dragged {background-color: lightgrey;}
        </style>
    </head>
    <body>
        <div id="src">
            <img draggable="true" id="banana" src="banana100.png" alt="banana"/>
            <img draggable="true" id="apple" src="apple100.png" alt="apple"/>
            <img draggable="true" id="cherries" src="cherries100.png" alt="cherry"/>
            <div id="target">
                <p id="msg">Drop Here</p>
            </div>
        </div>            

        <script>
            var src = document.getElementById("src");
            var target = document.getElementById("target");

            target.ondragenter = handleDrag;
            target.ondragover = handleDrag;

            function handleDrag(e) {
                e.preventDefault();
            }

            target.ondrop = function(e) {
                var droppedID = e.dataTransfer.getData("Text");
                var newElem = document.getElementById(droppedID).cloneNode(false);
                target.innerHTML = "";
                target.appendChild(newElem);
                e.preventDefault();
            }

            src.ondragstart = function(e) {
                e.dataTransfer.setData("Text", e.target.id);
                e.target.classList.add("dragged");
            }

            src.ondragend = function(e) {
                var elems = document.querySelectorAll(".dragged");
                for (var i = 0; i < elems.length; i++) {
                    elems[i].classList.remove("dragged");
                }
            }
        </script>
    </body>
</html>

3.3)拖放文件:

File对象定义的属性

name——获取文件名称。

type——获取文件类型。以MIME类型表示;

size——获取文件大小(以字节计算);

<!DOCTYPE HTML>
<html>
    <head>
        <title>Example</title>
        <style>
            .table {display:table;}
            .row {display:table-row;}
            .cell {display: table-cell; padding: 5px;}
            .label {text-align: right;}
            #target {border: medium double black; margin:4px; height: 50px;
                width: 200px; text-align: center; display: table;}
            #target > p {display: table-cell; vertical-align: middle;}
        </style>
    </head>
    <body>
        <form id="fruitform" method="post" action="http://titan:8080/form">
            <div class="table">
                <div class="row">
                    <div class="cell label">Bananas:</div>
                    <div class="cell"><input name="bananas" value="2"/></div>
                </div>
                <div class="row">
                    <div class="cell label">Apples:</div>
                    <div class="cell"><input name="apples" value="5"/></div>
                </div>
                <div class="row">
                    <div class="cell label">Cherries:</div>
                    <div class="cell"><input name="cherries" value="20"/></div>
                </div>
                <div class="row">
                    <div class="cell label">File:</div>
                    <div class="cell"><input type="file" name="file"/></div>
                </div>
                <div class="row">
                    <div class="cell label">Total:</div>
                    <div id="results" class="cell">0 items</div>
                </div>
            </div>
            <div id="target">
                <p id="msg">Drop Files Here</p>
            </div>
            <button id="submit" type="submit">Submit Form</button>
        </form>
        <script>
            var target = document.getElementById("target");
            var httpRequest;
            var fileList;

            document.getElementById("submit").onclick = handleButtonPress;
            target.ondragenter = handleDrag;
            target.ondragover = handleDrag;

            function handleDrag(e) {
                e.preventDefault();
            }

            target.ondrop = function(e) {
                fileList = e.dataTransfer.files;
                e.preventDefault();
            }          

            function handleButtonPress(e) {
                e.preventDefault();

                var form = document.getElementById("fruitform");
                var formData = new FormData(form);

                if (fileList || true) {
                    for (var i = 0; i < fileList.length; i++) {
                        formData.append("file" + i, fileList[i]);
                    }
                }  

                httpRequest = new XMLHttpRequest();
                httpRequest.onreadystatechange = handleResponse;
                httpRequest.open("POST", form.action);
                httpRequest.send(formData);
            }

            function handleResponse() {
                if (httpRequest.readyState == 4 && httpRequest.status == 200) {
                    var data = JSON.parse(httpRequest.responseText);
                    document.getElementById("results").innerHTML = "You ordered "
                        + data.total + " items";
                }
            }
         </script>
    </body>
</html>
时间: 2024-11-07 12:07:11

html5之拖放的相关文章

HTML5原生拖放实例分析

原文链接:http://www.cnblogs.com/zhenwen/p/5855107.html HTML5提供了原生拖放功能的JavaScript API,使用起来很方便. 兼容性: 对于PC端浏览器,Firefox.Chrome.Safari支持良好,而IE和Edge浏览器有些特性不支持,如IE10和IE11.Edge对于dataTransfer.setData(format,data) ,只定义了"text"和"URL"两种有效的数据类型.而HTML5规范

HTML5 文件拖放API讲解

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

html5实现拖放

在html5中,支持拖放API接口,通过该功能,数据可以在浏览器与其他应用程序之间互相拖放,想要实现该操作,必须经过一下两个步骤 (1)将想要拖放的对象标签的draggable属性设为true.这样才能将该标签进行拖放,令外,img标签与a标签必  须指定为true,默认允许拖放. (2)编写与有拖放有关的事件处理代码,常用的播放事件如下: dragstart  开始拖放操作 drag       拖放过程中 dragenter  被拖放的标签开始进入本标签的范围内 dragover   被拖放

HTML5 之拖放

拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. HTML5 拖放实例 下面的例子是一个简单的拖放实例: 实例1 <!DOCTYPE HTML> <html> <head> <style type="text/css"> #div1 {width:488px;height:70px;padding:10px;b

HTML5 — 让拖放变的流行起来

在HTML5 出现之前,页面元素的拖放需要监听 mousedown.mouseover 以及 mouseup 等一系列事件,然后改变元素的相对位置来实现这一效果.HTML DnD(Drag-and-Drop)API 的出现,使得拖放变的简单.但是由于 DnD 尚处在草案阶段,各浏览器对其规范并未统一,有些事件在不同浏览器中会出现不同效果. 要使用 DnD,需要明确两件事情,一是需要拖动的元素,二是可放置拖动元素的位置.拖放无非是将元素从一个位置拖到另一个位置. Drag 首先我们需要指定要拖动的

HTML5 元素拖放

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>HTML5拖放</title> <script type="text/javascript"> function allowDrop(ev) { ev.preventDefault();//取消默认 } function drag(ev) { //设置被拖数据的数据

HTML5元素拖放设置总结

将元素图片放入div盒子内 1.首先设置元素为可拖放:在img标签内加入draggable=”true”. <img draggable="true"> 2.设置元素的拖动:在img标签中用ondragstart属性调用一个函数drag(ev),这个函数中用dataTransfer.setData()方法设置了被拖数据的数据类型和值. <img ondragstart=”drag(event)”> function drag(ev){ ev.dataTansfe

关于HTML5中拖放

拖拽 事件:dragstart拖拽开始drag拖拽中dragend拖拽结束dragenter进入投放区dragover投放区中移动dragleave离开投放区drop投放 ------------------- 一般在dragover(投放区中移动)事件中,默认地,无法将数据元素放置到其他元素中.如果需要设置允许放置,我们必须阻止对元素的默认处理方式.可通过调用 ondragover 事件的 event.preventDefault()方法. 在dragstart(拖拽开始)事件中可以传值,通过

浅谈HTML5拖放

现在,新增的HTML5元素很多,也给开发者带来了很多便利,比如说:结构标记header .nav.arctile.section.footer 表单元素:url.date.emaile.search.tel.range.color.datalist.progress.meter.output等,还有一些webstroge元素.绘图元素.拖放api等,这里着重说一下拖放api. 在生活中,我们经常将桌面的应用程序元素,从一个地方拖拽到另外一个地方,开发者没有一种能实现这种操作的标准技术,在HTML