整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          前端設計-教你如何快速繪制HTML5動畫

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

          素材一

          實現動畫的素材我們已經給出,主要通過gif動圖導出一組圖片,下面對html5動畫實現過程進行簡單說明。


          基本思路

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

          HTML5 Canvas設置

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

          添加畫布元素

          canvas瀏覽效果

          加載圖片資源

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

          drawImage方法原型

          因此我們需要加載圖片資源,本例由于需要調用多個img實現定時不同圖片的繪制,因此我們可以使用數組存儲所加載的圖片資源。本例圖片數量為14,因此我們數組長度為14。使用素組存儲圖片實現代碼如下:

          加載圖片資源代碼

          定義頁面加載事件onload

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

          onload事件及繪圖初始化

          使用setInterval實現動畫

          使用setInterval方法實現動畫主要需要定義回調函數與回調函數觸發執行的周期,本例中我們使用匿名函數作為回調函數,觸發周期設置為100毫秒。setInterval函數定義如下:

          setInterval函數

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

          setInterval完整代碼

          實現效果展示


          HTML動畫效果展示


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

          1. 前端設計-JavaScript中的值、引用傳遞與垃圾回收
          2. 前端設計-JavaScript美女拼圖游戲開發實例
          3. 前端設計- JavaScript驗證碼制作及實例分析
          4. 前端設計-Ajax技術及實例展示
          5. 前端設計-響應式頁面開發基礎
          6. Web開發前端、后端與全棧的區別是什么?

          多特效代碼請添加HTML5前端交流群581549454

          廢話不多說,上代碼!

          下面是兩段CSS代碼

          lib.css

          @charset 'utf-8';

          html {

          width: 100%;

          height: 100%;

          }

          body {

          width: 100%;

          height: 100%;

          overflow: hidden;

          background-image: -webkit-linear-gradient(90deg, #395ecb 0%, #3657be 35%, #242161 75%, #1a0531 100%);

          background-image: -moz-linear-gradient(90deg, #395ecb 0%, #3657be 35%, #242161 75%, #1a0531 100%);

          background-image: -ms-linear-gradient(90deg, #395ecb 0%, #3657be 35%, #242161 75%, #1a0531 100%);

          background-image: linear-gradient(0deg, #395ecb 0%, #3657be 35%, #242161 75%, #1a0531 100%);

          perspective: 1000px;

          }

          .bg0 {

          width: 500px;

          height: 500px;

          top: 50%;

          left: 50%;

          transform: translate(-50%, -50%);

          background: url(../images/bg0.png) no-repeat center center;

          background-size: 150%;

          }

          .bg1 {

          width: 100%;

          height: 100%;

          background: url(../images/bg1.png) no-repeat center center;

          }

          .hx-box {

          top: 50%;

          left: 50%;

          width: 500px;

          height: 500px;

          transform-style: preserve-3d;

          transform: translate(-50%, -50%) rotateY(75deg);

          }

          .hx-box ul {

          width: 500px;

          height: 500px;

          transform-style: preserve-3d;

          animation: hxz 20s linear infinite;

          }

          @keyframes hxz {

          0% {

          transform: rotateX(0deg);

          }

          100% {

          transform: rotateX(-360deg);

          }

          }

          .hx-box ul li {

          width: 500px;

          height: 500px;

          border: 4px solid #5ec0ff;

          border-radius: 1000px;

          }

          .hx-box ul li span {

          display: block;

          width: 100%;

          height: 100%;

          background: url(../images/hx.png) no-repeat center center;

          background-size: 100% 100%;

          animation: hx 4s linear infinite;

          }

          @keyframes hx {

          to {

          transform: rotate(360deg);

          }

          }

          .hx-k2 {

          transform: rotateX(60deg) rotateZ(60deg)

          }

          .hx-k3 {

          transform: rotateX(-60deg) rotateZ(-60deg)

          }

          tabris.css

          @charset 'utf-8';article,aside,details,figcaption,figure,footer,header,hgroup,hr,main,menu,nav,section,summary{display:block}hr,img{border:0}pre,textarea{overflow:auto}hr,legend,td,th{padding:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{color:#333;font-size:1em;line-height:1.42857143;font-family:Helvetica,'Hiragino Sans GB','Microsoft Yahei','微軟雅黑',Arial,sans-serif}body,form,h1,h2,h3,h4,h5,h6,ol,p,ul{margin:0}ol,ul{padding-left:0;list-style-type:none}h1,h2,h3,h4,h5,h6{font-size:1em;font-weight:400}a{text-decoration:none;background-color:transparent;color:inherit}a:active,a:hover{outline:0}li{list-style:none}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}.vm,audio,canvas,iframe,img,svg,video{vertical-align:middle}audio:not([controls]){display:none;height:0}[hidden],template{display:none}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}small{font-size:80%}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:1px;border-top:1px solid #ccc;margin:1em 0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}::-moz-selection{background:#b3d4fc;text-shadow:none}::selection{background:#b3d4fc;text-shadow:none}.browserupgrade{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.dv{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.dv.dvv:active,.dv.dvv:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.dn{display:none}.db{display:block}.fix:after,.fix:before{content:" ";display:table}.fix:after{clear:both}.fl{float:left}.fr{float:right}.pr{position:relative}.pa,.pa0{position:absolute}.pa0{left:0;top:0}.oh{overflow:hidden}.wh{width:100%;height:100%}.bo{border:1px solid red}.mg{margin-left:auto;margin-right:auto}.tc{text-align: center;}.wp{margin:0 auto}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}

          網站格式代碼

          <!doctype html>

          <html>

          <head>

          <meta charset="utf-8">

          <meta http-equiv="x-ua-compatible" content="ie=edge,chrome=1">

          <title>CSS3仿QQ瀏覽器官網彗星動畫背景特效</title>

          <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />

          <link rel="stylesheet" href="css/tabris.css">

          <link rel="stylesheet" href="css/lib.css">

          </head>

          <body><script src="/demos/googlegg.js"></script>

          <div class="bg0 pa">

          <div></div>

          </div>

          <div class="hx-box pa">

          <ul>

          <li class="hx-k1 pa0">

          <span></span>

          </li>

          <li class="hx-k2 pa0">

          <span></span>

          </li>

          <li class="hx-k3 pa0">

          <span></span>

          </li>

          </ul>

          </div>

          <div style="text-align:center;margin:50px 0; font:normal 14px/24px 'MicroSoft YaHei';color:#ffffff">

          <p>適用瀏覽器:360、FireFox、Chrome、Opera、傲游、搜狗、世界之窗. 不支持Safari、IE8及以下瀏覽器。</p>

          <p>來源:<a target="_blank">素材</a></p>

          </div>

          </body>

          </html>

          事實證明,Flash 已經不再是互聯網視頻瀏覽的必需……新的開放標準已經被創立,比如 HTML5 這樣的標準才會在移動設備和個人電腦上同樣取得成功?!?/strong>

          喬布斯在 2010年的公開信《關于 Flash 的一點思考》中說。

          在這封公開信中,喬布斯是這樣解釋 HTML5 的:最新的網絡標準,已經為蘋果、谷歌等許多公司所采用,它允許開發者開發出更為高級的圖形、印刷和動畫,并且不需要第三方瀏覽器插件(如 Flash )就能轉換。當然,也正是蘋果和谷歌這樣的科技公司在推動著 HTML5、CSS 和 JavaScript 等開放標準的普及和發展。

          有關 HTML5 的優勢,我在《HTML5是什么鬼?》也進行過總結。

          這是2016年朋友圈的新現象:不論是網頁邀請函,節日游戲,還是品牌廣告,那些被分享出來的 HTML5 頁面不斷嘗試著用更有意思、更流暢的方式來講述每一個事件。

          過去一年,幾乎所有人——你的甲方,你最喜歡的品牌,你朋友任職的互聯網公司,都意識到了 HTML5 的作用。它不是一個簡單的網頁,而是能夠更加有效地組織互聯網中的信息,讓視頻、音頻等服務得到更好的支持;并在減輕開發者的負擔的同時,讓你在不同的平臺上有更一致的體驗。

          對于用戶來說,通過 HTML5 獲得了前所未有的體驗,與品牌產生共鳴或是激起好奇心,這才是最重要的。

          一個月前的天貓雙十一狂歡節 HTML5 推廣頁面《穿越宇宙來看你》,在全景應用的基礎之上,添加了上下滑動預覽節目單的功能,用戶在迅速到達天貓所在舞臺的過程中,還可以看到兩側會場的各種信息。

          相比去年《2015,世界為誰傾倒?》不停180度翻轉手機的折騰,你會發現,2016年的HTML5頁面則更加簡單、粗暴。

          225 張內置素材,通過拍攝、合成、3D渲染等制作方式,最后以平面圖片的形式導出 HTML5 頁面,最終網站的總體量卻在5MB以內。

          Durex GO

          杜蕾斯在七夕節開發出一款類《Pokemon Go》游戲《Durex GO》,只是將捕捉目標更換成喜鵲。用戶在地圖上可以看到自己身邊的喜鵲,不同的喜鵲會在游戲進行一段時間后,進化為代金券、杜蕾斯產品或是酒店鑰匙等,捕捉成功的用戶可以將其兌換為相應的產品。

          一個 HTML5 的成功往往得益于更立體的視覺和聽覺感受,與用戶更有趣的互動,就像通過萬花筒來觀察世界一樣,為你呈現出前所未有的景象。

          以此為理念,推陳出新的優酷萬花筒 HTML5,用萬花筒的成像方式將每一類內容中最具代表性的元素進行合理地拆分,再重組。在英文中,Kaleidoscope(萬花筒)集合了希臘語 Kalos(美麗),Eidos(形狀)和 Scope(觀看)的意思,這也正是優酷想要在這支萬花筒式的 HTML5 中想要傳遞的——豐富的色彩,多樣的表達。

          你不會想到,僅僅在一個 HTML5 中,制作方就使用了 Web Graphics Library(Web GL)3D 繪圖標準完成繪制,它可以為 HTML5 Canvas 提供硬件3D加速渲染,有效地幫助Web開發人員借助系統顯卡來瀏覽器里更流暢地展示3D場景和模型,甚至是更為復雜的導航和數據的視覺化。

          點擊閱讀原文體驗這個 HTML5 前你可能還需要知道,它最終展現了優酷的“煥新”計劃:如果曾經的優酷是一家視頻網站,那么現在的優酷就要成為一家很酷的視頻網站。

          在視頻漸漸成為互聯網內容主流載體的時代到來時,作為用戶的你每時每刻都能夠知曉世界各地正在發生的事情,視頻幫助我們記錄每一個短暫的、偉大的時刻,也正是這些時刻,帶給你一次次的感動、震撼。

          總之,你將逐漸看到一個嶄新的優酷。

          這個世界當然很酷,優酷正在做的是努力讓你看到這個很酷的世界、世界的每一面,就像在萬花筒中看到繽紛的顏色、妙不可言的幾何圖形,從內心深處被打動?!盁ㄐ隆庇媱澔蛟S只是優酷作為這個行業的一份子向前邁出的一小步,但這也讓作為用戶的你看到了,優酷想要為你呈現一個更美好的世界的心愿。

          一鏡到底的萬花筒,大劇熱綜都藏在里面了,點擊【閱讀原文】,打開音樂,用手指觸碰出一個更炫的世界。

          烏 云 裝 扮 者

          To see behind walls.To draw closer.To find

          each other and to feel.That is the purpose of life.

          世界、黑色趣味和明亮內心


          主站蜘蛛池模板: 亚洲中文字幕丝袜制服一区 | 性色av无码免费一区二区三区| 国产成人精品第一区二区| 精品国产一区在线观看| 国产精品夜色一区二区三区| 国偷自产一区二区免费视频| 亚洲免费一区二区| 无码人妻一区二区三区av| 亚洲福利秒拍一区二区| 久久精品动漫一区二区三区| 一区二区三区无码视频免费福利| 日本一区二区三区不卡在线视频| 亚洲一区二区无码偷拍| 成人免费观看一区二区| 亚洲日韩AV一区二区三区四区 | 97精品一区二区视频在线观看 | 激情啪啪精品一区二区| 日韩在线一区二区三区视频| 亚洲av无码一区二区三区人妖 | 无码精品人妻一区二区三区免费 | 国产视频一区二区| 怡红院AV一区二区三区| 国产精品夜色一区二区三区| 精品午夜福利无人区乱码一区| 中文字幕日韩一区| 无码精品一区二区三区| 无码人妻精品一区二区三区不卡 | 蜜桃视频一区二区三区在线观看| 精品亚洲综合在线第一区| 无码精品人妻一区二区三区中| 99久久人妻精品免费一区| 国产精品一区二区久久精品涩爱| 日韩中文字幕精品免费一区| 人妻夜夜爽天天爽一区| 亚洲高清成人一区二区三区| 中文字幕VA一区二区三区| 精品一区二区三区自拍图片区| 亚洲午夜一区二区三区| 精品一区二区三区电影| 一区二区三区无码视频免费福利| 亚洲视频在线观看一区|