html_canvas(上)

参考内容:妙味课堂

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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值