久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

HTML5 Canvas玩轉酷炫大波浪進度圖效果實例(附demo)

本篇文章主要介紹了HTML5 Canvas玩轉酷炫大波浪進度圖效果實例,非常具有使用價值,有需要的可以了解一下。

本文介紹了HTML5 Canvas玩轉酷炫大波浪進度圖效果,具體如下:

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

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

首先要封裝一下大波浪圖片進度組件?;镜脑硎抢肅anvas繪制矢量圖和圖片素材合成出波浪特效。

了解quadraticCurveTo

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

JavaScript 語法:

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

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

嘗試繪制波浪

var waveWidth = 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");

function tick() {
    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();
    var offsetY = startY - progress;
    ctx.moveTo(startX - offset, offsetY);

    for (var i = 0; i < waveCount; i++) {
        var dx = i * d2;
        var offsetX = 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 (-1  offset === d2) offset = 0;來實現無限循環。

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

了解globalCompositeOperation

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

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

ctx.globalCompositeOperation = "destination-atop";

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

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

整體實現

var img = new Image();
function tick() {
    ...
    ...
    ctx.fill();
    ctx.globalCompositeOperation = "destination-atop";
    ctx.drawImage(img, 0, 0);
    requestAnimationFrame(tick);
}

img.onload = function () {
    tick();
};

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

為了代碼簡單直接,這里免去了封裝一個加載器的代碼,直接通過new Image來設置src來加載圖片。

 在繪制完矢量圖之后,設置globalCompositeOperation,然后再繪制企鵝圖片,繪制順序不能搞錯。

最后

實例下載:demo

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了有關HTML5頁面在iPhoneX適配問題,需要的朋友可以參考下
本篇文章主要介紹了html5中canvas圖表實現柱狀圖的示例,本文使用canvas來實現一個圖表,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
Adobe公司出品的多媒體處理軟件產品線較多,涵蓋了音視頻編輯、圖像處理、平面設計、影視后期等領域。這篇文章主要介紹了Adobe Html5 Extension開發初體驗圖文教程,非常不錯,需要的朋
這篇文章主要介紹了基于HTML5的WebGL經典3D虛擬機房漫游動畫,需要的朋友可以參考下
這篇文章主要介紹了html5實現移動端適配完美寫法,需要的朋友可以參考下
本篇文章主要介紹了HTML5響應式(自適應)網頁設計的實現,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
主站蜘蛛池模板: 国产成人一区二区三区久久久 | 99精品在线观看 | 国产一区二区毛片 | 伊人久麻豆社区 | 国产精品欧美大片 | 成人在线不卡 | 国产伦精品一区二区三区四区视频 | 毛片视频观看 | 亚洲综合在线网 | 在线观看a视频 | 亚洲欧美国产毛片在线 | 国产伦精品一区二区三区视频金莲 | 国产高清在线精品一区二区三区 | 伊人网综合在线 | 天天综合天天 | 欧美在线一区二区三区 | 国产视频1 | 国产亚洲精品a | 国内精品视频一区二区三区 | 亚洲视频 欧美视频 | 日本三级线观看 视频 | 国产精品视频二区三区 | 久草视频在线播放 | 精品福利在线 | 91色在线 | 自拍偷拍亚洲一区 | 久久久久国产一区二区三区四区 | 国产yw851.c免费观看网站 | 伊人伊人 | 国产精品视频www | 尤物在线 | 亚洲精品日韩在线 | 国产黄色在线观看 | 日韩不卡一区二区 | 久久精品一 | 男人阁久久| 日韩免费网站 | 免费在线观看一区二区三区 | 精品视频一二区 | 天天操天天干天天曰 | 99国产精品99久久久久久粉嫩 |