<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        canvas動畫時鐘

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 15:37:25
        文檔

        canvas動畫時鐘

        canvas動畫時鐘:最近在學(xué)canvas,然后根據(jù)MDN上的例子做了個動畫時鐘(為什么要造個輪子,因為丑。)這是MDN上的例子,怎么說呢,比較復(fù)古吧。首先,找一張時鐘的圖片,就是下面這張了。——來自bigger than bigger的dribbble網(wǎng)站,圖片來源(侵刪)然后就開始用canva
        推薦度:
        導(dǎo)讀canvas動畫時鐘:最近在學(xué)canvas,然后根據(jù)MDN上的例子做了個動畫時鐘(為什么要造個輪子,因為丑。)這是MDN上的例子,怎么說呢,比較復(fù)古吧。首先,找一張時鐘的圖片,就是下面這張了。——來自bigger than bigger的dribbble網(wǎng)站,圖片來源(侵刪)然后就開始用canva
        最近在學(xué)canvas,然后根據(jù)MDN上的例子做了個動畫時鐘(為什么要造個輪子,因為丑。)

        這是MDN上的例子,怎么說呢,比較復(fù)古吧。

        2422145834-58213fc77124c_articlex.png

        首先,找一張時鐘的圖片,就是下面這張了。

        3432261377-582029d95e00a_articlex.png

        ——來自bigger than bigger的dribbble網(wǎng)站,圖片來源(侵刪)

        然后就開始用canvas實現(xiàn)這個逼格滿滿的時鐘吧。在html代碼中插入canvas標簽

        在js文件中創(chuàng)建畫布(假設(shè)我們使用的都是現(xiàn)代瀏覽器)。

        function clock() {
         var ctx = document.getElementById('canvas').getContext('2d');
        }

        先來繪制時鐘表盤,我們看到這張圖是帶有光線陰影效果的,畫成一樣難度太高。于是就用顏色的漸變來讓時鐘看起來稍微立體一點。在canvas中用createLinearGradient來創(chuàng)建一個新的漸變,并用addColorStop上色,最后把顏色賦給strokeStyle。詳見運用樣式與顏色 by MDN

        //繪制表盤底色
        ctx.translate(200, 200); //將坐標原點移到畫布中心
        ctx.rotate(-Math.PI/2); //將坐標軸逆時針旋轉(zhuǎn)90度,x軸正方向?qū)?2點方向
        var lingrad = ctx.createLinearGradient(150, 0, -150, 0);
        lingrad.addColorStop(0, '#242f37');
        lingrad.addColorStop(1, '#48585c');
        ctx.fillStyle = lingrad;
        ctx.beginPath();
        ctx.arc(0, 0, 150, 0, Math.PI * 2, true);
        ctx.fill();

        比較關(guān)鍵的一點是畫布的坐標軸x軸正方向是時鐘3點鐘方向,為了方便起見,我們把它逆時針旋轉(zhuǎn)90度讓它指向十二點鐘方向。

        繪制刻度要用到旋轉(zhuǎn)rotate(變形 Transformations by MDN),小時刻度有12個,相鄰兩個刻度與圓心連線的角度就是Math.PI/6,這里用的是弧度表示,也就是30度。那么我們就用for循環(huán)來畫出小時的刻度。

        for (var i = 0; i < 12; i++) {
         ctx.beginPath();
         ctx.strokeStyle = '#fff';
         ctx.lineWidth = 3;
         ctx.rotate(Math.PI / 6);
         ctx.moveTo(140, 0);
         ctx.lineTo(120, 0);
         ctx.stroke();
        }

        同理,分鐘的刻度也一樣。

        ctx.beginPath();
        for (i = 0; i < 60; i++) {
         if (i % 5 !== 0) { //去掉與小時刻度重疊的部分
         ctx.beginPath();
         ctx.strokeStyle = '#536b7a';
         ctx.lineWidth = 2;
         ctx.moveTo(140, 0);
         ctx.lineTo(130, 0);
         ctx.stroke();
         }
         ctx.rotate(Math.PI / 30);
        }

        表盤大致畫好了,刻度也畫好了,接下來就是繪制指針并讓它指向正確的時間,是不是?不就就是畫一條直線么。關(guān)鍵是指針rotate的角度是多少呢?其實也是比較簡單的。先獲取當前的時間,把小時轉(zhuǎn)換為12小時制的。

        var now = new Date(),
         sec = now.getSeconds(),
         min = now.getMinutes(),
         hr = now.getHours();
        hr = hr > 12 ? hr - 12 : hr;

        那么,時針的位置就是(相對于x軸正方向轉(zhuǎn)過的角度):

        ctx.rotate(hr * (Math.PI / 6) + min * (Math.PI / 360) + sec * (Math.PI / 21600));

        同理,分針和秒針的位置:

        ctx.rotate(min * (Math.PI / 30) + sec * (Math.PI/1800));
         //分針ctx.rotate(sec * (Math.PI /30)); //秒針

        最后,最關(guān)鍵的讓指針轉(zhuǎn)動起來,這里要用到的是requestAnimationFrame方法,用來重繪頁面,得到連貫逐幀的動畫,實現(xiàn)最佳的動畫效果。

        window.requestAnimationFrame(callback);

        這個callback就是我們的繪制時鐘的clock()函數(shù)。需要注意的是每次執(zhí)行完requestAnimationFrame后需要清除畫布,不然出現(xiàn)重疊交錯的現(xiàn)象,我們把它放在clock函數(shù)開始的地方。

        ctx.clearRect(0, 0, canvas.width, canvas.height);

        到這里,動畫時鐘就OK了 效果圖如下:

        2422145834-58213fc77124c_articlex.png

        演示地址http://codepen.io/lifeng1893/pen/ALPamR

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        canvas動畫時鐘

        canvas動畫時鐘:最近在學(xué)canvas,然后根據(jù)MDN上的例子做了個動畫時鐘(為什么要造個輪子,因為丑。)這是MDN上的例子,怎么說呢,比較復(fù)古吧。首先,找一張時鐘的圖片,就是下面這張了。——來自bigger than bigger的dribbble網(wǎng)站,圖片來源(侵刪)然后就開始用canva
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲一区二区三区无码影院| 四虎永久免费网站免费观看| 亚洲国产精品成人精品无码区| 一级毛片免费不卡直观看| 免费a级毛片在线观看| 男人j进女人p免费视频| 亚洲成AV人网址| 久久久久久久91精品免费观看| 日韩精品成人亚洲专区| 亚洲综合区图片小说区| 国产成人免费午夜在线观看| 亚洲不卡1卡2卡三卡2021麻豆| 黄页网站免费观看| 中文字幕在线日亚洲9| 国产一区二区三区免费观看在线| 毛片高清视频在线看免费观看| 亚洲精品国产suv一区88| 国产成人yy免费视频| 久久久久久亚洲精品| 久久99久久成人免费播放| 亚洲国产精品va在线播放| **aaaaa毛片免费| 亚洲乱亚洲乱淫久久| 国产黄色免费观看| 国产在线观看免费完整版中文版| 黄色a三级免费看| 免费a级毛片18以上观看精品| 成在人线av无码免费高潮水| 4444亚洲国产成人精品| 午夜dj在线观看免费视频| 亚洲激情视频网站| 日韩免费福利视频| 国产在线观看免费视频软件| 国产.亚洲.欧洲在线| 亚洲?V无码成人精品区日韩| 国产免费区在线观看十分钟| 亚洲人成毛片线播放| 免费观看AV片在线播放| 一区二区三区精品高清视频免费在线播放 | 91精品国产免费久久国语蜜臀| 国产亚洲精品影视在线|