专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > HTML5

html5实现的旋转立方体时钟(基于three.js)

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
html5实现的旋转立方时钟(基于three.js)

效果:


 

代码:

1.CubeClock.html

<!doctype html>
<html>
	<head>
		<meta charset="utf-8"/>
		<title>CubeClock</title>
		<style>
			body,*{margin:0;padding:0;border:0;}
			div{width:100%;height:100%;background:#FFFFFF;}
		</style>
		<script src="clock.js"></script>
		<script src="three.min.js"></script>
		<script>
		window.onload = function(){
			var canvas = document.createElement("canvas");
			canvas.width = 200;
			canvas.height = 200;
			//document.body.appendChild(canvas);
			drawClock(canvas);
			window.setInterval(function(){drawClock(canvas);},1000);
			
			var div = document.getElementsByTagName("div")[0];
			var width = window.innerWidth*98/100;
			var height = window.innerHeight*98/100;
			
			var scene = new THREE.Scene();
			/*
			var geometry = new THREE.BoxGeometry(200,200,200);
			var material = new THREE.MeshLambertMaterial({color:0xcc0000});
			var cube=new THREE.Mesh(geometry,material);
			scene.add(cube);
			*/
			var geometry = new THREE.BoxGeometry(200, 200, 200);
			var texture = new THREE.Texture(canvas);
			var material = new THREE.MeshBasicMaterial({map: texture});
			var mesh = new THREE.Mesh(geometry, material);
			scene.add(mesh);
			
			/*
			var pointLight = new THREE.PointLight(0xFFFFFF);
			pointLight.position.set(1000, 5000, 13000);
			scene.add(pointLight);
			*/
			
			var camera = new THREE.PerspectiveCamera(75, width/height, 1, 1000);
			camera.position.set(0,0,500);
			//camera.up.y = 1;
			//camera.lookAt({x:0,y:0,z:0});
			
			var renderer = new THREE.WebGLRenderer({antialias:true});
			renderer.setSize(width, height);
			renderer.setClearColor(0xEEEEEE);
			div.appendChild(renderer.domElement);
			
			function render(){
				texture.needsUpdate = true;	//更新纹理(让秒针动起来)
				//cube.rotation.x += 0.01;
				//cube.rotation.y += 0.02;
				mesh.rotation.x += 0.01;	//绕X轴旋转,速率为0.01
				mesh.rotation.y += 0.02;	//绕Y轴旋转,速率为0.02
				renderer.render(scene, camera);
				requestAnimationFrame(render);
			}
			render();
		}
		</script>
	</head>
	<body>
		<div></div>
	</body>
</html>

 2.clock.js

function drawDial(canvas){
	var cxt = canvas.getContext("2d");
	cxt.save();
	cxt.lineWidth = 10;
	cxt.strokeStyle = "#FDAB17";
	cxt.strokeRect(-95,-95,190,190);
	cxt.fillStyle = "#FFFFFF";
	cxt.fillRect(-90,-90,180,180);
	cxt.restore();
	for(var i=0;i<12;i++){
		if(i%3==0){
			cxt.save();
			cxt.rotate(Math.PI/6*i);
			cxt.beginPath();
			cxt.moveTo(0,-77);
			cxt.lineTo(0,-90);
			cxt.closePath();
			cxt.lineWidth = 5;
			cxt.strokeStyle = "#000";
			cxt.stroke();
			cxt.restore();
		}else{
			cxt.save();
			cxt.rotate(Math.PI/6*i);
			cxt.beginPath();
			cxt.moveTo(0,-87);
			cxt.lineTo(0,-100);
			cxt.closePath();
			cxt.lineWidth = 5;
			cxt.strokeStyle = "#000";
			cxt.stroke();
			cxt.restore();
		}
	}
}

function drawPointer(canvas,hour,minute,second){
	var cxt = canvas.getContext("2d");
	/*时针*/
	cxt.save();
	cxt.rotate(hour*(Math.PI*2/12)+(minute/60)*(Math.PI*2/12));
	cxt.beginPath();
	cxt.moveTo(0,20);
	cxt.lineTo(0,-45);
	cxt.closePath();
	cxt.lineWidth = 6;
	cxt.strokeStyle = "#000";
	cxt.stroke();
	cxt.restore();
	/*分针*/
	cxt.save();
	cxt.rotate(minute*Math.PI*2/60);
	cxt.beginPath();
	cxt.moveTo(0,25);
	cxt.lineTo(0,-60);
	cxt.closePath();
	cxt.lineWidth = 5;
	cxt.strokeStyle = "#000";
	cxt.stroke();
	cxt.restore();
	/*秒针*/
	cxt.save();
	cxt.rotate(second*Math.PI*2/60);
	cxt.beginPath();
	cxt.moveTo(0,30);
	cxt.lineTo(0,-70);
	cxt.closePath();
	cxt.lineWidth = 4;
	cxt.strokeStyle = "red";
	cxt.stroke();
	cxt.restore();

	cxt.save();
	cxt.beginPath();
	cxt.arc(0,0,6,0,Math.PI*2);
	cxt.closePath();
	cxt.fillStyle = "red";
	cxt.fill();

	cxt.beginPath();
	cxt.arc(0,0,7,0,Math.PI*2);
	cxt.closePath();
	cxt.lineWidth = 3;
	cxt.strokeStyle = "#FDAB17";
	cxt.stroke();
	cxt.restore();
}

var translated = false;
function drawClock(canvas){
	cxt = canvas.getContext("2d");
	if(!translated){//如果(0,0)点没有校正,则移动(0,0)点
		cxt.translate(100,100);
		translated = true;
	}
	var now = new Date();
	var hour = now.getHours();
	hour = hour>12?hour-12:hour;	//小时转换为12进制
	var minute = now.getMinutes();
	var second = now.getSeconds();
	//console.log(hour);
	//console.log(minute);
	//console.log(second);
	cxt.clearRect(-100,-100,200,200);
	drawDial(canvas);
	drawPointer(canvas,hour,minute,second);
}

 

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • 使用HBuilder编辑器将html五页面打包成APP

    使用HBuilder编辑器将html5页面打包成APP   使用HBuilder编辑器将html5页面打包成APP (ios+安卓) 1.首先先安装HBuilder编...

  • 基于phonegap,html5,ratchet,handlebars等技术的微神情APP

    基于phonegap,html5,ratchet,handlebars等技术的微表情APP 该app是由很多有意思的微表情构成的,支持40种表情,并且每种表情都有不同的...

  • HTML5 Web 客户端五种离线储存方式汇总

    HTML5 Web 客户端五种离线存储方式汇总 最近折腾HTML5游戏需要离线存储功能,便把目前可用的几种HTML5存储方式研究了下,基于H...

  • SPICE-HTML5 鼠标指针BUG修补

    SPICE-HTML5 鼠标指针BUG修复 研究SPICE,找到了他们官方指定的HTML5客户端。 下载下来用一下,发现跟网页VNC的水平差不多了。 http:...

  • HTML5+JS 《五子飞》游戏实现(5)移动棋子

    HTML5+JS 《五子飞》游戏实现(五)移动棋子 上一章 我们知道了怎么处理两个重要的吃棋动作,想要吃对方的棋子,首先得移动自己的棋子。...

  • HTML5中怎么上传Resize后的图片

    HTML5中如何上传Resize后的图片 参考资料: 不依赖form标签,而是自己定义FormData上传数据,文件被编码为一个Blob或File对象: https...

  • (1)HTML5

    (一)HTML5 可以解决什么问题: 可以实现网页的ajax加载,同时又能完成URL的改变而没有网页跳转刷新的迹象,就像是改变了网页的hash(#)一样。...

  • 一款纯html5实现的钟表

    一款纯html5实现的时钟 今天给大家分享一款非常漂亮的纯html5实现的时钟。整个界面都由html5绘制而成。一起看下效果图: 在线预览...

  • 使用 WebSockets 开展 HTML5 视频直播

    使用 WebSockets 进行 HTML5 视频直播 实验环境:Ubuntu。 参考以下两个链接进行实践: http://segmentfault.com/blog/xingrz/119...

  • 查询浏览器是不是支持html5

    查询浏览器是否支持html5 js判断 插入js代码====================================================== <script> wind...

热门推荐: