摘要:制作鐘表分成兩部分,一部分是表盤,一部分是時(shí)針分針秒針的走動(dòng),首先,先繪制表盤繪制表盤圓半徑設(shè)置坐標(biāo)軸原點(diǎn)圓心表盤外圓表盤刻度大格表盤刻度小格表盤時(shí)刻數(shù)字設(shè)置字體樣式字體上下居中,繪制時(shí)間利用三角函數(shù)計(jì)算字體坐標(biāo)表達(dá)式開始繪
制作鐘表分成兩部分,一部分是表盤,一部分是時(shí)針、分針、秒針的走動(dòng),首先,先繪制表盤:
// 繪制表盤 getDialClock = () => { const width = this.state.width; const height = this.state.height; const ctx = Taro.createCanvasContext("myCanvas", this.$scope); const R = width/2 - 30;//圓半徑 const r = R - 15; //設(shè)置坐標(biāo)軸原點(diǎn) ctx.translate(width/2, height/2); ctx.save(); // 圓心 ctx.beginPath(); ctx.arc(0, 0, 5, 0, 2 * Math.PI, true); ctx.fill(); ctx.closePath(); // 表盤外圓 ctx.setLineWidth(2); ctx.beginPath(); ctx.arc(0, 0, R, 0, 2 * Math.PI, true); ctx.closePath(); ctx.stroke(); // 表盤刻度(大格) ctx.beginPath(); ctx.setLineWidth(5); for(var i = 0; i < 12; i++) { ctx.beginPath(); ctx.rotate(Math.PI / 6); ctx.moveTo(R, 0); ctx.lineTo(r, 0); ctx.stroke(); } ctx.closePath(); // 表盤刻度(小格) ctx.beginPath(); ctx.setLineWidth(1); for(var i = 0; i < 60; i++) { ctx.beginPath(); ctx.rotate(Math.PI / 30); ctx.moveTo(R, 0); ctx.lineTo(R-10, 0); ctx.stroke(); } ctx.closePath(); // 表盤時(shí)刻(數(shù)字) ctx.beginPath(); ctx.setFontSize(16)//設(shè)置字體樣式 // ctx.setTextBaseline("middle");//字體上下居中,繪制時(shí)間 for(let i = 1; i < 13; i++) { //利用三角函數(shù)計(jì)算字體坐標(biāo)表達(dá)式 var x = (r-10) * Math.cos(i * Math.PI / 6 - Math.PI/2); var y = (r-10) * Math.sin(i * Math.PI / 6 - Math.PI/2); let sz = i + ""; ctx.fillText(sz, x - 5, y + 5, 15); } ctx.closePath(); // 開始繪制 ctx.draw(); }
表盤繪制完畢,再繪制時(shí)針,分針,秒針的運(yùn)動(dòng),這里需要新建一個(gè)組件來專門管理這個(gè)時(shí)間運(yùn)動(dòng),在組件中,如下:
// 繪制 針表 drawTime = () => { const width = this.props.dataRes.width; const height = this.props.dataRes.height; const ctx = Taro.createCanvasContext("timeId", this.$scope); const R = width/2 - 30;//圓半徑 //設(shè)置坐標(biāo)軸原點(diǎn) ctx.translate(width/2, height/2); ctx.save(); const t = new Date();//獲取當(dāng)前時(shí)間 let h = t.getHours();//獲取小時(shí) h = h>12?(h-12):h;//將24小時(shí)制轉(zhuǎn)化為12小時(shí)制 const m = t.getMinutes();//獲取分針 const s = t.getSeconds();//獲取秒 //繪制時(shí)針 ctx.beginPath(); ctx.setStrokeStyle("green") ctx.setLineWidth(10); ctx.rotate((Math.PI/6)*(h+m/60+s/3600)-Math.PI/2); ctx.moveTo(0,0); ctx.lineTo(R-90,0); ctx.stroke(); ctx.restore(); ctx.save(); // 繪制分針 ctx.beginPath(); ctx.setStrokeStyle("gold") ctx.setLineWidth(5); ctx.rotate((Math.PI/30)*(m+s/3600)-Math.PI/2); ctx.moveTo(0,0); ctx.lineTo(R-60,0); ctx.stroke(); ctx.restore(); ctx.save(); // 繪制秒針 ctx.beginPath(); ctx.setStrokeStyle("red") ctx.setLineWidth(1); ctx.rotate((Math.PI/30)*s-Math.PI/2); ctx.moveTo(0,0); ctx.lineTo(R-20,0); ctx.stroke(); ctx.restore(); ctx.save(); ctx.draw(); }
結(jié)果顯示:
源碼地址:
https://gitee.com/hope93/canv...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/100162.html
摘要:多端統(tǒng)一開發(fā)框架優(yōu)秀學(xué)習(xí)資源匯總官方資源項(xiàng)目倉庫官方文檔項(xiàng)目倉庫官方文檔微信小程序官方文檔百度智能小程序官方文檔支付寶小程序官方文檔字節(jié)跳動(dòng)小程序官方文檔文章教程不敢閱讀包源碼帶你揭秘背后的哲學(xué)從到構(gòu)建適配不同端微信小程序等的應(yīng)用小程序最 Awesome Taro 多端統(tǒng)一開發(fā)框架 Taro 優(yōu)秀學(xué)習(xí)資源匯總 showImg(https://segmentfault.com/img/r...
摘要:入口文件繼承自組件基類,它同樣擁有組件生命周期,但因?yàn)槿肟谖募奶厥庑裕纳芷诓⒉煌暾?,如。支持組件化開發(fā),組件代碼可以放在任意位置,不過建議放在下的目錄中。 生命周期 componentWillMount 在微信小程序中這一生命周期方法對應(yīng)頁面的onLoad或入口文件app中的onLaunch componentDidMount 在微信小程序中這一生命周期方法對應(yīng)頁面的onRe...
摘要:調(diào)用通過注冊表調(diào)用到實(shí)例,透過的,調(diào)用到中的,最后通過,調(diào)用,根據(jù)參數(shù)相應(yīng)模塊執(zhí)行。京東的,多端解決方案是一套遵循語法規(guī)范的多端開發(fā)解決方案。 showImg(https://segmentfault.com/img/bVbuMkw?w=1304&h=808); 對于一項(xiàng)技術(shù),我們不能停留在五分鐘狀態(tài),特別喜歡一句話,用什么方式繪制UI界面一點(diǎn)不重要,重要的是底層的思維,解決問題和優(yōu)化...
摘要:調(diào)用通過注冊表調(diào)用到實(shí)例,透過的,調(diào)用到中的,最后通過,調(diào)用,根據(jù)參數(shù)相應(yīng)模塊執(zhí)行。京東的,多端解決方案是一套遵循語法規(guī)范的多端開發(fā)解決方案。 showImg(https://segmentfault.com/img/bVbuMkw?w=1304&h=808); 對于一項(xiàng)技術(shù),我們不能停留在五分鐘狀態(tài),特別喜歡一句話,用什么方式繪制UI界面一點(diǎn)不重要,重要的是底層的思維,解決問題和優(yōu)化...
摘要:調(diào)用通過注冊表調(diào)用到實(shí)例,透過的,調(diào)用到中的,最后通過,調(diào)用,根據(jù)參數(shù)相應(yīng)模塊執(zhí)行。京東的,多端解決方案是一套遵循語法規(guī)范的多端開發(fā)解決方案。 showImg(https://segmentfault.com/img/bVbuMkw?w=1304&h=808); 對于一項(xiàng)技術(shù),我們不能停留在五分鐘狀態(tài),特別喜歡一句話,用什么方式繪制UI界面一點(diǎn)不重要,重要的是底層的思維,解決問題和優(yōu)化...
閱讀 2880·2021-10-08 10:04
閱讀 3358·2021-09-10 11:20
閱讀 579·2019-08-30 10:54
閱讀 3408·2019-08-29 17:25
閱讀 2364·2019-08-29 16:24
閱讀 956·2019-08-29 12:26
閱讀 1526·2019-08-23 18:35
閱讀 2052·2019-08-23 17:53