摘要:用畫動態時鐘代碼代碼保存當前畫布樣式切換中心點畫外圓畫數字畫時刻畫時針,分針,秒針將分,秒換算成小時返回上一個畫布樣式將秒換算成分畫圓心將所有事件封裝在一個函數中,為制作成動態時鐘做準備清空整個畫布初始化
用canvas畫動態時鐘
HTML代碼
: :
css:
*{margin: 0;padding: 0;} div{ text-align: center; } div.box{ margin: 50px auto; text-align: center; font-size: 30px; display: flex; align-content: center; justify-content: center; } span{ display: inline-block; width: 50px; height: 50px; line-height: 50px; border:2px solid #ccc; font-size: 20px; margin: 0px 20px; }
js代碼
var hourspan =document.getElementById("hour"); var minutespan =document.getElementById("minute"); var secondspan =document.getElementById("second"); var dom = document.getElementById("clock"); var ctx = dom.getContext("2d"); var width = ctx.canvas.width; var height = ctx.canvas.height; var r = width/2; function drawBackground(){ ctx.save(); //保存當前畫布樣式 ctx.translate(r,r);//切換中心點 //畫外圓 ctx.beginPath(); ctx.lineWidth=10; ctx.arc(0,0,r-5,0,2*Math.PI,false); ctx.stroke(); //畫數字 var hourNumber = [3,4,5,6,7,8,9,10,11,12,1,2]; ctx.textAlign = "center"; ctx.textBaseline = "middle"; hourNumber.forEach(function(item,index){ var rad = 2*Math.PI/12*index; var x = Math.cos(rad)*(r-30); var y = Math.sin(rad)*(r-30); ctx.fillText(item,x,y); }) //畫時刻 for(var i=0;i<60;i++){ var rad = 2*Math.PI/60*i; var x = Math.cos(rad)*(r-15); var y = Math.sin(rad)*(r-15); ctx.beginPath(); ctx.arc(x,y,2,0,Math.PI*2,false); if(i%5 == 0){ ctx.fillStyle = "#000"; ctx.fill(); }else{ ctx.fillStyle = "#ccc"; ctx.fill(); } } } //畫時針,分針,秒針 function drawHour(hour,minute,second){ ctx.save(); ctx.beginPath(); var rad = 2*Math.PI/12*hour+((2*Math.PI/12)*(minute+second/60)/60);//將分,秒換算成小時 ctx.rotate(rad); ctx.strokeStyle = "#000"; ctx.lineWidth = 4; ctx.lineCap = "round"; ctx.moveTo(0,10); ctx.lineTo(0,-r/2); ctx.stroke(); ctx.restore();//返回上一個畫布樣式 } function drawMinute(minute,second){ ctx.save(); ctx.beginPath(); var rad = 2*Math.PI/60*minute+(2*Math.PI/60)*(second/60);//將秒換算成分 ctx.rotate(rad); ctx.strokeStyle = "#000"; ctx.lineWidth = 6; ctx.lineCap = "round"; ctx.moveTo(0,15); ctx.lineTo(0,-(r-25)); ctx.stroke(); ctx.restore(); } function drawSecond(second){ ctx.save(); ctx.beginPath(); ctx.strokeStyle = "red"; var rad = 2*Math.PI/60*second; ctx.rotate(rad); ctx.lineWidth = 3; ctx.lineCap = "round"; ctx.moveTo(0,20); ctx.lineTo(0,-(r-15)); ctx.stroke(); ctx.restore(); } //畫圓心 function drawCicle(){ ctx.save(); ctx.beginPath(); ctx.fillStyle ="#fff"; ctx.arc(0,0,2,0,Math.PI*2,false); ctx.fill(); ctx.restore(); } //將所有事件封裝在一個函數中,為制作成動態時鐘做準備 function timeActive(){ ctx.clearRect(0,0,width,height);//清空整個畫布 var date = new Date(); var hour = date.getHours(); var minute = date.getMinutes(); var second = date.getSeconds(); hourspan.innerText = hour; minutespan.innerText = minute; secondspan.innerText = second; drawBackground(); drawHour(hour,minute,second); drawMinute(minute,second); drawSecond(second); drawCicle(); ctx.restore(); } timeActive();//初始化畫布 setInterval("timeActive()",1000);
小生初出茅廬,希望各位海涵,看見網上的教學視頻后,感覺挺有意思的,手敲了一遍。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83582.html
摘要:用畫動態時鐘代碼代碼保存當前畫布樣式切換中心點畫外圓畫數字畫時刻畫時針,分針,秒針將分,秒換算成小時返回上一個畫布樣式將秒換算成分畫圓心將所有事件封裝在一個函數中,為制作成動態時鐘做準備清空整個畫布初始化 用canvas畫動態時鐘 showImg(https://segmentfault.com/img/bVPBM0?w=528&h=423); HTML代碼 : ...
摘要:用畫動態時鐘代碼代碼保存當前畫布樣式切換中心點畫外圓畫數字畫時刻畫時針,分針,秒針將分,秒換算成小時返回上一個畫布樣式將秒換算成分畫圓心將所有事件封裝在一個函數中,為制作成動態時鐘做準備清空整個畫布初始化 用canvas畫動態時鐘 showImg(https://segmentfault.com/img/bVPBM0?w=528&h=423); HTML代碼 : ...
摘要:最近做的兩個項目都是關于的,做完整理一下,方便下一次使用,在里寫的小,功能畫扇形動態畫圓弧結合做的動畫畫表盤創建一個對象方法開始畫筆設置填充顏色是順時針是逆時針默認是逆時針結束畫筆開始填充沒有直接創建一個對象方法開始畫筆設置填充顏色是順時針 最近做的兩個項目都是關于canvas的,做完整理一下,方便下一次使用,在vue里寫的小demo,功能:畫扇形 動態畫圓弧(requestAnima...
摘要:最近做的兩個項目都是關于的,做完整理一下,方便下一次使用,在里寫的小,功能畫扇形動態畫圓弧結合做的動畫畫表盤創建一個對象方法開始畫筆設置填充顏色是順時針是逆時針默認是逆時針結束畫筆開始填充沒有直接創建一個對象方法開始畫筆設置填充顏色是順時針 最近做的兩個項目都是關于canvas的,做完整理一下,方便下一次使用,在vue里寫的小demo,功能:畫扇形 動態畫圓弧(requestAnima...
我們先看看粒子時鐘的效果,如下:showImg(https://segmentfault.com/img/remote/1460000016290266);下面我們將通過canvas和js實現,首先要創建一個html文件并添加一個canvas畫布,如下: Document .container{ margin: 0, aut...
閱讀 1321·2021-09-22 15:09
閱讀 2656·2021-08-20 09:38
閱讀 2402·2021-08-03 14:03
閱讀 863·2019-08-30 15:55
閱讀 3368·2019-08-30 12:59
閱讀 3551·2019-08-26 13:48
閱讀 1886·2019-08-26 11:40
閱讀 647·2019-08-26 10:30