html5-Canvas可以在web中绘制各种图形


Posted in HTML / CSS onDecember 26, 2012

在html5中我觉得最重要的就是引入了Canvas,使得我们可以在web中绘制各种图形。给人感觉单在这点上有点模糊我们web和桌面程序的感觉。在html5外web中也有基于xml的绘图如:VML、SVG。而Canvas为基于像素的绘图。Canvas是一个相当于画板的html节点,我们必须以js操作绘图。
如下
<canvas id="myCanvas" width="600" height="300">你的浏览器还不支持哦</canvas>定义。
我们可以获取canvas对象为var c=document.getElementById("myCanvas");其应有js属性方法如下列举:
1:绘制渲染对象,c.getContext("2d"),获取2d绘图对象,无论我们调用多少次获取的对象都将是相同的对象。
2:绘制方法
clecrRect(left,top,width,height)清除制定矩形区域,
fillRect(left,top,width,height)绘制矩形,并以fillStyle填充。
fillText(text,x,y)绘制文字;
strokeRect(left,top,width,height)绘制矩形,以strokeStyle绘制边界。
beginPath():开启路径的绘制,重置path为初始状态;
closePath():绘制路径path结束,它会绘制一个闭合的区间,添加一条起始位置到当前坐标的闭合曲线;
moveTo(x,y):设置绘图其实坐标。
lineTo(x,y);绘制从当前其实位置到x,y直线。
fill(),stroke(),clip():在完成绘制的最后的填充和边界轮廓,剪辑区域。
arc():绘制弧,圆心位置、起始弧度、终止弧度来指定圆弧的位置和大小;
rect():矩形路径;
drawImage(Imag img):绘制图片;
quadraticCurveTo():二次样条曲线路径,参数两个控制点;
bezierCurveTo():贝塞尔曲线,参数三个控制点;
createImageData,getImageData,putImageData:为Canvas中像素数据。ImageData为记录width、height、和数据 data,其中data为我们色素的记录为
argb,所以数组大小长度为width*height*4,顺序分别为rgba。getImageData为获取矩形区域像素,而putImageData则为设置矩形区域像素;
… and so on!
3:坐标变换
translate(x,y):平移变换,原点移动到坐标(x,y);
rotate(a):旋转变换,旋转a度角;
scale(x,y):伸缩变换;
save(),restore():提供和一个堆栈,保存和恢复绘图状态,save将当前绘图状态压入堆栈,restore出栈,恢复绘图状态;
… and so on!
好了,也晚了。附我的测试代码,:

复制代码
代码如下:

<html>
<head>
</head>
<body>
<canvas id="myCanvas" width="600" height="300">你的浏览器还不支持哦</canvas>
<script type="text/javascript">
var width,height,top,left;
width=height=100;
top=left=5;
var x=10;
var y=10;
var c=document.getElementById("myCanvas");
var maxwidth=c.width-5;
var maxheight=c.height-5;
var cxt=c.getContext("2d");
cxt.strokeStyle="#00f";
cxt.strokeRect(0,0,c.width,c.height);
var img=new Image();
img.src="1.gif";
var MyInterval=null;
start();
function Refresh(){
cxt.clearRect(left,top,width,height);
if((left+x)>(maxwidth-width)||left+x<0){
x=-x;
}
if((top+y)>(maxheight-height)||top+y<0){
y=-y;
}
left=left+x;
top=top+y;
cxt.drawImage(img,left,top,width,height);
cxt.font="20pt 宋体";
cxt.fillText("破狼",left,top+25);
}
function start(){
if(MyInterval==null){
MyInterval=setInterval("Refresh()",100);
}
}
function stop(){
if(MyInterval!=null){
clearInterval(MyInterval);
MyInterval=null;
}
}
function InRectangle(x,y,rectx,recty,rwidth,rheight){
return (x>=rectx&&x<=rectx+rwidth)&&(y>=recty&&y<=recty+rheight)
}
c.onmouseover=function(e){
if(InRectangle(e.clientX,e.clientY,left,top,width,height)){
stop();
}
c.onmouseout=function(e){
start();
}
c.onmousemove=function(e){
if(InRectangle(e.clientX,e.clientY,left,top,width,height)){
if(MyInterval!=null){
stop();
}
}else{
start();
}
}
}
</script>
</body>
</html>
HTML / CSS 相关文章推荐
CSS3 简写animation
May 10 HTML / CSS
纯CSS3实现带动画效果导航菜单无需js
Sep 27 HTML / CSS
使用css3背景渐变中的透明度来设置不同颜色的背景渐变
Mar 31 HTML / CSS
canvas之万花筒效果的简单实现(推荐)
Aug 16 HTML / CSS
CSS3下的渐变文字效果实现示例
Mar 02 HTML / CSS
纯CSS3实现移动端展开和收起效果的示例代码
Apr 26 HTML / CSS
CSS3实现线性渐变用法示例代码详解
Aug 07 HTML / CSS
使用HTML5在网页中嵌入音频和视频播放的基本方法
Feb 22 HTML / CSS
html5 canvas简单封装一个echarts实现不了的饼图
Jun 12 HTML / CSS
html+js 实现markdown编辑器效果
Oct 23 HTML / CSS
html css3不拉伸图片显示效果
Jun 07 HTML / CSS
CSS SandBox应用场景及常见问题
Jun 25 HTML / CSS
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
Dec 25 #HTML / CSS
HTML5引入的新数组TypedArray介绍
Dec 24 #HTML / CSS
突破canvas语法限制 让他支持链式语法
Dec 24 #HTML / CSS
HTML5重塑Web世界它将如何改变互联网
Dec 17 #HTML / CSS
如何使用html5与css3完成google涂鸦动画
Dec 16 #HTML / CSS
HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题
Dec 13 #HTML / CSS
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
Dec 13 #HTML / CSS
You might like
提问的智慧
2006/10/09 PHP
桌面中心(三)修改数据库
2006/10/09 PHP
PHP学习之PHP变量
2006/10/09 PHP
PHP中对数据库操作的封装
2006/10/09 PHP
测试您的 PHP 水平的题目
2007/05/30 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
PHP临时文件的安全性分析
2014/07/04 PHP
php使用GD2绘制几何图形示例
2017/02/15 PHP
javascript中的几个运算符
2007/06/29 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
python 自定义对象的打印方法
2019/01/12 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
2015年上半年党建工作总结
2015/03/30 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技