HTML5+CSS3的读书笔记(three)--HTML5的元素拖曳

277 阅读1分钟

第六章:HTML5的元素拖曳

1.HTML5中拖曳的实现方法

<!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>
</head>
<body>
<html>
<style>
img{width:100px;height:100px}
</style>
<body>
    <div id="src">
        <img draggable="true" src="1.png" id="b"/>
        <img draggable="true" src="2.png" id="c"/>
        <img draggable="true" src="3.png" id="d"/>
		<img draggable="true" src="4.jpg" id="e"/>
    </div>
    <div id="target" style="border-style:solid;width: 200px;height:200px; margin-top:20px">
		<p>将选择的图片拖曳到这里</p>
    </div>
	<span id="msg"></span>
    <script>
        var src = document.getElementById("src");
        var target = document.getElementById("target");
		 var msg = document.getElementById("msg");
        var draggedID;
		
		 src.ondragstart = function (e) {//开始拖曳元素时触发
            draggedID = e.target.id; //获取拖曳对象ID
			 msg.innerHTML="开始拖曳"+draggedID;
        }

        target.ondragenter = function (e){//拖曳时鼠标进入目的元素时触发
			msg.innerHTML="进入目的元素";
			e.preventDefault();
		} 
		
        target.ondragover = function (e){//拖曳时鼠标在目的元素内移动时触发
			msg.innerHTML="在目的元素内移动";
			e.preventDefault();
		}
		
		src.ondragend = function (e){//拖曳动作结束时触发
			msg.innerHTML="结束拖曳";
		}
		
        target.ondrop = function (e) {//在目的元素内释放拖曳元素时触发
            var newElem = document.getElementById(draggedID).cloneNode(false);
            target.innerHTML = "";
            target.appendChild(newElem);
            e.preventDefault();
        }
        
    </script>
</body>
</html>

2.dataTransfer对象

dataTransfer对象专门用于处理拖曳过程中产生的数据信息

effectAllowed属性:
用于设置或返回指定元素被拖曳时被允许的显示效果
可以设定的值包括"none","copy","copyLink","copyMove","link","move","all","uninitialized"

dropEffect属性:
用于设置或返回指定被拖曳元素释放拖曳的显示效果
该属性设置的值必须在effectAllowed设置范围内,否则无效


items属性
用于返回DataTransferItemList对象

types属性
用于返回已保存的数据类型,如果是文件操作则返回文件型字符串

files属性
用于返回被拖曳的文件列表
1.setData(format,data)
--format表示保存的数据类型
--data表示数据内容

src.ondragstart=function(e){
	e.dataTransfer.setData("Text",e.target.id) //使用dataTranster保存拖曳元素id
    msg.innerHTML="开始拖曳"+draggedID;
}
2.getData(format)
该方法用于从dataTransfer对象读取指定类型的数据信息
参数format表示读取的数据类型


target.ondrop = function (e) {//在目的元素内释放拖曳元素时触发
    var droppedID=e.dataTransfer.getData("Text")
    var newElem = document.getElementById(draggedID).cloneNode(false);
    target.innerHTML = "";
    target.appendChild(newElem);
    e.preventDefault();
}
3.clearData(format)
该方法用于从dataTransfer对象中移除指定类型的数据信息
4.setDragImage(image,x,y)
--image用于设定拖曳图标的图像元素
--x用于设定图标与鼠标指针在x轴方向的距离
--y用于设定图标与鼠标指针在y轴方向的距离

src.ondragstart = function (e) {//开始拖曳元素时触发
    draggedID = e.target.id; //获取拖曳对象ID
    var img=document.creatElement('img')
    img.src="icon.jpg"
    e.dataTransfer.setDragImage(img,-10,-10)
    msg.innerHTML="开始拖曳"+draggedID;
}

3.文件拖曳操作

<!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>
</head>
<body>
    <div id="target" style="border-style:solid;width:200px;height:200px;margin-top:
20px">
        <p>将您本地的文件拖曳到这里</p>
    </div>
    <table id="data" border="1">
    </table>
    <script>
        var target = document.getElementById("target");
        target.ondragenter = handleDrag;
        target.ondragover = handleDrag;

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

        target.ondrop = function (e) {
            var files = e.dataTransfer.files;
            var tableElem = document.getElementById("data");
            tableElem.innerHTML = "<tr><th>文件名</th><th>文件类型</th><th>文件大小</th></tr>";
            for (var i = 0; i < files.length; i++) {
                var row = "<tr><td>" + files[i].name + "</td><td>" + files[i].type + "</td><td>" + files[i].size + "</td></tr>";
                tableElem.innerHTML += row;
            }
            e.preventDefault();
        }
    </script>
</body>
</html>

第七章:HTML5的数据存储