成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

微信小程序Taro開發(fā)(3):canvas制作鐘表

cuieney / 1816人閱讀

摘要:制作鐘表分成兩部分,一部分是表盤,一部分是時針分針秒針的走動,首先,先繪制表盤繪制表盤圓半徑設(shè)置坐標(biāo)軸原點圓心表盤外圓表盤刻度大格表盤刻度小格表盤時刻數(shù)字設(shè)置字體樣式字體上下居中,繪制時間利用三角函數(shù)計算字體坐標(biāo)表達(dá)式開始繪

制作鐘表分成兩部分,一部分是表盤,一部分是時針、分針、秒針的走動,首先,先繪制表盤:

// 繪制表盤
  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)軸原點
    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ù)字)
    ctx.beginPath();
    ctx.setFontSize(16)//設(shè)置字體樣式
    // ctx.setTextBaseline("middle");//字體上下居中,繪制時間
    for(let i = 1; i < 13; i++) {
      //利用三角函數(shù)計算字體坐標(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();
  }

表盤繪制完畢,再繪制時針,分針,秒針的運動,這里需要新建一個組件來專門管理這個時間運動,在組件中,如下:

// 繪制 針表
  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)軸原點
    ctx.translate(width/2, height/2);
    ctx.save();

    const t = new Date();//獲取當(dāng)前時間
    let h = t.getHours();//獲取小時
    h = h>12?(h-12):h;//將24小時制轉(zhuǎn)化為12小時制
    const m = t.getMinutes();//獲取分針
    const s = t.getSeconds();//獲取秒

   //繪制時針
    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://systransis.cn/yun/100162.html

相關(guān)文章

  • Taro 優(yōu)秀學(xué)習(xí)資源匯總

    摘要:多端統(tǒng)一開發(fā)框架優(yōu)秀學(xué)習(xí)資源匯總官方資源項目倉庫官方文檔項目倉庫官方文檔微信小程序官方文檔百度智能小程序官方文檔支付寶小程序官方文檔字節(jié)跳動小程序官方文檔文章教程不敢閱讀包源碼帶你揭秘背后的哲學(xué)從到構(gòu)建適配不同端微信小程序等的應(yīng)用小程序最 Awesome Taro 多端統(tǒng)一開發(fā)框架 Taro 優(yōu)秀學(xué)習(xí)資源匯總 showImg(https://segmentfault.com/img/r...

    toddmark 評論0 收藏0
  • 信小程序Taro開發(fā)(2):生命周期及開發(fā)中注意點

    摘要:入口文件繼承自組件基類,它同樣擁有組件生命周期,但因為入口文件的特殊性,他的生命周期并不完整,如。支持組件化開發(fā),組件代碼可以放在任意位置,不過建議放在下的目錄中。 生命周期 componentWillMount 在微信小程序中這一生命周期方法對應(yīng)頁面的onLoad或入口文件app中的onLaunch componentDidMount 在微信小程序中這一生命周期方法對應(yīng)頁面的onRe...

    morgan 評論0 收藏0
  • React的移動端和PC端生態(tài)圈的使用匯總

    摘要:調(diào)用通過注冊表調(diào)用到實例,透過的,調(diào)用到中的,最后通過,調(diào)用,根據(jù)參數(shù)相應(yīng)模塊執(zhí)行。京東的,多端解決方案是一套遵循語法規(guī)范的多端開發(fā)解決方案。 showImg(https://segmentfault.com/img/bVbuMkw?w=1304&h=808); 對于一項技術(shù),我們不能停留在五分鐘狀態(tài),特別喜歡一句話,用什么方式繪制UI界面一點不重要,重要的是底層的思維,解決問題和優(yōu)化...

    kun_jian 評論0 收藏0
  • React的移動端和PC端生態(tài)圈的使用匯總

    摘要:調(diào)用通過注冊表調(diào)用到實例,透過的,調(diào)用到中的,最后通過,調(diào)用,根據(jù)參數(shù)相應(yīng)模塊執(zhí)行。京東的,多端解決方案是一套遵循語法規(guī)范的多端開發(fā)解決方案。 showImg(https://segmentfault.com/img/bVbuMkw?w=1304&h=808); 對于一項技術(shù),我們不能停留在五分鐘狀態(tài),特別喜歡一句話,用什么方式繪制UI界面一點不重要,重要的是底層的思維,解決問題和優(yōu)化...

    J4ck_Chan 評論0 收藏0
  • React的移動端和PC端生態(tài)圈的使用匯總

    摘要:調(diào)用通過注冊表調(diào)用到實例,透過的,調(diào)用到中的,最后通過,調(diào)用,根據(jù)參數(shù)相應(yīng)模塊執(zhí)行。京東的,多端解決方案是一套遵循語法規(guī)范的多端開發(fā)解決方案。 showImg(https://segmentfault.com/img/bVbuMkw?w=1304&h=808); 對于一項技術(shù),我們不能停留在五分鐘狀態(tài),特別喜歡一句話,用什么方式繪制UI界面一點不重要,重要的是底層的思維,解決問題和優(yōu)化...

    Travis 評論0 收藏0

發(fā)表評論

0條評論

cuieney

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<