整合營銷服務商

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

          免費咨詢熱線:

          HTML5(九)-超強的 SVG 動畫

          HTML5(九)-超強的 SVG 動畫

          VG 動畫有很多種實現方法,也有很大SVG動畫庫,現在我們就來介紹 svg動畫實現方法都有哪些?

          一、SVG 的 animation

          SVG animation 有五大元素,他們控制著各種不同類型的動畫,分別為:

          • set
          • animate
          • animateColor
          • animateTransform
          • animateMotion

          1.1、set

          set 為動畫元素設置延遲,此元素是SVG中最簡單的動畫元素,但是他并沒有動畫效果。

          使用語法:

          <set attributeName="" attributeType="" to="" begin="" />
          • attributeName :是要改變的元素屬性名稱。
          • attributeType :是表明attributeName屬性值的列表,支持三個固定參數 CSS/XML/auto,如x,y以及transform屬于XML,opacity屬于CSS。auto是瀏覽器自動判別的意思,也是默認值,如果你不知道該選哪個就填auto,瀏覽器自己判別。
          • to :動畫結束的屬性值。
          • begin :動畫延遲時間。

          eg:繪制一個半徑為200的圓,4秒之后,半徑變為50。

          <svg width="320" height="320">
           <circle cx="0" cy="0" r="200" style="stroke: none; fill: #0000ff;">
            <set attributeName="r" attributeType="XML" to="50" begin="4s" />
           </circle>
          </svg>

          1.2、animate

          是基礎的動畫元素,實現單屬性的過渡效果。

          使用語法:

          <animate 
           attributeName="r" 
           from="200" to="50" 
           begin="4s" dur="2s" 
           repeatCount="2"
          ></animate>
          • from :過渡效果的屬性開始值。
          • to:過渡效果的屬性結束值。
          • begin:動畫開始時間。
          • dur:動畫過渡時間,控制動畫速度。
          • repeatCount:動畫重復次數。

          eg:繪制一個半徑為200的圓,4秒之后半徑在2秒內從200逐漸變為50。

          <circle cx="0" cy="0" r="200" style="stroke: none; fill: #0000ff;">
           <animate attributeName="r" from="200" to="50" 
            begin="4s" dur="2s" repeatCount="2"></animate>
          </circle>

          1.3、animateColor

          控制顏色動畫,animate也可以實現這個效果,所以該屬性目前已被廢棄。

          1.4、animateTransform

          實現transform變換動畫效果,與css3的transform變換類似。實現平移、旋轉、縮放等效果。

          使用語法:

          <animateTransform attributeName="transform"  type="scale" 
           from="1.5" to="0" 
           begin="2s"  dur="3s" 
           repeatCount="indefinite"></animateTransform>
          • repeatCount:重復次數,設置為 indefinite 表示無限循環,一直執行。
          • type:添加 transform 變換類型。
          • eg:繪制一個半徑為200的圓,4秒之后開始縮放,在2秒內從1.5縮小到0倍。
          <svg width="320" height="320">
           <circle cx="0" cy="0" r="200" style="stroke: none; fill: #0000ff;">
            <animateTransform attributeName="transform" begin="4s"  
             dur="2s" type="scale" from="1.5" to="0" 
             repeatCount="indefinite"></animateTransform>
           </circle>
          </svg>

          1.5、animateMotion

          可以定義動畫路徑,讓SVG各個圖形,沿著指定路徑運動。

          使用語法:

          <animateMotion 
           path="M 0 0 L 320 320" 
          begin="4s" dur="2s"></animateMotion>
          • path:定義路徑,使用語法與《HTML5(八)——SVG 之 path 詳解》path的d屬性一致。
          • begin:延遲時間。
          • dur:動畫執行時間。

          eg:繪制一個半徑為10的圓,延遲4秒從左上角運動的右下角。

          <svg width="320" height="320">
           <circle cx="0" cy="0" r="10" style="stroke: none; fill: #0000ff;">
            <animateMotion 
             path="M 0 0 L 320 320" 
             begin="4s" dur="2s"
             ></animateMotion>
           </circle>
          </svg>

          實際制作動畫的時候,動畫太單一不酷,需要同時改變多個屬性時,上邊的四種元素可以互相組合,同類型的動畫也能組合。以上這些元素雖然能夠實現動畫,但是無法動態地添加事件,所以接下來我們就看看 js 如何制作動畫。

          二、JavaScript 控制

          上篇文章我們介紹js可以操作path,同樣也可以操作SVG的內置形狀元素,還可以給任意元素添加事件。

          給SVG元素添加事件方法與普通元素一樣,可以只用on+事件名 或者addEventListener添加。

          eg:使用SVG繪制地一條線,點擊線條地時候改變 x1 ,實現旋轉效果。

          <svg width="800" height="800" id="svg">
              <line id="line" x1="100" y1="100" 
              x2="400" y2="300" 
              stroke="black" stroke-width="5"></line>  
            </svg>
          <script>
           window.onload=function(){
            var line=document.getElementById("line")
            line.onclick=function(){
             let start=parseInt(line.getAttribute("x1")),
                 end=400,dis=start-end
             requestAnimationFrame(next)
             let count=0;
             function next(){
              count++
              let a=count/200,cur=Math.abs(start+ dis*a)
              line.setAttribute('x1',cur)
              if(count<200)requestAnimationFrame(next)
             }
            }
           }
          </script>

          js制作的SVG動畫,主要利用 requestAnimationFrame 來實現一幀一幀的改變。

          我們上述制作的 SVG 圖形、動畫等,運行在低版本IE中,發現SVG只有IE9以上才支持,低版本的并不能支持,為了兼容低版本瀏覽器,可以使用 VML ,VML需要添加額外東西,每個元素需要添加 v:元素,樣式中還需要添加 behavier ,經常用于繪制地圖。由于使用太麻煩,所以我們借助 Raphael.js 庫。

          三、Rapha?l.js (拉斐爾)

          Raphael.js是通過SVG/VML+js實現跨瀏覽器的矢量圖形,在IE瀏覽器中使用VML,非IE瀏覽器使用SVG,類似于jquery,本質還是一個javascript庫,使用簡單,容易上手。

          使用之前需要先引入Raphael.js庫文件。cdn的地址為:https://cdn.bootcdn.net/ajax/libs/raphael/2.3.0/raphael.js

          3.1、創建畫布

          Rapheal有兩種創建畫布的方式:

          第一種:瀏覽器窗口上創建畫布

          創建語法:

          var paper=Raphael(x,y,width,height)

          x,y是畫布左上角的坐標,此時畫布的位置是絕對定位,有可能會與其他html元素重疊。width、height是畫布的寬高。

          第二種:在一個元素中創建畫布

          創建語法:

          var paper=Raphael(element, width, height);

          element是元素節點本身或ID width、height是畫布的寬度和高度。

          3.2、繪制圖形

          畫布創建好之后,該對象自帶SVG內置圖形有矩形、圓形、橢圓形。他們的方法分別為:

          paper.circle(cx, cy, r); // (cx , cy)圓心坐標 r 半徑
          paper.rect(x, y, width, height, r); // (x,y)左上角坐標 width寬度 height高度 r圓角半徑(可選)
          paper. ellipse(cx, cy, rx, ry); // (cx , cy)圓心坐標 rx水平半徑 ry垂直半徑

          eg:在div中繪制一個圓形,一個橢圓、一個矩形。

          <div id="box"></div>
          <script>
           var paper=Raphael("box",300,300)
           paper.circle(150,150,150)
           paper.rect(0,0,300,300)
           paper.ellipse(150,150,100,150)
          </script>

          運行結果如下:

          除了簡單圖形之外,還可以繪制復雜圖形,如三角形、心型,這時就使用path方法。

          使用語法:paper.path(pathString)

          pathString是由一個或多個命令組成,每個命令以字母開始,多個參數是由逗號分隔。

          eg:繪制一個三角形。

          let sj=paper.path("M 0,0 L100,100 L100,0 'Z'")

          還可以繪制文字,如果需要換行,使用 \n 。

          文字語法:paper.text(x,y,text)

          (x,y)是文字坐標,text是要繪制的文字。

          3.3、設置屬性

          圖形繪制之后,我們通常會添加stroke、fill、stroke-width等讓圖形更美觀,Raphael使用attr給圖形設置屬性。

          使用語法:circle.attr({"屬性名","屬性值","屬性名","屬性值",...})

          如果只有屬性名沒有屬性值,則是獲取屬性,如果有屬性值,則是設置屬性。

          注意:如果只設置一個屬性時,可以省略‘{}’。如:rect.attr('fill','pink')

          eg:給上邊的矩形添加邊框和背景色。

          <div id="box"></div>
          <script>
           var paper=Raphael("box",300,300)
           let rect=paper.rect(100,100,150,200)
           rect.attr({'fill':'red','stroke':'blue','stroke-width':'10'})
          </script>

          3.4、添加事件

          RaphaelJS一般具有以下事件:
          click、dblclick、drag、hide、hover、mousedown、mouseout、mouseup、mouseover等以及對應的解除事件,只要在前面加上“un”就可以了(unclick、undblclick)。

          使用語法:

          obj.click(function(){
           //需要操作的內容
          })

          3.5、添加動畫

          animate為指定圖形添加動畫并執行。

          使用語法:

          obj.animate({
           "屬性名1":屬性值1,
           "屬性名2":屬性值2,
            ...
          },time,type)

          屬性名和屬性值就根據你想要的動畫類型加就ok。

          time:動畫所需時間。

          type:指動畫緩動類型。常用值有:

          • linear - 線性漸變
          • ease-in | easeIn | < - 由慢到快
          • ease-out | easeOut | > - 由快到慢
          • ease-in-out | easeInOut | <> - 由慢到快再到慢
          • back-in | backIn - 開始時回彈
          • back-out | backOut - 結束時回彈
          • elastic - 橡皮筋
          • bounce - 彈跳

          eg:點擊矩形,矩形緩緩變大。

          <div id="box"></div>
          <script>
           var paper=Raphael("box",800,500)
           let rect=paper.rect(100,100,150,100)
           rect.attr({'fill':'red','stroke':'blue','stroke-width':'10'})
           rect.attr('fill','pink')
           rect.click(function(){
            rect.animate({
             "width":300,
             "height":300
            },1000,"bounce")
           })
          </script>

          復制上邊的代碼,分別在各個瀏覽器和低版本IE瀏覽器運行,發現都可以正常運行。SVG的動畫庫挺多了,我們介紹了拉斐爾,有興趣的小伙伴可以自行找找其他庫。

          家好,我是新媒之聲廣告工作室的大白,今天我給大家帶來的是HTML5文字教學。

          首先給大家介紹一下html5的標準語言結構和后綴;

          點擊右鍵新建一個文本文檔重命名為index(可根據自己來命名但不能用中文)后綴改為html

          html5有兩種后綴一種為html另一種為htm;

          我們來認識一下html5它是html4.0升級而來,相比html4.0來說改的更簡單更完善了,html5是一種標簽語言

          是瀏覽器可以直接解析的一種語言不像php或是其它語言需要用服務器解析在用瀏覽器來識別表現出來,一般用來寫網站靜態頁面或是模板,html5現在的地位在慢慢提升,一些app開始使用html5加原生混編開發。

          html語言結構分析:

          一般html5都是雙標簽很少有單標簽的存在;

          <!DOCTYPE html>

          <!-- 文檔類型 -->

          <html>

          <!-- html開始標簽-->

          <head>

          <!-- head頭部開始標簽-->

          <!-- 里面可以寫一些設置字符的代碼和頁面標題代碼css樣式和js樣式等 -->

          <meta charset="UTF-8">

          <!-- 設置字符集 -->

          <title>Document</title>

          <!-- 頁面標題標簽-->

          </head>

          <!-- head結束標簽 -->

          <body>

          <!-- body體開始標簽 -->

          <!-- body體用于寫一些直接解析在瀏覽器里讓用戶觀看的標簽 -->

          </body>

          <!-- body結束標簽 -->

          </html>

          <!-- html結束標簽 -->

          由于html5標簽使用<>組成所以要用大于號和小于號要非常謹慎,比如要表現2>1必須要用實體符來代替相應的符號。

          HTML <!--...--> 注釋標簽

          標簽定義及使用說明

          <!--...--> 注釋標簽用來在源文檔中插入注釋。注釋不會在瀏覽器中顯示。

          您可使用注釋對您的代碼進行解釋,這樣做有助于您在以后的時間對代碼的編輯。特別是代碼量很大的情況下很有用。

          您也可以在注釋內容存儲針對程序所定制的信息。在這種情況下,這些信息對用戶是不可見的,但是對程序來說是可用的。一個好的習慣是把注釋或樣式元素放入注釋文本中,這樣就可避免不支持腳本或樣式的老瀏覽器把它們顯示為純文本。

          <script type="text/javascript"><!-- function displayMsg() { alert("Hello World!") } //--> 
          </script>

          html 注釋代碼分析圖

          注釋:命令行最后的兩個正斜杠(//)是 JavaScript 注釋符號。這確保了 JavaScript 不會執行 --> 標簽。

          除了在源文檔中有非常明顯的作用外,許多 Web 服務器也利用注釋來實現文檔服務端軟件特有的特性。這些服務器可以掃描文檔,從傳統的 HTML/XHTML 注釋中找到特定的字符序列,然后再根據嵌在注釋中的命令采取相應的動作。這些動作可能是簡單的包括其他文件中的文本(即所謂的服務器端包含,server-inside include),也可能是復雜地執行其他命令去動態生成文檔的內容。

          所有主流瀏覽器都支持 <!--...--> 注釋標簽。


          HTML 4.01 與 HTML5之間的差異

          無。


          標準屬性

          <!--...--> 注釋標簽不支持任何標準屬性。

          如需更多有關 HTML 標準屬性的信息,請訪問 標準屬性。


          事件屬性

          <!--...--> 注釋標簽不支持任何事件屬性。

          如需更多有關 HTML 事件屬性的信息,請訪問 事件屬性。


          HTML注釋的作用

          一套完整的代碼可以讓人眼花繚亂,當程序員想要對某些部分進行修改的時候,可能要花很多的時間去找出那部分的代碼。就像我們在文章中給重要的部分進行標記、做記號一樣,在代碼里可以使用到“注釋標簽”來對一些代碼進行注解。注釋標簽不會在可視化界面當中顯示,因為它只是程序員們用來標注說明的一個小玩意,用來對一些代碼程序進行解釋,也方便后來者能夠快速地接手并且理解其用處。

          網頁的開發必定卻少不了顏色的組成,html5顏色屬性標簽:

          HTML 顏色

          目前所有瀏覽器都支持以下顏色名。

          141個顏色名稱是在HTML和CSS顏色規范定義的(17標準顏色,再加124)。下表列出了所有顏色的值,包括十六進制值。

          提示: 17標準顏色:黑色,藍色,水,紫紅色,灰色,綠色,石灰,栗色,海軍,橄欖,橙,紫,紅,白,銀,藍綠色,黃色。點擊其中一個顏色名稱(或一個十六進制值)就可以查看與不同文字顏色搭配的背景顏色。:

          顏色屬性標簽共分為四種:

          1.英文 2.十進制 3.十六進制

          red rgb(255,0,0); #ffffff(#fff) 白色

          green rgb(0,255,0); #ff0000(#f00) 紅色

          blue rgb(0,0,255); #00ff00(#0f0) 綠色

          4.帶有透明度 #0000ff(#00f) 藍色

          rgba(255,0,0,0.5); #000000(#000) 黑色

          rgba(0,255,0,0.5); #ffff00(#ff0) 黃色

          rgba(0,0,255,0.5); #00ffff(#0ff) 青色

          #ff00ff(#f0f) 紫色

          html顏色屬性標簽:

          <style type="text/css">

          h1{

          color: red;

          }

          </style>

          注意:這里用的十六進制全寫和縮寫表達的是一個意思#ff00aa只要十六進制顏色有兩位重復可以只寫一個#f0a。

          body體背景顏色:

          <body bgcolor="#aaf"></body>

          注意:css樣式有三種寫法這里用到前兩種,后面講解css的時候會介紹;

          嵌入式樣式(屬于內部樣式表)
          特征:
          1、樣式的屬性內容以代碼的形式[放在 ]寫在網頁代碼中!
          2、首先,通過【格式】→【樣式】設置樣式的屬性內容!
          3、在合適的地方使用 class="樣式名" 調用具體的樣式效果!
          如: <style type="text/css">
           h1{
           color: red;
           }
          </style>
          
          內聯式樣式(屬于內部樣式表)
          特征:
          1、樣式的屬性內容直接跟在將要修飾的文字標記里[如:
          2、具體格式: <body bgcolor="#aaf"></body>
          例如:修飾單元格里的文字特征:1、有一個單獨的CSS文件存在![如:001.css]2、首先,通過【格式】→【樣式表連接】與CSS文件[001.css]建立連接!3、在合適的地方使用 class="樣式名" 調用具體的樣式效果!如:<link href="001.css" type="text/css" rel="Stylesheet"/>嵌入式樣式(屬于內部樣式表)

          如果需要課件和今天用到的文件可以加關注私聊我。

          TML5 Canvas是HTML5新增的一個元素,它提供了一個可執行JavaScript腳本繪制圖形的區域。Canvas元素通過使用JavaScript API,可以在瀏覽器上繪制圖形、渲染動畫和實現交互效果等。

          使用原理:
          HTML5 Canvas通過使用JavaScript API在瀏覽器中創建一塊畫布(Canvas),然后可以使用腳本語言(通常是JavaScript)在畫布上繪制各種形狀、線條、圖像和文本等。Canvas使用像素渲染,可以直接操作像素數據,因此在性能方面相比其他圖形技術(如SVG)更具優勢。

          場景:
          HTML5 Canvas可以應用于各種需要圖形繪制、動畫渲染和交互效果的場景,例如:

          1. 游戲開發:Canvas可以用來開發2D或3D游戲,通過繪制游戲場景、角色和動畫等實現游戲效果。
          2. 數據可視化:Canvas可以用來繪制各種圖表和圖形,實現數據可視化效果。
          3. 圖像處理:Canvas可以對圖像進行像素級別的操作,實現圖像處理功能,例如濾鏡、裁剪和合成等。
          4. 實時視頻處理:Canvas可以結合WebRTC等技術實現實時視頻處理,例如在視頻通話中添加特效和濾鏡等。

          代碼示例:
          以下是一個簡單的HTML5 Canvas代碼示例,用于在畫布上繪制一個矩形和一個圓形:

          <!DOCTYPE html>  
          <html>  
              <head>  
               			<title>HTML5 Canvas示例</title>  
              </head>  
                <body>  
                     <canvas id="myCanvas" width="400" height="400"></canvas>  
                       <script>  
                           // 獲取Canvas元素和繪圖上下文  
                           var canvas=document.getElementById("myCanvas");  
                           var ctx=canvas.getContext("2d");  
                           // 繪制矩形  
                           ctx.fillStyle="blue";  
                           ctx.fillRect(50, 50, 100, 100);  
                           // 繪制圓形  
                           ctx.beginPath();  
                           ctx.arc(200, 200, 50, 0, Math.PI * 2);  
                           ctx.fillStyle="red";  
                           ctx.fill();  
                       </script>  
                </body>  
          </html>

          在上述代碼中,我們首先獲取了Canvas元素和繪圖上下文(Context),然后使用fillRect()方法繪制了一個藍色的矩形,使用arc()方法繪制了一個紅色的圓形。最后,我們使用fill()方法填充了圓形的顏色。


          主站蜘蛛池模板: 国产精品一区二区久久国产| 免费一区二区三区在线视频| 国产在线aaa片一区二区99| 亚洲一区二区三区在线播放| 日本欧洲视频一区| 国产丝袜无码一区二区三区视频| 日本高清一区二区三区| 无码日韩精品一区二区免费| 精品国产一区二区三区香蕉| 亚洲美女一区二区三区| 久久99精品波多结衣一区| 国产一区二区三区精品久久呦| 亚洲精品色播一区二区| 国产免费av一区二区三区| 国产vr一区二区在线观看| 亚洲夜夜欢A∨一区二区三区| 精品一区二区三区四区| 国产一区二区三区播放心情潘金莲| 国产精品视频一区二区三区| 亚洲AV无码国产一区二区三区| 免费看无码自慰一区二区| 视频精品一区二区三区| 亚洲AV无码国产一区二区三区| 国产91大片精品一区在线观看| 天码av无码一区二区三区四区| 精品国产AⅤ一区二区三区4区| 99精品一区二区三区| 亚洲AV无码一区二区大桥未久| 亚洲中文字幕丝袜制服一区 | 精品无码人妻一区二区免费蜜桃| 精品国产一区二区三区www| 精品欧洲av无码一区二区三区| 精品人体无码一区二区三区 | 激情综合一区二区三区| 国99精品无码一区二区三区| 国产微拍精品一区二区| 日韩精品人妻一区二区中文八零| 无码av免费毛片一区二区| 韩国女主播一区二区| 无码中文字幕人妻在线一区二区三区 | 久久久91精品国产一区二区三区|