HTML5新特性之Canvas+drag(拖拽图像实现图像反转)
1、什么是canvas
- 在网页上使用canvas元素时,会创建一块矩形区域,默认矩形区域宽度300px,高度150px。。
- 页面中加入canvas元素后,可以通过javascript自由控制。可以在其中添加图片、线条以及文字,也可以在里头绘图,还可 以加入高级动画。
- 使用canvas编程,首先要获得其上下文(context)。接着在上下文中执行动作,最后将动作应用到上下文中。

Update your browser to enjoy canvas!
</canvas>
<!DOCTYPE HTML>
<html>
<head>
<title>Canvas API</title>
<meta charset="utf-8">
</head> <body>
<p id="support"></p> </body>
</html> <script type="text/javascript">
<!--
try{
document.createElement("canvas").getContext("2d");
document.getElementById("support").innerHTML =
"HTML5 Canvas is supported in your browser."
}catch(e){
document.getElementById("support").innerHTML =
"HTML5 Canvas is not supported in your browser."
}
//-->
</script>
5、什么是拖拽
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
#div1 {
width:420px;
height:300px;
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>请把图片拖拽到矩形中</p>
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<br />
<img id="drag1" src="test.jpg" draggable="true" ondragstart="drag(event)" />
</body>
</html>
首先,为了使元素可拖动,把 draggable 属性设置为 true :
<img draggable="true" />
然后,规定当元素被拖动时,会发生什么。
在上面的例子中,ondragstart 属性调用了一个函数,drag(event),它规定了被拖动的数据。
dataTransfer.setData() 方法设置被拖数据的数据类型和值:
function drag(ev)
{
ev.dataTransfer.setData("Text",ev.target.id);
}
在这个例子中,数据类型是 "Text",值是可拖动元素的 id ("drag1")。
放到何处 - ondragover
ondragover 事件规定在何处放置被拖动的数据。
默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。
这要通过调用 ondragover 事件的 event.preventDefault() 方法:
event.preventDefault()
进行放置 - ondrop
当放置被拖数据时,会发生 drop 事件。
在上面的例子中,ondrop 属性调用了一个函数,drop(event):
function drop(ev)
{
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
}
拖拽前:
<!DOCTYPE html>
<html> <head>
<meta charset="utf-8">
<title>Canvas Learn</title>
<style>
body{
background-color:#cccccc;
border:solid 1px;
border-color:white;
font-family:Geneva,Arial,Helvetica,sans-serif;
margin:0px auto;
}
header{
text-align:center;
background-color:#7f3058;
display:block;
color:#FFFFFF;
}
h1{
font-size:36px;
}
nav{
float:left;
display:block;
text-align:center;
width:15%;
}
nav h3{
margin:15px;
color:white;
}
nav a:link,nav a:visited{
display:block;
padding:10px;
font-weight:bold;
border-bottom:3px solid #fff;
margin:5px;
text-decoration:none;
}
nav a:hover{
color:white;
background-color:#7f3058;
}
section{
float:left;
display:block;
width:55%;
}
article{
background-color:#ddd;
display:block;
margin:10px;
padding:10px;
-webkit-border-radius:10px;
-moz-border-radius:10px;
border-radius:10px;
-webkit-box-shadow:2px 2px 20px #aaa;
-moz-box-shadow:2px 2px 20px #aaa;
box-shadow:2px 2px 20px #aaa;
}
article header{
padding:5px;
-webkit-border-radius:10px;
-moz-border-radius:10px;
border-radius:10px;
font-size:18px;
}
article div{
width:440px;
height:300px;
margin:10px;
padding:10px;
border:1px solid #000;
float:center;
}
footer{
clear:both;
display:block;
background-color:#7f3058;
color:#fff;
text-align:center;
padding:5px;
float:bottom;
-webkit-border-radius:5px;
-moz-border-radius:5px;
border-radius:5px;
font-size:18px;
}
p{
color:blue;
text-align:center;
}
aside{
display:block;
width:25%;
float:left; background-color:#ddd;
margin:10px;
padding:10px;
-webkit-border-radius:10px;
-moz-border-radius:10px;
border-radius:10px;
-webkit-box-shadow:2px 2px 20px #aaa;
-moz-box-shadow:2px 2px 20px #aaa;
box-shadow:2px 2px 20px #aaa;
}
aside header{
margin:15px;
color:white;
font-size:15px;
-webkit-border-radius:10px;
-moz-border-radius:10px;
border-radius:10px;
}
aside p{
margin:15px;
color:white;
font-weight:bold;
font-style:italic;
text-align:left;
}
</style>
</head> <body>
<header>
<h1>Canvas Learn</h1>
</header> <div id="canvas">
<nav>
<header><h3>导 航 栏</h3></header>
<a href="http://www.w3school.com.cn/html5/tag_canvas.asp">canvas标签</a>
<a href="http://www.w3school.com.cn/html5/html_5_canvas.asp">canvas学习</a>
<a href="http://zh.wikipedia.org/wiki/Canvas_(HTML%E5%85%83%E7%B4%A0)">canvas维基</a>
</nav> <section>
<article>
<header><h3>Canvas图像处理</h3></header><br />
<div id="src">
<canvas id='image_src' width='420' height='300'
draggable="true" ondragstart="drag(event)">
当前浏览器无法使用canvas标签,请更换新版本浏览器
</canvas>
</div>
<p>将图片拖拽到下面方框内</p>
<div id="dst" ondrop="drop(event)" ondragover="allowDrop(event)">
<canvas id='image_dst' width='420' height='300'></canvas> </div><br /> <footer>
<h4>拖拽图片到另一个框内,图像发生反转</h4>
</footer>
</article>
</section>
</div> <aside>
<header><h3>定义和用法</h3></header>
<p>canvas 标签定义图形,比如图表和其他图像。</p>
<p>canvas 标签只是图形容器,您必须使用脚本来绘制图形。</p>
</aside> <footer>
<h2>Copyright:Caijinping</h2>
</footer> </body> </html> <script type="text/javascript">
<!--
var canvasSrc = document.getElementById('image_src');
var contextSrc = canvasSrc.getContext('2d');
image = new Image();
image.src="test.jpg";
image.onload=function(){
contextSrc.drawImage(image,0,0);
} function draw(){
var canvasDst = document.getElementById('image_dst');
var contextDst = canvasDst.getContext('2d');
var imageDataSrc = contextSrc.getImageData(0,0,image.width,image.height);
var imageDataDst = contextDst.createImageData(image.width, image.height);
for (var j = 0; j < image.height ; j++ )
for (var i = 0; i < image.width ;i++ ){
k = 4*(image.width*j+i);
imageDataDst.data[k + 0] = 255 - imageDataSrc.data[k + 0];
imageDataDst.data[k + 1] = 255 - imageDataSrc.data[k + 1];
imageDataDst.data[k + 2] = 255 - imageDataSrc.data[k + 2];
imageDataDst.data[k + 3] = 255;
}
contextDst.putImageData(imageDataDst,0,0);
} 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));
draw();
}
//-->
</script>
HTML5新特性之Canvas+drag(拖拽图像实现图像反转)的更多相关文章
- Html5新特性 <canvas>画板画直线
以下样例为用canvas标签画多条直线 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...
- web全栈架构师[笔记] — 03 html5新特性
HTML5新特性 一.geolocation PC端 精度比较低 通过IP库定位 移动端 通过GPS window.navigator.geolocation 单次 getCurrentPositio ...
- H5 语义化、基本事件 浅析 (含file对象、drag拖拽等)
1.语义化标签 帮助搜索引擎,盲人设备等程序,辨识网页内容信息,明确网页区域分布,不体现任何样式,但存在浏览器兼容性问题,如IE8下无<header>标签. ① H5基本语义标签: < ...
- HTML5新特性--svg-echarts(重点)-拖动API-WebWorker
一.html5新特性--svg--(折线/渐变特效对象/滤镜) #折线:多个坐标点组件一条折线 <polyline points="50,50 70,55 60,66 " s ...
- canvas 图片拖拽旋转之二——canvas状态保存(save和restore)
引言 在上一篇日志“canvas 图片拖拽旋转之一”中,对坐标转换有了比较深入的了解,但是仅仅利用坐标转换实现的拖拽旋转,会改变canvas坐标系的状态,从而影响画布上其他元素的绘制.因此,这个时候需 ...
- html5新特性
这一篇博文不会告诉你怎么去使用html5的新特性,只会给你总结一下新特性------对于好学的人可以把这篇文章当做一个目录 对于初接触的人来说是一个导向 对于已经接触过的人来说是一个检测你掌握程度的检 ...
- HTML5新特性之CSS+HTML5实例
1.新的DOCTYPE和字符集 HTML5的一项准则就是化繁为简,Web页面的DOCTYPE被极大的简化. <!DOCTYPE html> 同时字符集声明也被简化了: <meta c ...
- html5 新特性
1.querySelector 返回文档中匹配指定css选择器的一个元素. 注意:uerySelector() 方法仅仅返回匹配指定选择器的第一个元素 如果你需要返回所有的元素,请使用 querySe ...
- html5新特性与用法大全了解一下
有好多小伙伴私聊我问我html5新特性 和用法,下面我给大家具体介绍一下html5都新加了哪些新特性,下面我给大家总结一下. 1)新的语义标签 footer header 等等2)增强型表单 表单2. ...
随机推荐
- 用连接池提高Servlet访问数据库的效率
Java Servlet作为首选的服务器端数据处理技术,正在迅速取代CGI脚本.Servlet超越CGI的优势之一在于,不仅多个请求可以共享公用资源,而且还可以在不同用户请求之间保留持续数据.本文介绍 ...
- 调用数据库过程函数mysql
Connection conn=JdbcUtil.getConnection();//JdbcUtil是我写的获取connection的工具类 CallableStatement cast=conn. ...
- 详解函数声明VS函数表达式
函数声明 比方如下:1.我们以一个完整的语句以function开头,不加任何东西. 2.有一个函数名(add) 3.参数可带可不带(x,y) 4.有一个数体 满足以上要求的我们统称为函数声明! 附加小 ...
- 常用Firefox扩展
最近思维混乱,无心做事,故整理下东西.(PS:有些是firefox自带的.) 1.标签页管理器 2.1.41 用途:在新标签页打开书签.历史.地址.搜索. 主页:http://www.firefox. ...
- ibatis 环境搭建(1)
目录和jar包
- Java中的多线程总结(转)
1.多线程概述 当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程.主要以下几个优点: 线程之间很容易实现共享内存 创建线程代价较小 Java语言内置多线程功能支持 2.线 ...
- Unity NGUI 网络斗地主 -制作图集 Atlas
Unity NGUI 网络斗地主 -制作图集 Atlas by @杨海龙 开发环境 Win7+Unity4.2.1f4+NGUI 3.0.4版本 这一节告诉大家如何制作(图集)Atlas! 1.首 ...
- Corn Fields
poj3254:http://poj.org/problem?id=3254 题意:给以n*m的方格,方格中有1或者0,在1的地方可以放置一个物品,但是在物品的上下左右不能有不物品,也可以不放,问你最 ...
- 通过CreateOleObject控制IE
//第二种方法可以有更多控制procedure TForm1.Button1Click(Sender: TObject);procedure OpenInIE(aURL: string);//need ...
- Qt tip 网络请求 QNetworkRequest QJason 处理 JSON
http://blog.csdn.net/linbounconstraint/article/details/52399415 http://download.csdn.net/detail/linb ...