改动要点: 1.使用CSS分别设置http://www.oschina.net/code/snippet_2564655_56853(大漠浪踪)的三个画布,其中,画钟表的画布clockCanvas定义为隐式。 2.每一秒钟,将隐式画布的内容,画到增添的显
1. 使用 CSS分别设置 http://www.oschina.net/code/snippet_2564655_56853 (大漠浪踪)的三个画布,其中,画钟表的画布clockCanvas 定义为隐式。
2. 每一秒钟,将隐式画布的内容,画到增添的显示画布 clock上。
3. “机器猫”作为表盘,放到最底层
4. 调用方法drawImage(...) 时,可以调整图画(即钟表)的位置和大小,以便配上“机器猫”这个表盘
改动效果见:
http://sandbox.runjs.cn/show/kcjgivxs
http://runjs.cn/detail/kcjgivxs
1. [图片] machineCat_Clock.png
2. [文件] index2.html ~ 11KB 下载(2)
<! http://www.oschina.net/code/snippet_2564655_56853> <html> <head> <meta charset="UTF-8"> <title>iwjvi</title> <script> var x = 100;//矩形开始坐标 var y = 100;//矩形结束坐标 var mx = 0;//0右1左 var my = 0; //0下1上 function draw20() { var ml = 1;//每次移动长度 var w = 20;//矩形宽度 var h = 20;//矩形高度 var cw = 400;//canvas宽度 var ch = 300; //canvas高度 var context=document.getElementById("canvs").getContext("2d"); context.clearRect(0, 0, 400, 300); context.fillStyle = "#EEEEFF"; context.fillRect(0, 0, 400, 300); context.fillStyle = "red"; context.fillRect(x, y, w, h); if (mx == 0) { x = x + ml; if (x >= cw-w) { mx = 1; } } else { x = x - ml; if (x <= 0) { mx = 0; } } if (my == 0) { y = y + ml; if (y >= ch-h) { my = 1; } } else { y = y - ml; if (y <= 0) { my = 0; } } } function drawmachinecat(){ var face=document.getElementById("mycanvas").getContext("2d"); face.arc(252,252,250,0,2*Math.PI); face.fillStyle="#07beea"; face.fill(); face.lineWidth=2; face.strokeStyle="#333"; face.stroke(); face.beginPath(); face.moveTo(160,450); face.bezierCurveTo(0,400,0,110,210,115); face.lineTo(290,115); face.bezierCurveTo(500,110,500,400,340,450); face.bezierCurveTo(280,470,220,470,160,450); face.fillStyle="#fff"; face.fill(); face.stroke(); face.beginPath(); face.moveTo(150,150); face.lineTo(150,100); face.bezierCurveTo(158,50,240,50,250,100) face.lineTo(250,150); face.bezierCurveTo(250,210,150,210,150,150); face.moveTo(250,150); face.lineTo(250,100); face.bezierCurveTo(258,50,340,50,350,100) face.lineTo(350,150); face.bezierCurveTo(350,210,240,210,250,150) face.fillStyle="#fff"; face.fill(); face.stroke() face.beginPath(); face.arc(225,155,10,0,2*Math.PI); face.arc(275,155,10,0,2*Math.PI); face.fillStyle="#333"; face.fill(); face.beginPath(); face.arc(249,205,25,0,2*Math.PI); face.fillStyle="#c93e00"; face.fill(); face.stroke() face.beginPath(); face.arc(260,195,10,0,2*Math.PI); var gra=face.createRadialGradient(260,190,3,260,190,15) gra.addColorStop(0,"#fff"); gra.addColorStop(1,"#c93e00") face.fillStyle=gra; face.fill() face.beginPath() face.moveTo(250,230); face.lineTo(250,393) face.moveTo(100,320) face.bezierCurveTo(180,420,320,420,400,320); face.lineWidth=3; face.stroke(); face.beginPath(); face.moveTo(80,200); face.lineTo(180,220); face.moveTo(80,245); face.lineTo(180,245); face.moveTo(80,290); face.lineTo(180,270) face.moveTo(320,220); face.lineTo(420,200) face.moveTo(320,245); face.lineTo(420,245) face.moveTo(320,270); face.lineTo(420,290) face.stroke() } function drawClock() { var img=document.getElementById("clockCanvas");//隐式画布的引用 img var clock=img.getContext("2d"); //取得隐式画布的画笔 clock //每次清空画布 clock.clearRect(0,0,500,500); //获取系统当前时间(时 、分 、秒) var now = new Date(); //实例化一个当前时间的对象,通过该对象获取系统当前时间 var sec = now.getSeconds(); //秒 var mins = now.getMinutes(); //分 var hours = now.getHours(); //时 //绘制文字,显示系统当前时间: clock.save(); clock.translate(0,250); clock.fillStyle = "#0000"; clock.strokeStyle = "#eee"; clock.font = "bold 25px 微软雅黑"; clock.strokeText("系统当前时间为:"+hours+"时"+mins+"分"+sec+"秒",70,240); clock.fillText("系统当前时间为:"+hours+"时"+mins+"分"+sec+"秒", 70,240); clock.restore(); //计算:满60分加一小时 hours = hours + mins/60; //计算:将24小时制转化为12小时制 hours = hours>12?hours-12:hours; //坏表盘 clock.beginPath(); clock.lineWidth=5; clock.strokeStyle="coral"; clock.arc(250,250,200,0,2*Math.PI); clock.stroke(); clock.closePath(); //时间刻度 for(var i = 0; i < 12; i++) { clock.save(); clock.translate(250,250); clock.lineWidth=5; clock.strokeStyle="#6666"; clock.rotate(i*30*Math.PI/180); clock.beginPath(); clock.moveTo(0, -200); clock.lineTo(0, -180); clock.stroke(); clock.restore(); } //分刻度 for(var j = 0; j<60; j++) { clock.save(); clock.translate(250,250); clock.lineWidth=3; clock.strokeStyle="#6666"; clock.rotate(j*6*Math.PI/180); clock.beginPath() clock.moveTo(0, -200); clock.lineTo(0, -190); clock.closePath(); clock.stroke(); clock.restore(); } clock.save(); clock.translate(250,250); clock.lineWidth = 7; clock.lineCap='round'; clock.strokeStyle = "#000000"; clock.rotate(hours*30*Math.PI/180); clock.beginPath(); clock.moveTo(0,15); clock.lineTo(0,-120); clock.stroke(); clock.closePath(); clock.restore(); clock.save(); clock.translate(250,250); clock.lineCap='round'; clock.lineWidth=7; clock.strokeStyle="darkcyan"; clock.rotate(mins*6*Math.PI/180); clock.beginPath(); clock.moveTo(0,25); clock.lineTo(0,-160); clock.stroke(); clock.closePath(); clock.restore(); clock.save(); clock.translate(250,250); clock.lineWidth=3; clock.lineCap='round'; clock.strokeStyle="crimson"; clock.rotate(sec*6*Math.PI/180); clock.beginPath(); clock.moveTo(0,40); clock.lineTo(0,-180); clock.stroke(); clock.closePath(); clock.lineWidth =2; clock.fillStyle = "#fff"; clock.strokeStyle = "crimson"; clock.beginPath(); clock.arc(0,0,6,0,360,false); clock.fill(); clock.stroke(); clock.closePath(); clock.beginPath(); clock.arc(0,-140,6,0,360,false); clock.fillStyle="#fff" clock.strokeStyle = "crimson"; clock.fill(); clock.stroke(); clock.closePath(); clock.restore(); // 取得显式画布个画笔 g var g =document.getElementById("clock").getContext("2d"); g.clearRect(0,0,500,500);//清空显示画布 /* 用显式画布的画笔 g 将隐式画布的内容画到显示画布 “clock” 上 * 隐式画布的引用,在方法开始时,已经定义为 img * 注意:调用方法drawImage(...)时,可以调整图画(即钟表)的位置和大小 * 以便配上“机器猫”这个表盘 */ g.drawImage(img,-58,-58,620,620); } function preparation(){ drawmachinecat(); setInterval(drawClock, 1000); setInterval(draw20 ,20); } </script> <style> #canvs{ position:absolute; left:510px; top:0px; } #author{ position:absolute; left:510px; top:300px; width:510px; height:300px; text-align:start; font-family:"楷体"; font-size:60px; font-weight:bold; color:#F63; } #clockCanvas{ display:none; } #clock{ position:absolute; left:0px; top:0px; z-index:2; } #mycanvas{ position:absolute; left:0px; top:0px; z-index:1; } </style> </head> <body onLoad="preparation()"> <canvas id="mycanvas" width="510" height="510"></canvas> <canvas width="500" height="500" id="clockCanvas"></canvas> <canvas width="520" height="600" id="clock"></canvas> <canvas width="520" height="600" id="canvs"></canvas> <div id="author">根据<br> <a href="http://www.oschina.net/code/snippet_2564655_56853" target="new">大漠浪踪</a></div> </body> </html>