效果:
代码:
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); }
相关推荐
基于Three.js的一款运行于浏览器(chrome、Firefox、360)三维图编辑器。本人呕心开发,具备如下功能,且功能仍在进一步完善中。 1、添加立方体、园柱体、球体、半球体、圆锥体等。 2、实现几何体边框的虚实线。 3、...
1、three.js绘制3维坐标系; 2、绘制多个立方体; 3、立方体设置边框; 4、立方体表面绘制线条;
three.js示例 使用three.js 实现的旋转立方体 代码注释完善
使用three.js实现的VR虚拟看房项目源码资料.zip使用three.js实现VR虚拟看房 项目 实现逻辑 了解VR看房多个全景图的切换 首先实现六个面组成的立方体并附加材料 添加箭头精灵照片,绑定事件,跳转房间 房间的切换,并...
HTML5+WebGL+Three.js实现霓虹立方体切分变换动画效果源码.zip
html5+three.js酷炫立方体碎片鼠标跟随动画特效,立方体碎片跟随鼠标指针而移动,右上角可以自定义设置动画运动参数。
HTML5+WebGL+Three.js实现可拖拽的模糊发光立方体动画特效源码.zip
HTML5+Three.js+WebGL实现的立方体矩阵起伏动画特效源码.zip
HTML5+GSAP+CSS3实现的3D图片贴图可旋转立方体特效源码.zip
HTML5+Three.js实现神秘肥皂泡里可响应的立方体上下浮动效果源码.zip
HTML5-3D立方体旋转动画.rar.rar
HTML5+Three.js实现使用WSAD按键来控制立方体的翻转动画效果源码.zip
纯CSS3实现3D立方体旋转动画.zip
Three.js实现的立方体细分调节器几何图形场景效果源码.zip
HTML5+Three.js使用立方体组成的水面波动动画效果源码.zip
实现逻辑 了解VR看房多个全景图的切换 首先实现六个面组成的立方体并附加材料 添加箭头精灵照片,绑定事件,跳转房间 房间的切换,并隐藏箭头
HTML5 canvas+three.js绘制的带气泡上浮效果立方体3D柱状体动画源码.zip
一款绚丽的HTML5 3D立方体旋转动画.zip 一款绚丽的HTML5 3D立方体旋转动画.zip 一款绚丽的HTML5 3D立方体旋转动画.zip
源码使用DIV+SPAN+IMG图片标签实现页面基本布局...且使用原生js代码实现鼠标拖拽旋转效果,具体实现思路是监听鼠标的拖拽,然后改变立方体盒子容器的旋转值即可做到旋转功能。源码中有详细的注释说明适合初学者学习参考