##效果图
##原理
先打上html5中的canvas标签,它定义了一块画布,可以用javascript在上前面做动态效果。
调用浏览器内置对象window的setInterval(animate,delay)方法,可以实现每隔delay时间调用一次自定义的animate方法,从而达到动态的效果。
##代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| <body> <canvas id="mycanvas" width="500" height="500" style="background: #B0D141"></canvas> <script> var mycanvas = document.getElementById("mycanvas"); var context = mycanvas.getContext("2d"); function drawClock() { context.clearRect(0, 0, 500, 500); var date = new Date(); var hour = date.getHours(); var min = date.getMinutes(); var sec = date.getSeconds(); hour = (hour >= 12) ? hour - 12 : hour; hour = hour + min / 60; min = min + sec / 60; context.lineWidth=10; context.strokeStyle='#000'; context.beginPath(); context.arc(250, 250, 200, 0, 360, false); context.closePath(); context.stroke(); for (var i = 0; i < 12; i++) { context.save(); context.strokeStyle='black'; context.beginPath(); context.translate(250, 250); context.rotate(i * 30 * Math.PI / 180); context.beginPath(); context.moveTo(0, -190); context.lineTo(0, -170); context.closePath(); context.stroke(); context.restore(); } context.beginPath(); for (var i = 0; i < 60; i++) { context.save(); context.strokeStyle='black'; context.beginPath(); context.translate(250, 250); context.rotate(i * 6 * Math.PI / 180); context.moveTo(0, -190); context.lineTo(0, -180); context.closePath(); context.stroke(); context.restore(); } context.save(); context.lineWidth=12; context.beginPath(); context.translate(250, 250); context.rotate(hour * Math.PI * 30 / 180); context.moveTo(0, -135); context.lineTo(0, 10); context.closePath(); context.stroke(); context.restore(); context.save(); context.lineWidth=8; context.beginPath(); context.translate(250, 250); context.rotate(min * Math.PI * 6 / 180); context.moveTo(0, -160); context.lineTo(0, 10); context.closePath(); context.stroke(); context.restore(); context.save(); context.lineWidth=5; context.strokeStyle='red'; context.beginPath(); context.translate(250, 250); context.rotate(sec * Math.PI * 6 / 180); context.moveTo(0, -182); context.lineTo(0, 16); context.closePath(); context.stroke(); context.restore(); } setInterval(drawClock, 1000); </script> <body/>
|
##后记
没想到markdown还能支持javascript。这样以后可以通过类似的方法在blog中用js做动态效果了。