码迷,mamicode.com
首页 > 其他好文 > 详细

canvas总结

时间:2015-05-24 21:51:35      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

摘要 制作微信后台时需要用html5制作一个小活动,用到的canvas,感觉不错,总结一下与大家分享,涉及:html5-canvas、canvas路径绘画、canvas-事件响应

 

先讲讲canvas

1
<canvas id="canvas" width="500" height="500"></canvas>

创建一个画幕

1
2
var canvas = document.getElementById(‘canvas‘); 
var ctx1 = canvas.getContext(‘2d‘);

获取画幕对象,再创建一个绘制环境

1
2
3
beginPath //起始路径,当前路径
moveTo    //路径移动到指定点
closePath //回到起始路径

三个基本路径方法

1
2
ctx.translate(w/2-10,h/2-10);  //移动原点坐标
ctx.rotate(60*Math.PI/180);   // 旋转坐标系

两个基本操作函数,最开始的原点坐标(0,0),位于画幕左上角,移动和旋转都是一次改变,之后的都改变了,大家好好体会

1
2
3
4
ctx.stroke();               //填充空心
ctx.fill();                 //填充实心
ctx.strokeStyle="";         //设计填充样式,颜色、渐变和模式
ctx.fillStyle="";

两种基本绘画形式,,,渐变我没有用过,就不列出来了

1
2
3
4
ctx.rect();              //绘制矩形
ctx.arc();                //绘制曲线和圆
ctx.lineTo();             //绘制直线             
ctx.drawImage();          //绘制图像

上面几个函数和fill()、stroke()是结合用的,可以先ctx.rect();ctx.fill(),也可以直接ctx.fillRect();绘制rect()和arc()可以获得路径,我这次就是这样处理的,图案我没深究,感觉没它们好用吧

获得图像有两种方法

1
2
3
4
5
6
7
8
9
10
var img=document.getElementById("scream1"); 
 
<img id="scream" src="hb1.png" hidden />   //第一种
 
var img=new Image()  
img.src="/img/flower.png";  
img.onload = function () //确保图片已经加载完毕  
{  
    ctx.drawImage(img,100,100);  
}     //第二种

一个位置上是可以绘制多个图案的,并且后者会覆盖前者

最后,给出一段canvas路径绘制事件的代码,希望对新手有些帮助

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
canvas.addEventListener("mousedown",function(e){   
            p = getEventPosition(e);   
            reDraw(p,ctx);   
        }, false);    //给画幕添加事件监听器
 
function getEventPosition(ev){   
    var x, y;   
    if (ev.layerX || ev.layerX == 0) {   
        x = ev.layerX;   
        y = ev.layerY;   
    }else if (ev.offsetX || ev.offsetX == 0) { // Opera   
        x = ev.offsetX;   
        y = ev.offsetY;   
    }   
    return {x: x, y: y};   
}//获得点击触发坐标
 
  
function reDraw(p,ctx){  
w=window.innerWidth;
var img=document.getElementById("scream1");   
ctx.strokeStyle="#302e3a";
ctx.beginPath();
ctx.rotate(60*Math.PI/180);
ctx.rect(w/10,w/10,w/4,w/4);
ctx.drawImage(img,w/10,w/10,w/4,w/4); 
ctx.stroke();
if(ctx.isPointInPath(p.x, p.y))
alert("good");
}  //重绘,构建路径,并形成响应

需要进一步帮助或者获取详细代码的小伙伴可以给我留言或加我QQ:752227740,有不足的地方恳请大神们指正,代码不全给大家带来不便希望谅解!

 

canvas总结

标签:

原文地址:http://www.cnblogs.com/lkzcman/p/4526512.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!