国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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動畫時鐘

來源:懂視網 責編:小采 時間:2020-11-27 15:37:25
文檔

canvas動畫時鐘

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

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

2422145834-58213fc77124c_articlex.png

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

3432261377-582029d95e00a_articlex.png

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

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

在js文件中創建畫布(假設我們使用的都是現代瀏覽器)。

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

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

//繪制表盤底色
ctx.translate(200, 200); //將坐標原點移到畫布中心
ctx.rotate(-Math.PI/2); //將坐標軸逆時針旋轉90度,x軸正方向對準12點方向
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();

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

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

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);
}

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

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

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

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)); //秒針

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

window.requestAnimationFrame(callback);

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

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

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

2422145834-58213fc77124c_articlex.png

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

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

文檔

canvas動畫時鐘

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

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲国产精品一区二区九九 | 最近中文字幕无日本电影 | 亚洲欧美久久精品一区 | 激情综合亚洲欧美日韩 | 亚洲五月婷婷 | 国产区二区 | 精品一区二区三区在线成人 | 午夜欧美性视频在线播放 | 日韩专区欧美 | 国产v片在线观看 | 亚洲精品自产拍在线观看app | 国产综合精品一区二区 | 久久中文字幕久久久久91 | 亚洲色图欧美一区 | 五十路完熟交尾 | 在线视频观看国产 | 2022国产91精品久久久久久 | 97成人免费视频 | 国产在线一区二区三区 | 男女全黄一级带免费 | 欧美日韩免费在线 | 免费一区视频 | 亚洲精品第一综合99久久 | 国产色在线视频 | 六月丁香在线观看 | 亚洲日韩图片专区第1页 | 美女视频一区二区 | 亚洲精品乱码久久久久久 | 久久精品一区二区国产 | 久久国产精品视频 | 欧美在线一区二区 | 久久久精品麻豆 | 免费在线中文字幕 | 亚洲 欧美 中文 日韩专区 | 亚洲一区二区综合 | 国产免费观看视频 | 欧美一区二区三区视频在线观看 | 日韩精品一区在线 | 91香蕉国产亚洲一区二区三区 | 国产精品久久久久久久久久免费 | 91久久九九精品国产综合 |