整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          前端設(shè)計(jì)-教你如何快速繪制HTML5動(dòng)畫

          周在給學(xué)生講授JavaScript課程中setInterval方法時(shí),想到了我們在網(wǎng)上看到的各類GIF動(dòng)圖比較有意思,就將其引入到教學(xué)中,教學(xué)內(nèi)容設(shè)計(jì)如果通過HTML5與JavaScript實(shí)現(xiàn)網(wǎng)頁類似GIF效果的動(dòng)態(tài)圖。于是在網(wǎng)上搜集了部分gif格式動(dòng)圖,將每一個(gè)Gif動(dòng)圖分解為一組jpg格式圖片,再采用setInterval與html5 Canvas進(jìn)行動(dòng)畫的實(shí)現(xiàn)。通過學(xué)習(xí)可以讓學(xué)生進(jìn)一步了解canvas動(dòng)畫實(shí)現(xiàn)的過程與原理。并將其發(fā)布到頭條,也希望對有興趣的初學(xué)者了解HTML5 Canvas等有所幫助。圖片分組圖片素材如下:

          素材一

          實(shí)現(xiàn)動(dòng)畫的素材我們已經(jīng)給出,主要通過gif動(dòng)圖導(dǎo)出一組圖片,下面對html5動(dòng)畫實(shí)現(xiàn)過程進(jìn)行簡單說明。


          基本思路

          實(shí)現(xiàn)其動(dòng)畫的基本思路是通過HTML5提供的canvas元素進(jìn)行圖片的繪制與展示,借助setInterval方法實(shí)現(xiàn)間隔指定時(shí)間調(diào)用新的圖片實(shí)現(xiàn)重新繪圖。其中繪圖主要使用drawImage方法進(jìn)行繪圖,最終通過圖片依次重繪實(shí)現(xiàn)動(dòng)畫效果。具體實(shí)現(xiàn)過程如下:

          HTML5 Canvas設(shè)置

          在頁面body部分添加Canva標(biāo)簽,設(shè)置其id屬性為canv,寬度為600,高度為400,編寫代碼描述如下圖:

          添加畫布元素

          canvas瀏覽效果

          加載圖片資源

          使用Canvas借助JavaScript提供的drawImage方法進(jìn)行繪圖,需要提供要繪制的圖片資源即繪圖的坐標(biāo)位置。該方法原型如下:

          drawImage方法原型

          因此我們需要加載圖片資源,本例由于需要調(diào)用多個(gè)img實(shí)現(xiàn)定時(shí)不同圖片的繪制,因此我們可以使用數(shù)組存儲(chǔ)所加載的圖片資源。本例圖片數(shù)量為14,因此我們數(shù)組長度為14。使用素組存儲(chǔ)圖片實(shí)現(xiàn)代碼如下:

          加載圖片資源代碼

          定義頁面加載事件onload

          本例設(shè)計(jì)在頁面加載時(shí)自動(dòng)播放動(dòng)畫,因此需要在JavaScript腳本中添加頁面onload事件,在事件中編寫繪圖相關(guān)代碼,主要代碼包括獲取畫布canva與實(shí)例化繪圖對象context。部分代碼描述如下:

          onload事件及繪圖初始化

          使用setInterval實(shí)現(xiàn)動(dòng)畫

          使用setInterval方法實(shí)現(xiàn)動(dòng)畫主要需要定義回調(diào)函數(shù)與回調(diào)函數(shù)觸發(fā)執(zhí)行的周期,本例中我們使用匿名函數(shù)作為回調(diào)函數(shù),觸發(fā)周期設(shè)置為100毫秒。setInterval函數(shù)定義如下:

          setInterval函數(shù)

          在定義完函數(shù)之后可在其匿名函數(shù)函數(shù)體部分寫入繪圖方法dramImage(),實(shí)現(xiàn)周期調(diào)用不同圖片資源進(jìn)行繪圖,最終展示出動(dòng)畫效果。為了保證循環(huán)調(diào)用14張圖片,我們需要設(shè)置一計(jì)數(shù)全局變量i,由于我們圖片采用數(shù)組存儲(chǔ),下標(biāo)為數(shù)組,且從0-13進(jìn)行編號,因此當(dāng)計(jì)數(shù)值小于13時(shí)自動(dòng)+1,指向下一數(shù)組下標(biāo),當(dāng)為13時(shí),設(shè)置計(jì)數(shù)值為0,回到數(shù)組第一元素,最終實(shí)現(xiàn)數(shù)組訪問下標(biāo)的循環(huán)。setInterval實(shí)現(xiàn)完整代碼如下:

          setInterval完整代碼

          實(shí)現(xiàn)效果展示


          HTML動(dòng)畫效果展示


          本頭條號長期關(guān)注編程資訊分享;編程課程、素材、代碼分享及編程培訓(xùn)。如果您對以上方面有興趣或代碼錯(cuò)誤、建議與意見,可以聯(lián)系作者,共同探討。期待大家關(guān)注!如需案例完整代碼請關(guān)注并私信,往期前端設(shè)計(jì)文章鏈接如下:

          1. 前端設(shè)計(jì)-JavaScript中的值、引用傳遞與垃圾回收
          2. 前端設(shè)計(jì)-JavaScript美女拼圖游戲開發(fā)實(shí)例
          3. 前端設(shè)計(jì)- JavaScript驗(yàn)證碼制作及實(shí)例分析
          4. 前端設(shè)計(jì)-Ajax技術(shù)及實(shí)例展示
          5. 前端設(shè)計(jì)-響應(yīng)式頁面開發(fā)基礎(chǔ)
          6. Web開發(fā)前端、后端與全棧的區(qū)別是什么?

          web開發(fā)中,GIF動(dòng)畫效果是隨處可見,比如常見的loading加載、人物奔跑的gif圖片等等,那么這些都是怎么實(shí)現(xiàn)的呢?

          其實(shí)實(shí)現(xiàn)的原理很簡單,簡而言之,這些所謂的動(dòng)畫都是一幀一幀的圖片經(jīng)過一段時(shí)間的間隔做出位移而來的;譬如,我們在PS里面制作GIF動(dòng)畫,首先要把每一幀所需要的圖片制作出來,然后再通過導(dǎo)出的方式把GIF圖片保存下來;相信會(huì)PS的同學(xué),都可以熟練的制作一個(gè)基本的GIF動(dòng)畫圖片;在web開發(fā)中,要實(shí)現(xiàn)這樣的gif圖片,也有很多方法;在這給讀者提供一個(gè)思路,就是利用html5 canvas實(shí)現(xiàn)動(dòng)畫效果。

          利用canvas的drawImage把含有幀的圖片加載到canvas中去,再結(jié)合js實(shí)現(xiàn)動(dòng)畫

          <!DOCTYPE html>
          <html lang="en"><head>
           <meta charset="UTF-8">
           <title>canvas幀--實(shí)現(xiàn)動(dòng)畫</title>
           <style>
           *{padding:0;margin:0;}
           canvas{display:block;background:white}
          </style>
          </head>
          <body> 
          <canvas></canvas>
          <script>
           var imgPic = new Image();
           imgPic.src = 'http://www.cj365.cc/demo/bird/bird.png';
           var canvas = document.querySelector('canvas');
           canvas.width = window.innerWidth;
           canvas.height = window.innerHeight;
           var ctx = canvas.getContext('2d');
           imgPic.onload = function () {
           drawImg()
           }
           var i = 0;
           var lastTime = new Date().getTime();
           var delatime;
           var timer = 0;
           function drawImg() {
           window.requestAnimationFrame(drawImg);
           var now = new Date().getTime();
           delatime = now - lastTime;
           lastTime = now;
           timer += delatime;
           if (timer > 200) {
           i++;
           if (i > 7) i = 0;
           timer = 0
           }
           console.log(delatime)
           ctx.drawImage(imgPic, i * 140, 0, 140, 85, (canvas.width - 140) / 2, (canvas.height - 85) / 2, 140, 85);
           }
          </script>
          </body>
          </html>
          

          以上方法實(shí)現(xiàn)的前提是,需要有一張已繪制幀的圖片,有了圖片才可進(jìn)行幀的動(dòng)畫;利用該方法可以控制動(dòng)畫的播放、暫停以及幀率

          接來,直接上今天的課程

          第七課:頁面

          第八課:播放控制

          第九課:變形工具

          今天多加一個(gè)課外小教程,《PV3天破2億的H5作品詳解》

          1. 背景介紹

          2. 知識(shí)點(diǎn)

          3. 界面制作
          4. 添加行為
          5. 發(fā)布作品

          有興趣的朋友也可以關(guān)注我們的微信公眾號:mugedachina 或者搜索“Mugeda”即可

          另外,在我們的作品展示品牌有很多成熟的案例,大家也可以關(guān)注一下,微信公眾號:mucard,或搜索“卡司令”


          主站蜘蛛池模板: 亚洲国产精品一区二区久久| 精品欧洲AV无码一区二区男男| 日本无码一区二区三区白峰美 | 日韩精品免费一区二区三区| 人妻视频一区二区三区免费| 免费萌白酱国产一区二区| 久久影院亚洲一区| 亚洲一区二区影视| 成人乱码一区二区三区av| 国产乱码精品一区二区三区香蕉| 国产福利一区二区精品秒拍| 国产亚洲综合一区柠檬导航| 人妻精品无码一区二区三区| 国产成人精品无码一区二区三区 | 亚洲熟女少妇一区二区| 国产成人欧美一区二区三区| 色婷婷AV一区二区三区浪潮| 国精产品一区一区三区MBA下载| 无码人妻精品一区二区三区在线| 国产福利电影一区二区三区,亚洲国模精品一区 | 麻豆AV无码精品一区二区 | 日本精品啪啪一区二区三区| 亚洲电影国产一区| 人妻无码一区二区三区免费| 99精品高清视频一区二区| 国产女人乱人伦精品一区二区 | 亚洲国产国产综合一区首页| 国产日韩精品一区二区三区在线 | 无码AV动漫精品一区二区免费| 亚洲av无码成人影院一区| 中文字幕一区二区三区5566| 久久久国产精品亚洲一区| 日韩在线不卡免费视频一区| 69福利视频一区二区| 蜜臀AV免费一区二区三区| 国产精品熟女视频一区二区| 无码国产精品一区二区免费式影视| 亚洲综合一区二区国产精品| 亚洲中文字幕久久久一区| 欧洲精品码一区二区三区免费看 | 精品国产天堂综合一区在线|