参考内容:妙味课堂
canvas 画布
<script>
window.onload = function(){
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
// oGC.fillRect(50,50,100,100);
// oGC.strokeRect(50.5,50.5,100,100);
// stroke => 边框 fill => 填充
oGC.fillStyle = 'red';
oGC.strokeStyle = 'blue';
oGC.lineWidth = 10;//线宽
// oGC.lineJoin = 'round';//边框四角变圆弧
oGC.lineJoin = 'bevel';//边框四角变斜切
oGC.fillRect(50,50,100,100);
oGC.strokeRect(50.5,50.5,100,100);
// oGC.strokeRect(50.5,50.5,100,100);
// oGC.fillRect(50,50,100,100);
}
</script>
<body>
<canvas id="c1" width="400" height="400">
<!--不支持不会显示画布,直接显示span的内容-->
<!--默认:宽300 高150-->
<span>不支持canvas的浏览器</span>
</canvas>
</body>
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
//起始
oGC.beginPath();
oGC.moveTo( 100,100 );
oGC.lineTo( 200,200 );
oGC.lineTo( 300,200 );
//结束
oGC.closePath();
oGC.stroke(); //框
oGC.beginPath();
oGC.moveTo( 100,200 );
oGC.lineTo( 200,300 );
oGC.lineTo( 300,300 );
oGC.closePath();
oGC.fill(); //填充
//清空画布
oGC.clearRect( 0,0,oC.width,oC.height );
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
//.save() => 保存, restore() => 恢复;两者形成闭包,类似创建局部变量
oGC.save();
oGC.fillStyle = 'red';
oGC.beginPath();
oGC.moveTo( 100,100 );
oGC.lineTo( 200,200 );
oGC.lineTo( 300,200 );
oGC.closePath();
oGC.fill();
oGC.restore();
oGC.beginPath();
oGC.moveTo( 100,200 );
oGC.lineTo( 200,300 );
oGC.lineTo( 300,300 );
oGC.closePath();
oGC.fill();
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
oGC.lineWidth = 20;
//oGC.lineCap = 'square'; //长度加上宽度的一半
oGC.lineCap = 'round';
oGC.moveTo(100,100);
oGC.lineTo(200,200);
oGC.stroke();
//画布上鼠标画图
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
oC.onmousedown = function(ev){
var ev = ev || event;
oGC.moveTo( ev.clientX - oC.offsetLeft,ev.clientY - oC.offsetTop );
document.onmousemove = function(ev){
var ev = ev || event;
oGC.lineTo( ev.clientX - oC.offsetLeft,ev.clientY - oC.offsetTop );
oGC.stroke();
}
document.onmouseup = function(){
document.onmousemove = document.onmouseup = null;
}
}
//定时器实现运动
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
var num = 0;
oGC.fillRect(0,0,100,100);
setInterval(function(){
num ++;
//擦除上一个图形,实现运动
oGC.clearRect( 0,0,oC.width,oC.height );
oGC.fillRect( num,num,100,100 );
},30);
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
//false => 顺时间画圆,默认
oGC.moveTo(200,200);
//oGC.arc( 起始横坐标,起始纵坐标,半径,起始弧度,结束弧度,旋转方向 );
oGC.arc( 200,200,150,0,90*Math.PI/180,true );
oGC.stroke();
//HTML5实现钟表
<script>
window.onload = function(){
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
toDraw();
function toDraw(){
var x = 200;
var y = 200;
var r = 150;
var oDate = new Date();
var oHours = oDate.getHours();
var oMin = oDate.getMinutes();
var oSen = oDate.getSeconds();
var oHoursValue = ( -90 + oHours * 30 + oMin/60 * 30 )* Math.PI/180;
var oMinValue = ( -90 + oMin * 6 ) * Math.PI/180;
var oSenValue = ( -90 + oSen * 6 ) * Math.PI/180;
/*oGC.moveTo(x,y);
oGC.arc( x,y,r,0*Math.PI/180,6*Math.PI/180,false );
oGC.moveTo(x,y);
oGC.arc( x,y,r,6*Math.PI/180,12*Math.PI/180,false );*/
//生成秒盘
oGC.beginPath();
for( var i = 0; i < 60; i ++ ){
oGC.moveTo(x,y);
oGC.arc( x,y,r,6*i*Math.PI/180,6*(i+1)*Math.PI/180,false );
}
oGC.closePath();
oGC.stroke();
//遮盖秒盘
oGC.fillStyle = 'white';
oGC.beginPath();
oGC.moveTo( x,y );
oGC.arc( x,y,r*19/20,0,360*Math.PI/180,false );
oGC.closePath();
oGC.fill();
//生成分盘
oGC.lineWidth = 3;
oGC.beginPath();
for( var i = 0; i < 12; i ++ ){
oGC.moveTo(x,y);
oGC.arc( x,y,r,30*i*Math.PI/180,30*(i+1)*Math.PI/180,false );
}
oGC.closePath();
oGC.stroke();
//遮盖分盘
oGC.fillStyle = 'white';
oGC.beginPath();
oGC.moveTo( x,y );
oGC.arc( x,y,r*18/20,0,360*Math.PI/180,false );
oGC.closePath();
oGC.fill();
//生成时针
oGC.lineWidth = 5;
oGC.beginPath();
oGC.moveTo( x,y );
oGC.arc( x,y,r*10/20,oHoursValue,oHoursValue,false );
oGC.closePath();
oGC.stroke();
//生成分针
oGC.lineWidth = 3;
oGC.beginPath();
oGC.moveTo( x,y );
oGC.arc( x,y,r*14/20,oMinValue,oMinValue,false );
oGC.closePath();
oGC.stroke();
//生成秒针
oGC.lineWidth = 1;
oGC.beginPath();
oGC.moveTo( x,y );
oGC.arc( x,y,r*18/20,oSenValue,oSenValue,false );
oGC.closePath();
oGC.stroke();
setInterval( toDraw,1000 );
}
}
</script>
<body>
<canvas id="c1" width="400" height="400">
<!--不支持不会显示画布,直接显示span的内容-->
<!--默认:宽300 高150-->
<span>不支持canvas的浏览器</span>
</canvas>
</body>
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
oGC.moveTo(100,200);
//切点处变圆弧
oGC.arcTo( 100,100,200,100,50 );
/*oGC.arcTo( cx, cy, x2, y2, 半径 )
cx,cy表示控制点的坐标,x2,y2表示结束点的坐标,如果我们想画一条弧线,
需要提供3个坐标,开始点,控制点和结束点.开始点一般可以通过moveTo
或者lineTo提供.arcTo提供控制点和结束点.*/
oGC.stroke();
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
/* oGC.moveTo(100,200);
//.quadraticCurveTo( 控制点横坐标,控制点纵坐标,终点横坐标,终点纵坐标 );
oGC.quadraticCurveTo( 100,100,200,100 );
oGC.stroke();*/
oGC.moveTo(100,200);
//.bezierCurveTo( 控制点1横坐标,控制点1纵坐标,控制点2横坐标,控制点2纵坐标,终点横坐标,终点纵坐标 );
oGC.bezierCurveTo( 100,100,200,200,200,100 );
oGC.stroke();
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
//.translate => 移动
oGC.translate( 100,100 );
//.rotate => 旋转
oGC.rotate( 45 * Math.PI/180 );
//.scale( 横坐标缩放倍数,纵坐标缩放倍数 ) => 缩放
oGC.scale( 2,2 );
oGC.fillRect( 0,0,100,100 );
//旋转,放大,缩小
setInterval(function(){
num ++;
/*由于每一次运行时,.scale()等函数式会在上一次的基础上叠加,即变成了1+2+3+...。
故需用.save()生成闭包,结束时需用.restore()释放*/
oGC.save();
//清画布
oGC.clearRect(0,0,oC.width,oC.height);
oGC.translate(200,200);
if( num2 == 100 ){
value = -1;
}else if( num2 == 0 ){
value = 1;
}
num2 += value;
oGC.scale( num2*1/50,num2*1/50 );
oGC.rotate( num * Math.PI/180 );
oGC.translate(-50,-50);
oGC.fillRect( 0,0,100,100 );
oGC.restore();
},30);
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
var yImg = new Image();
//图片预加载
yImg.onload = function(){
draw(this);
}
yImg.src = '2.png';
function draw(obj){
oGC.drawImage(obj,0,0);
//.drawImage(目标,目标横坐标,目标纵坐标);
}
//旋转图片
window.onload = function(){
var aInput = document.getElementsByTagName('input');
var oImg = document.getElementById('img1');
var yImg = new Image();
var iNow = 0;
yImg.onload = function(){
draw(oImg);
}
yImg.src = oImg.src;
function draw(obj){
var oC = document.createElement('canvas');
var oGC = oC.getContext('2d');
oC.width = obj.width;
oC.height = obj.height;
obj.parentNode.replaceChild(oC,obj);
// oldnode.parentNode.replaceChild(newnode,oldnode);
oGC.drawImage(obj,0,0);
aInput[1].onclick = function(){
if( iNow == 3 ){
iNow = 0;
}else{
iNow ++;
}
toChange();
}
aInput[0].onclick = function(){
if( iNow == 0 ){
iNow = 3;
}else{
iNow --;
}
toChange();
}
function toChange(){
switch(iNow){
case 1:
oC.width = obj.height;
oC.height = obj.width;
oGC.rotate( 90*Math.PI/180 );
oGC.drawImage(obj,0,-obj.height);
break;
case 2:
oC.width = obj.width;
oC.height = obj.height;
oGC.rotate(180*Math.PI/180);
oGC.drawImage(obj,-obj.width,-obj.height);
break;
case 3:
oC.width = obj.height;
oC.height = obj.width;
oGC.rotate(270*Math.PI/180);
oGC.drawImage(obj,-obj.width,0);
break;
case 0:
oC.width = obj.width;
oC.height = obj.height;
oGC.rotate(0);
oGC.drawImage(obj,0,0);
break;
}
}
}
}
</script>
<body>
<input type="button" value="←" />
<input type="button" value="→" />
<div>
<img src="2.png" id="img1" />
</div>
</body>
<script>
window.onload = function(){
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
var yImg = new Image();
yImg.onload = function(){
drag(this);
}
yImg.src = '2.png';
function drag(obj){
//设置背景,类似CSS中的background
var bg = oGC.createPattern(obj,'repeat');
oGC.fillStyle = bg;
oGC.fillRect( 0,0,300,300 );
}
}
</script>
//渐变
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
var obj = oGC.createLinearGradient(150,100,250,200);
// 0 => 起始点, 0.5 => 中间, 1 =>结束
obj.addColorStop(0,'red');
obj.addColorStop(0.5,'yellow');
obj.addColorStop(1,'blue');
oGC.fillStyle = obj;
oGC.fillRect(150,100,100,100);
//放射渐变
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
//.createRadialGradient(x1,y1,r1,x2,y2,r2)
var obj = oGC.createRadialGradient(200,200,75,200,200,150);
// 0 => 起始点, 0.5 => 中间, 1 =>结束
obj.addColorStop(0,'red');
obj.addColorStop(0.5,'yellow');
obj.addColorStop(1,'blue');
oGC.fillStyle = obj;
oGC.fillRect(0,0,oC.width,oC.height);
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
oGC.font = '60px impact';
oGC.textBaseline = 'top'; //顶部对齐
//fill => 填充
oGC.fillText('妙味课堂',0,0);
//stoke => 边框
oGC.strokeText('妙味课堂',0,200);
//文字居中
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
oGC.font = '60px impact'; ///文字大小和文字样式[文字默认不是在左上角居中的]
oGC.textBaseline = 'top'; //顶部对齐
//oGC.textBaseline = 'middle';
//测量文字宽度,只能测量width,不能测量height;
var w = oGC.measureText('妙味课堂').width;
oGC.fillText('妙味课堂',(oC.width-w)/2,(oC.height-60)/2);
//虚影
var oC = document.getElementById('c1');
var oGC = oC.getContext('2d');
oGC.font = '60px impact';
oGC.textBaseline = 'top'; //middle bottom
//阴影偏移距离
oGC.shadowOffsetX = 10;
oGC.shadowOffsetY = 10;
//.shadowBlur => 模糊度
oGC.shadowBlur = 3;
//alert(oGC.shadowColor); //默认颜色:黑色透明
oGC.shadowColor = 'yellow';
var w = oGC.measureText('妙味课堂').width;
oGC.fillText('妙味课堂',(oC.width - w)/2,(oC.height - 60)/2);