canvas日曆繪製 簡單demo

canvas繪製本月日曆,效果如下



<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<style type="text/css">
		html,body{
			margin :0 0;
			padding:  0 0;
			width: 100%;
			height: 100%;
		}
	</style>
	<body>
		<canvas id="cav" width="600" height="600"></canvas>
	</body>
	<script type="text/javascript">
		var canvas = document.getElementById("cav");
		var ctx = canvas.getContext("2d");
		
		var date = new Date();
		var year = date.getYear();
		var mouth = date.getMonth();
		var today = date.getDate();
		var week = date.getDay();
		
		var mouth = 5;
		var today = 23;
		var week = 6;
		
		var cardSize = 50 ;
		
		var array_three = [4,6,9,11];
		var array_threeone = [1,3,5,7,8,10,12];
		var array_week = ["日","一","二","三","四","五","六"]
		
		var firstDraw ;//1號繪製位置
		var wIdx = today % 7 ;
		
		if(week >= wIdx){
			firstDraw = week - wIdx + 1;
		}else{
			firstDraw = week - wIdx + 8;
		}

		var dayIndex = 1;
		var countDay = 30 ;

		if(array_three.indexOf(mouth) > -1){
			countDay = 30;
		}else if(array_threeone.indexOf(mouth) > -1){
			countDay = 31 ;
		}else{
			countDay = 28 ;//未考慮瑞年情況
		}
		
		var row = 6;
		if(7 - firstDraw + 7 * 4 < countDay){//確定表格行數,防止日期繪製不全
			row = 7;
		}
		
		/*繪製背景表格*/
		function drawbg(){
			for (var i = 0; i < row; i++) {
				for (var j = 0; j < 7; j++) {
					ctx.strokeRect(j * cardSize , i * cardSize, cardSize , cardSize);
				}
			}
		}
		
		drawbg();
		
		for (var i = 0; i < row; i++) {//開始繪製日期數
			for (var j = 0; j < 7; j++) {
				if( i == 0){//表格第一行繪製星期
					drawDate(array_week[j],i,j);
					continue;
				}
					
				if(i == 1 && j < firstDraw){//確定1號繪製位置
					continue;
				}
				
				if(dayIndex > countDay){//只繪製月份的天數
					break;
				}
				
				drawDate(dayIndex ++ ,i,j);
			}
		}
		
		/*繪製確定日期*/
		function drawDate(txt,i,j){
			if(txt == today){
				drawTodaybg(j,i);
			}
			
			ctx.textAlign = "center";
			ctx.font = (cardSize / 2) + 'px Arial';
			ctx.fillText(txt, j * cardSize + cardSize / 2 , i * cardSize + cardSize / 3 * 2 );
		}
		
		/*繪製標誌今天的背景圖*/
		function drawTodaybg(i,j){
			ctx.save();
					
			ctx.beginPath();
			ctx.strokeStyle = "red";
			ctx.arc(i * cardSize + cardSize / 2,j * cardSize + cardSize / 2, cardSize / 2 - 10 ,- Math.PI  ,Math.PI  * 0.5);
			ctx.stroke();
			ctx.closePath();
			
			ctx.beginPath();
			ctx.arc(i * cardSize + cardSize / 2,j * cardSize + cardSize / 2, cardSize / 2 - 9 ,- Math.PI  ,Math.PI  * 0.4);
			ctx.stroke();
			ctx.closePath();
			
			ctx.beginPath();
			ctx.arc(i * cardSize + cardSize / 2,j * cardSize + cardSize / 2, cardSize / 2 - 8 ,- Math.PI  ,Math.PI  * 0.3);
			ctx.stroke();
			ctx.closePath();
			
			ctx.beginPath();
			ctx.arc(i * cardSize + cardSize / 2,j * cardSize + cardSize / 2, cardSize / 2 - 7 ,- Math.PI  ,Math.PI  * 0.2);
			ctx.stroke();
			ctx.closePath();
			
			ctx.beginPath();
			ctx.arc(i * cardSize + cardSize / 2,j * cardSize + cardSize / 2, cardSize / 2 - 6 ,- Math.PI ,Math.PI  * 0.1);
			ctx.stroke();
			ctx.closePath();
			
			ctx.restore();
		}
		
	</script>
</html>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章