久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

博客專欄

EEPW首頁 > 博客 > 扣丁學堂HTML5培訓之Canvas玩轉酷炫大波浪進度圖實例

扣丁學堂HTML5培訓之Canvas玩轉酷炫大波浪進度圖實例

發布人:扣丁學習 時間:2020-11-26 來源:工程師 發布文章

本文介紹了HTML5Canvas玩轉酷炫大波浪進度圖結果,詳細如下:

如上圖所見,本文就是要實現上面那種結果。

因為最近AlloyTouch要寫一個下拉刷新的酷炫loading結果。所以首選大波浪進度圖。

首先要封裝一下大波浪圖片進度組件。基本的原理是行使Canvas繪制矢量圖和圖片素材合成出波浪殊效。

了解quadraticCurveTo

quadraticCurveTo()方法通過使用透露表現二次貝塞爾曲線的指定控制點,向當前路徑添加一個點。

&#106avascript語法:

context.quadraticCurveTo(cpx,cpy,x,y);

參數值

cpx貝塞爾控制點的x坐標

cpy貝塞爾控制點的y坐標

x結束點的x坐標

y結束點的y坐標

如:

ctx.moveTo(20,20);

ctx.quadraticCurveTo(20,100,200,20);

ctx.stroke();

通過上面代碼可以繪制一條二次貝塞爾曲線,詳細原理結果看下圖:

嘗試繪制波浪

varwaveWidth=300,

offset=0,

waveHeight=8,

waveCount=5,

startX=-100,

startY=208,

progress=0,

progressStep=1,

d2=waveWidth/waveCount,

d=d2/2,

hd=d/2,

c=document.getElementById("myCanvas"),

ctx=c.getContext("2d");

functiontick(){

offset-=5;

progress+=progressStep;

if(progress>220||progress<0)progressStep*=-1;

if(-1*offset===d2)offset=0;

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

ctx.beginPath();

varoffsetY=startY-progress;

ctx.moveTo(startX-offset,offsetY);

for(vari=0;i<waveCount;i++){

vardx=i*d2;

varoffsetX=dx+startX-offset;

ctx.quadraticCurveTo(offsetX+hd,offsetY+waveHeight,offsetX+d,offsetY);

ctx.quadraticCurveTo(offsetX+hd+d,offsetY-waveHeight,offsetX+d2,offsetY);

}

ctx.lineTo(startX+waveWidth,300);

ctx.lineTo(startX,300);

ctx.fill();

requestAnimationFrame(tick);

}

tick();

可以看到無窮活動的波浪:

這里必要重要,繪制的區域要比Canvas大來隱蔽搖蕩校正的圖像,上面使用了200200的Canvas。

大家把代碼clone下來可以試試把它繪制到一個大的Canvas上就可以曉暢。

這里通過if(-1offset===d2)offset=0;來實現無窮循環。

d2就是一個波峰+波谷的長度。一個波峰+一個波谷之后又開始同樣的生命周期和從0開始一樣,所以可以重置為0。

了解globalCompositeOperation

globalCompositeOperation屬性說明了繪制到畫布上的顏色是如何與畫布上已有的顏色組合起來的。

繪制大波浪進度圖會用到:

ctx.globalCompositeOperation="destination-atop";

destination-atop意義:畫布上已有的內容只會在它和新圖形重疊的地方保留。新圖形繪制于內容之后。

當然,globalCompositeOperation還有許多選項,這里不逐一列舉,大家可以試試設置其他的屬性來調整出很酷炫的疊加殊效。

團體實現

varimg=newImage();

functiontick(){

...

...

ctx.fill();

ctx.globalCompositeOperation="destination-atop";

ctx.drawImage(img,0,0);

requestAnimationFrame(tick);

}

img.onload=function(){

tick();

};

img.src="asset/alloy.png";

為了代碼簡單直接,這里免去了封裝一個加載器的代碼,直接通過newImage來設置src來加載圖片。在繪制完矢量圖之后,設置globalCompositeOperation,然后再繪制企鵝圖片,繪制順序不能搞錯。

最后想要工作不累就要不斷的提升自己的技能,請關注扣丁學堂HTML5培訓官網、微信等平臺,扣丁學堂IT職業在線學習教育平臺為您提供權威的HTML5視頻教程系統,通過千鋒扣丁學堂金牌講師在線錄制的第一套自適應HTML5在線視頻課程系統,讓你快速掌握HTML5從入門到精通開發實戰技能。扣丁學堂H5技術交流群:751662650。

*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



關鍵詞:

相關推薦

技術專區

關閉