HTML5中实现拖放效果无须借助javascript


Posted in HTML / CSS onDecember 26, 2012

在Web开发中,我们要实现拖放效果,需要借助Javascript。今天让我们使用Html5实现它:
先看html核心代码:

复制代码
代码如下:

<div>
<p>把黄色小方块拖入到红色大方框中</p>
</div>
<div id="item" draggable="true">
</div>
<div id="drop">
</div>

draggable属性是html5新增加的,它有三个值true,false,auto. true是可以拖,false是不可以,auto由用户浏览器是否支持而定。更多请可以参考官方文档.
加上一点儿样式:
复制代码
代码如下:

<style type="text/css">
#drop
{
width: 300px;
height: 200px;
background-color: #ff0000;
padding: 5px;
border: 2px solid #000000;
}
#item
{
width: 100px;
height: 100px;
background-color: #ffff00;
padding: 5px;
margin: 20px;
border: 1px dashed #000000;
}
*[draggable=true] {
-moz-user-select:none;
-khtml-user-drag: element;
cursor: move;
}
*:-khtml-drag {
background-color: rgba(238,238,238, 0.5);
}
</style>

然后我们来看javascript:
复制代码
代码如下:

function listenEvent(eventTarget, eventType, eventHandler) {
if (eventTarget.addEventListener) {
eventTarget.addEventListener(eventType, eventHandler,false);
} else if (eventTarget.attachEvent) {
eventType = "on" + eventType;
eventTarget.attachEvent(eventType, eventHandler);
} else {
eventTarget["on" + eventType] = eventHandler;
}
}
// cancel event
function cancelEvent (event) {
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
}
// cancel propagation
function cancelPropagation (event) {
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
}
window.onload=function() {
var target = document.getElementById("drop");
listenEvent(target,"dragenter",cancelEvent);
listenEvent(target,"dragover", dragOver);
listenEvent(target,"drop",function (evt) {
cancelPropagation(evt);
evt = evt || window.event;
evt.dataTransfer.dropEffect = 'copy';
var id = evt.dataTransfer.getData("Text");
target.appendChild(document.getElementById(id));
});
var item = document.getElementById("item");
item.setAttribute("draggable", "true");
listenEvent(item,"dragstart", function(evt) {
evt = evt || window.event;
evt.dataTransfer.effectAllowed = 'copy';
evt.dataTransfer.setData("Text",item.id);
});
};
function dragOver(evt) {
if (evt.preventDefault) evt.preventDefault();
evt = evt || window.event;
evt.dataTransfer.dropEffect = 'copy';
return false;
}

由上面的代码我们看使用一组HTML5 提供的拖放Events,直接来看下面:
dragstart
Drag event starts.
drag
During the drag operation.
dragenter
Drag is over the target; used to determine if target will accept drop.
dragover
Drag is over target; used to determine feedback to user.
drop
Drop occurs.
dragleave
Drag leaves target.
dragend
Drag operation ends.
定义了相关的事件,来实现想要功能。上面的Js不难看懂。
你可以自己试一下,目前在Opera支持最好,IE效果并不好。
希望对您Web开发有帮助.
HTML / CSS 相关文章推荐
CSS3动画之利用requestAnimationFrame触发重新播放功能
Sep 11 HTML / CSS
纯CSS3实现地球自转实现代码(图文教程附送源码)
Dec 26 HTML / CSS
css3.0 图形构成实例练习一
Mar 19 HTML / CSS
关于css兼容性问题及一些常见问题汇总
May 03 HTML / CSS
HTML5 用动画的表现形式装载图像
Mar 08 HTML / CSS
HTML5 Canvas阴影使用方法实例演示
Aug 02 HTML / CSS
HTML5新增的Css选择器、伪类介绍
Aug 07 HTML / CSS
一波HTML5 Canvas基础绘图实例代码集合
Feb 28 HTML / CSS
详解HTML5 Canvas标签及基本使用
Jan 10 HTML / CSS
boostrap modal 闪现问题的解决方法
Sep 01 HTML / CSS
使用layui实现左侧菜单栏及动态操作tab项的方法
Nov 10 HTML / CSS
Html5获取用户当前位置的几种方式
Jan 18 HTML / CSS
html5 application cache遇到的严重问题
Dec 26 #HTML / CSS
html5 web本地存储将取代我们的cookie
Dec 26 #HTML / CSS
html5之Canvas路径绘图、坐标变换应用实例
Dec 26 #HTML / CSS
html5声频audio和视频video等新特性详细说明
Dec 26 #HTML / CSS
html5-Canvas可以在web中绘制各种图形
Dec 26 #HTML / CSS
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
Dec 25 #HTML / CSS
HTML5引入的新数组TypedArray介绍
Dec 24 #HTML / CSS
You might like
php防止用户重复提交表单
2015/11/02 PHP
完美利用Yii2微信后台开发的系列总结
2016/07/18 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
2013/05/19 Javascript
JS实现控制表格单元格垂直对齐的方法
2015/03/30 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
通过JavaScript下载文件到本地的方法(单文件)
2019/03/17 Javascript
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
改变 Python 中线程执行顺序的方法
2020/09/24 Python
Python图像识别+KNN求解数独的实现
2020/11/13 Python
瑞典度假品牌:OAS
2019/05/28 全球购物
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
玩具公司的创业计划书
2013/12/31 职场文书
问卷调查计划书
2014/01/10 职场文书
土木建筑学生自我评价
2014/01/14 职场文书
2014年医务科工作总结
2014/12/18 职场文书
2015社区爱国卫生工作总结
2015/04/21 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
Spring Boot 排除某个类加载注入IOC的操作
2021/08/02 Java/Android
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers