HTML5拖放功能的注意点

首先看如下代码
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
#div1 {width:200px;height:200px;padding:10px;border:1px solid #aaaaaa;}
</style>
<script type = "text/javascript">
function allowDrop(ev){
ev.preventDefault();
}
function drag(ev){
ev.dataTransfer.setData("Text",ev.target.id);
}
function drop(ev){
ev.preventDefault();
var data = ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>
<p>请把 W3School 的图片拖放到矩形中:</p>
<div id = "div1" ondragover = "allowDrop(event)" ondrop = "drop(event)"></div> <br/> <br/><br/><br/><br/>
<img id = "img1"src = "resource/9.jpg" ondragstart = "drag(event)" draggable = "true" /><br/>
</body>
</html>

我在实现时犯了个错误:
缺少了<!DOCTYPE HTML>,那么这个<!DOCTYPE HTML>和类似的 <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">有什么作用呢。
该标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范。如果页面中没有他,就会用浏览器本身的解析标准,这样会造成页面在不同的浏览器(IE、火狐等)可能出现不同的显示效果。
而<!DOCTYPE HTML>是HTML5的解析标准,html5的doctype就是这样写的,并且现代浏览器都认识它。如果我们不使用它就使用了浏览器去解析这些HTML5标签,所以显然不能识别这些拖放操作,代码就不能正常工作了。可参考[url]http://i.wanz.im/2010/05/28/why_doctype_html/[/url]

总结,如何实现拖放呢?一共有四个部分需要实现,第一对于图片设定其可拖放,第二,对于该图片,定义当元素被拖放后发生什么,往往是把该元素的id通过DHTML的dataTransfer属性的setData方法和一个类型进行绑定。等放置的时候就通过这个类型找到这个元素,随后把他当做子元素加入到拖放地中。第三,通过ondragover定义拖放到哪里,也就是标签中含有ondragover属性代表图片等可以被拖放到这里。第四,定义拖放最后的放置的函数。上面也说了,通过getData方法找到拖放的元素ID,然后调用XML DOM的添加节点的方法appendChild将拖放的元素放置在这里。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现自动生成相框的功能,需要使用HTML5的API,并结合Canvas绘图功能。 以下是一个简单的实现步骤及代码示例: 1. HTML结构 ```html <div id="frame-container"> <canvas id="canvas"></canvas> <img id="image" src="your-image-url" draggable="true"> </div> ``` 2. JS代码 ```javascript // 获取canvas和image元素 var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); var image = document.getElementById('image'); // 设置canvas的宽高为image的宽高 canvas.width = image.width; canvas.height = image.height; // 监听image元素的事件 image.addEventListener('dragstart', function(e) { // 将的数据设置为image元素的src属性值 e.dataTransfer.setData('text/plain', image.src); }); // 监听canvas元素的事件 canvas.addEventListener('dragover', function(e) { // 阻止默认事件,允许 e.preventDefault(); }); canvas.addEventListener('drop', function(e) { // 阻止默认事件,允许 e.preventDefault(); // 获取的数据 var imageUrl = e.dataTransfer.getData('text/plain'); // 创建一个新的Image对象,加载的图片 var newImage = new Image(); newImage.src = imageUrl; // 在canvas上绘制相框和图片 newImage.onload = function() { // 绘制相框 ctx.strokeStyle = '#000'; ctx.lineWidth = 10; ctx.strokeRect(0, 0, canvas.width, canvas.height); // 绘制图片 ctx.drawImage(newImage, 10, 10, canvas.width - 20, canvas.height - 20); } }); ``` 通过以上代码,当用户将图片到canvas元素上时,会在canvas上生成一个相框,并将的图片绘制在相框内部。 需要注意的是,由于浏览器安全策略的限制,当使用本地图片时,需要使用本地服务器进行测试,否则会报错。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值