第十日

此刻我的思想真的枯竭了

利用Jxcex在Canvas中绘制动态时钟

在上次  Canvas中随机绘制圆形之后,看了cnblog中张磊大神的文章《旋转重力场粒子系统》受到启发,就用Jscex在Canvas中做了一个时钟,很多代码都是用的张磊的,而且有些啰嗦,很多可以写成函数,本人比较懒,暂且先这么着吧。

源码如下:

<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>Canvas Test</title>
		<script language="javascript" type="text/javascript" src="./src/uglifyjs-parser.js"></script>
		<script language="javascript" type="text/javascript" src="./src/jscex-jit.js"></script>
		<script language="javascript" type="text/javascript" src="./src/jscex-builderbase.js"></script>
		<script language="javascript" type="text/javascript" src="./src/jscex-async.js"></script>
		<script language="javascript" type="text/javascript" src="./src/jscex-async-powerpack.js"></script>
	</head>
	<body style="margin:0;padding:0">

		<canvas style="border:1px solid #c3c3c3;" id="myCanvas" width="800" height="600" onmousemove="get_location(event)" ></canvas>

		<script type="text/javascript">
		//Your browser does not support the canvas element.
		var c = document.querySelector('#myCanvas');
		var cxt = c.getContext('2d');

		function get_location(e){

			//cxt.clearRect(0,0,800,600);
			x = e.clientX;
			y = e.clientY;

			var colors = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'];
			var color = '#';
			var brush = Math.random()*30;
			for (var i = 0; i < 6; i++) {
				//取得0-15之间的随机整数
				index = Math.round(Math.random() * 15);
				color += colors[index];
			}
			cxt.fillStyle=color;
			cxt.beginPath();
			cxt.arc(x,y,brush,0,Math.PI*2,true);
			cxt.closePath();
			cxt.fill();
		}

		var canvas = document.getElementById("myCanvas");
		var cxt = canvas.getContext("2d");
		var line = {
		x: 400,
		y: 300,
		length: 200,
		angle: 0
		};
		var PER = Math.PI/30;

		var roundAsync = eval(Jscex.compile("async", function () {
		while (true) {
		cxt.fillStyle = "rgba(0, 0, 0, .3)";
		cxt.fillRect(0, 0, canvas.width, canvas.height);
		//绘制时钟上的点
		for(var j=0;j<=60;j++){
			var r = 2;
			if(j%5 == 0){r = 5;}
			var sec = PER*j;
			var xsec = line.x + line.length * Math.cos(sec);
			var ysec = line.y + line.length * Math.sin(sec);
			cxt.fillStyle = "#fff";
			cxt.beginPath();
			cxt.arc(xsec, ysec, r, 0, Math.PI * 2, true);
			cxt.closePath();
			cxt.fill();
		}
		try {
		//获取时间
		var date = new Date();
		var h = date.getHours();
		var m = date.getMinutes();
		var s = date.getSeconds();

		line.angle += (Math.PI * 2) / 300;
		var x = line.x + line.length * Math.cos(line.angle);
		var y = line.y + line.length * Math.sin(line.angle);

		var TWO_PI = Math.PI*2;
		var HALF_PI = Math.PI/2;
		//时针
		var xh = line.x + Math.cos(TWO_PI*(h%12)/12- HALF_PI)*150 ;
		var yh = line.y + Math.sin(TWO_PI*(h%12)/12- HALF_PI)*150 ;

		cxt.strokeStyle = "#fff";
		cxt.lineWidth = 6;
		cxt.beginPath();
		cxt.moveTo(line.x, line.y);
		cxt.lineTo(xh, yh);
		cxt.closePath();
		cxt.stroke();

		//分针
		var xm = line.x + Math.cos(TWO_PI*m/60- HALF_PI)*170 ;
		var ym = line.y + Math.sin(TWO_PI*m/60- HALF_PI)*170;

		cxt.strokeStyle = "#f00";
		cxt.lineWidth = 4;
		cxt.beginPath();
		cxt.moveTo(line.x, line.y);
		cxt.lineTo(xm, ym);
		cxt.closePath();
		cxt.stroke();
		//秒针
		var xs = line.x + Math.cos(TWO_PI*s/60- HALF_PI)*190 ;
		var ys = line.y + Math.sin(TWO_PI*s/60- HALF_PI)*190;

		cxt.strokeStyle = "#ff0";
		cxt.lineWidth = 2;
		cxt.beginPath();
		cxt.moveTo(line.x, line.y);
		cxt.lineTo(xs, ys);
		cxt.closePath();
		cxt.stroke();

		//画表的中心
		cxt.fillStyle = "#000";
		cxt.beginPath();
		cxt.arc(line.x, line.y, 6, 0, Math.PI * 2, true);
		cxt.closePath();
		cxt.fill();
		//这个还是上次文章那个,鼠标滑过显示随机圆型
		var colors = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'];
			var color = '#';
			var brush = Math.random()*10;
			for (var i = 0; i < 6; i++) {
				//取得0-15之间的随机整数
				index = Math.round(Math.random() * 15);
				color += colors[index];
			}
			cxt.fillStyle=color;
			cxt.beginPath();

			cxt.arc(x,y,brush,0,Math.PI*2,true);
			cxt.closePath();
			cxt.fill();
			cxt.save();

		$await(Jscex.Async.sleep(100));
		}
		catch (e) {
		alert(e)
		}
		}
		}))
		roundAsync().start();
	</script>
	</body>
</html>

原创文章,转载请注明: 转载自第十日

本文链接地址: 利用Jxcex在Canvas中绘制动态时钟

Tags: , , ,


发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>