整合營銷服務商

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

          免費咨詢熱線:

          Selenium自動化測試學習之WebDriver API之處理HTML5的視頻播放

           目前HTML5技術已漸漸成為主流,主流的瀏覽器都已支持HTML5。越來越多的應用使用了HTML5的元素,如canvas、video等,另外網頁存儲功能更增加了用戶的網絡體驗,使得越來越多的開發者在使用這樣的標準,所以我們也需要學習如何使用自動化技術來測試它們。

            WebDriver支持在指定的瀏覽器上測試HTML5,另外,我們還可以使用JavaScript來測試這些功能,這樣就可以在任何瀏覽器上測試HTML5了。

            大多數瀏覽器使用控件(如Flash)來播放視頻,但是,不同的瀏覽器需要使用不同的插件。HTML5定義了一個新的元素<video>,指定了一個標準的方式來嵌入電影片段,IE9+、Firefox、Opera、Chrome都支持該元素。

          代碼如下圖:


            JavaScript函數有個內置的對象叫做arguments。Arguments對象包含了函數調用的參數組,[0]表示取對象的第一個值。

            currentSrc熟悉返回當前音頻/視頻的URL。如果未設置音頻/視頻,則返回空字符串。Load()、play()、pause()等控制著視頻的加載、播放、暫停。

          一篇文章《HTML5(五)——Canvas API》介紹 canvas 繪制基本圖形,這節開始介紹canvas的高級操作。

          一、canvas 轉換

          canvas 轉換常用的幾種方法介紹,如下:

          方法

          描述

          scale()

          縮放當前繪圖至更大或更小。

          rotate()

          旋轉當前繪圖。

          translate()

          重新映射畫布上的 (0,0) 位置。

          transform()

          替換繪圖的當前轉換矩陣。

          setTransform()

          將當前轉換重置為單位矩陣。然后運行 transform()。

          1.1 、scale - 縮放

          使用語法:scale(x,y)

          x:表示水平方向的縮放倍數

          y:表示垂直方向的縮放倍數

          eg:canvas 繪制的矩形框放大兩倍,代碼如下:

          var canvas = document.getElementById("canvas")
          var ctx = canvas.getContext("2d")
          ctx.scale(2,2)
          ctx.fillStyle="red"
          ctx.fillRect(0,0,200,200)

          1.2、translate - 畫布平移

          使用語法:translate(x,y)

          x:添加到水平坐標上的位置

          y:添加到垂直坐標上的位置

          設置之后開始繪制的圖片位置從(x,y)算起。

          eg:繪制兩個一樣的矩形,一個在平移前繪制,一個在平移后繪制,代碼如下:

          var canvas = document.getElementById("canvas")
          var ctx = canvas.getContext("2d")
          ctx.fillStyle="red"
                  
          ctx.fillRect(0,0,200,200)
          //平移
          ctx.translate(200,200)
          ctx.fillRect(0,0,200,200)

          運行結果如圖:

          1.3 、rotate - 旋轉

          使用語法:rotate(angle)

          angle 旋轉弧度,如果想使用角度,可以把角度轉成弧度,公式為:deg * Path.PI/180。

          eg:將一個矩形旋轉45度,代碼如下:

          var canvas = document.getElementById("canvas")
          var ctx = canvas.getContext("2d")
          //旋轉45度
          ctx.rotate(45*Math.PI/180)
          ctx.fillStyle="red"
          ctx.fillRect(0,0,200,200)

          運行結果如圖:

          根據上述結果我們發現旋轉的時候,默認原點是畫布的起始點,我們想要的旋轉是在矩形框中心為原點的旋轉,此時我們需要借助上translate平移,重置一下原點,修改上述代碼為:

          <canvas width="400" height="400" id="canvas"></canvas>
          
          var canvas = document.getElementById("canvas")
          var ctx = canvas.getContext("2d")
          
          ctx.translate(200,200)
          ctx.rotate(45*Math.PI/180)
          ctx.translate(-200,-200)
          
          ctx.fillStyle="red"
          ctx.fillRect(100,100,200,200)

          運行結果如圖:

          1.4、transform - 矩陣變換

          使用語法:transform(a,b,c,d,e,f)

          • a:水平縮放
          • b:水平傾斜
          • c:垂直傾斜
          • d:垂直縮放
          • e:水平移動
          • f:垂直移動

          transform可以替代前邊平移、縮放、旋轉三者,如下:

          // 平移
          translate(x,y) <=> transform(1,0,0,1,x,y) <=> transform(0,1,1,0,x,y)
          // 縮放
          sacle(x,y) <=> transform(x,0,0,y,0,0) 
          // 旋轉
          rotate(angle) <=> transform(Math.cos(angle*Math.PI/180), Math.sin(angel*Math.PI/180), -Math.sin(angle*Math.PI/180), Math.cos(angle*Math.PI/180))

          1.5、setTransform - 矩陣變換

          setTransform()方法將變換的矩陣進行重置,它把當前的變換矩陣重置為單位矩陣
          使用語法:transform(a,b,c,d,e,f)
          各參數說明:水平旋轉、水平傾斜、垂直傾斜、垂直縮放、水平移動、垂直移動

          setTransform() 方法把當前的變換矩陣重置為單位矩陣,然后以相同的參數運行 transform()

          二、canvas 操作圖片

          drawImage() 在畫布上繪制圖像、畫布或視頻。也能夠繪制圖片的一部分,增加或減少圖像的尺寸。以下是三種常見使用語法:

          • 語法1:drawImage( img , x , y )
          • 語法2:drawImage( img , x , y , width , height )
          • 語法3:drawImage( img , sx , sy , swidth, sheight , x , y , width , height )

          上述參數表示的意義如下:

          參數

          描述

          img

          規定要使用的圖像、畫布或視頻。

          sx

          可選。開始剪切的 x 坐標位置。

          sy

          可選。開始剪切的 y 坐標位置。

          swidth

          可選。被剪切圖像的寬度。

          sheight

          可選。被剪切圖像的高度。

          x

          在畫布上放置圖像的 x 坐標位置。

          y

          在畫布上放置圖像的 y 坐標位置。

          width

          可選。要使用的圖像的寬度。(伸展或縮小圖像)

          height

          可選。要使用的圖像的高度。(伸展或縮小圖像)

          eg:利用語法3,進行繪制圖片的部分內容,實現如下效果:

          給上述兔子順便加一個點擊屏幕暫停開始功能,完整代碼如下:

          <canvas width="400" height="400" id="canvas"></canvas>
          <script>
           var canvas = document.getElementById("canvas")
           var ctx = canvas.getContext("2d")
           var img = new Image()
           let pause = false,frameCounter = 0,i=0;
           img.src = "./rotate.png"
           img.onload = function(){
            requestAnimationFrame(next)
           }
          function next(){
           ctx.clearRect(0,0,canvas.width,canvas.height)
           if(frameCounter%5 == 0){ //frameCounter 控制動畫速度
            i++
            if(i==11)i=0
           }
           ctx.drawImage(img,
            0,i*240,240,240,
            0,0,240,240) // 每張圖片寬高都是240,具體參數根據圖片而定
            frameCounter ++
            if(!pause)requestAnimationFrame(next)
           }
          window.onclick = function(){
           pause = !pause
           next()
          }
          </script>

          eg:使用 canvas 畫布處理視頻,使用定時器繪制視頻的當前幀,連續起來就是一個視頻,需要注意的是必須處理暫停和開始播放兩種操作,具體代碼如下:

          var v=document.getElementById("video1");
          var c=document.getElementById("myCanvas");
          ctx=c.getContext('2d');
          v.addEventListener('play',function() {var i=window.setInterval(function() 
          {ctx.drawImage(v,0,0,270,135)},20);},false);
          v.addEventListener('pause',function() {window.clearInterval(i);},false);
          v.addEventListener('ended',function() {clearInterval(i);},false);

          三、像素級操作

          常見的像素級的操作有三種:

          • getImageData() - 獲取畫布像素數據
          • createImageData() - 創建新的、空白像素
          • putImageData() - 圖像像素數據放回畫布

          3.1、getImageData

          使用語法:getImageData( x , y , width , height )

          • x:要被提取的圖像數據矩形區域的左上角 x 坐標。
          • y:要被提取的圖像數據矩形區域的左上角 y 坐標。
          • width:被提取的圖像數據矩形區域的寬度
          • height:被提取的圖像數據矩形區域的高度

          返回一個 imageData 對象,用來描述 canvas 區域隱含的像素數據,這個區域通過像素表示,起點是( x , y ),寬高為 widht 和 height 。

          imageData 對象包含三個屬性:

          • imageData.height - 像素描述的矩形實際高度。
          • imageData.width - 像素描述的矩形實際寬度。
          • imageData.data - 包含 rgba 順序數據的一個數組,數據使用0-255直接整數表示。

          3.2、createImageData

          使用語法:

          createImageData( width , height )

          創建一個空白的 imageData 對象,新對象的默認像素值 transparent black。對于imageData對象中的每個像素值,都存在 rgba 這四方面的信息,即:

          • r - 紅色(0-255)
          • g - 綠色(0-255)
          • b - 藍色(0-255)
          • a - alpha(0-255,0是透明,255是完全可見)

          新對象默認像素值為(0,0,0,0)。

          eg:如果我們想把 imageData 中一個像素變為紅色時,可以改變第一和第四位信息,代碼如下:

          var imageData = ctx.createImageData(100,100)
          imageData.data[0] = 255
          imageData.data[1] = 0
          imageData.data[2] = 0
          imageData.data[3] = 255

          3.1、putImageData

          使用語法:

          putImageData( imgData , x , y , dirtyX , dirtyY , dirtyWidth ,dirtyHeight );

          參數及意義:

          參數

          描述

          imgData

          規定要放回畫布的 ImageData 對象。

          x

          ImageData 對象左上角的 x 坐標,以像素計。

          y

          ImageData 對象左上角的 y 坐標,以像素計。

          dirtyX

          可選。水平值(x),以像素計,在畫布上放置圖像的位置。

          dirtyY

          可選。水平值(y),以像素計,在畫布上放置圖像的位置。

          dirtyWidth

          可選。在畫布上繪制圖像所使用的寬度。

          dirtyHeight

          可選。在畫布上繪制圖像所使用的高度。

          通過 getImageData 復制的指定矩形像素數據,編輯之后,通過 putImageData 方法將圖像數據放回畫布上。

          eg:添加濾鏡效果:上述兔子是白色的變換成紅色兔子,這時需要把綠色和藍色都設置成0即可,代碼如下:

          在越來越多用到HTML5,用HTML做的頁面很炫,有些功能也很容易實現了。比如HTML5實現視頻音頻播放。

          HTML5 將成為 HTML、XHTML 以及 HTML DOM 的新標準。

          HTML5的新特性:

          • 用于繪畫的 canvas 元素

          • 用于媒介回放的 video 和 audio 元素

          • 對本地離線存儲的更好的支持

          • 新的特殊內容元素,比如 article、footer、header、nav、section

          • 新的表單控件,比如 calendar、date、time、email、url、search

          瀏覽器支持

          最新版本的 Safari、Chrome、Firefox 以及 Opera 支持某些 HTML5 特性。Internet Explorer 9 將支持某些 HTML5 特性。

          視頻格式

          當前,video 元素支持三種視頻格式:

          格式IEFirefoxOperaChromeSafari
          OggNo3.5+10.5+5.0+No
          MPEG 49.0+NoNo5.0+3.0+
          WebMNo4.0+10.6+6.0+No

          Ogg = 帶有 Theora 視頻編碼和 Vorbis 音頻編碼的 Ogg 文件

          MPEG4 = 帶有 H.264 視頻編碼和 AAC 音頻編碼的 MPEG 4 文件

          WebM = 帶有 VP8 視頻編碼和 Vorbis 音頻編碼的 WebM 文件


          實例源碼:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="UTF-8">

          <title>視頻播放</title>

          </head>

          <body>

          <div style="text-align:center;">

          <button onclick="playPause()">播放/暫停</button>

          <button onclick="makeBig()">大</button>

          <button onclick="makeNormal()">中</button>

          <button onclick="makeSmall()">小</button>

          <br />

          <video id="video1" width="420" style="margin-top:15px;">

          <source src="/項目名字/upload/Video_1509549323159.mp4" type="video/mp4" />

          </video>

          </div>

          <script type="text/javascript">

          var myVideo=document.getElementById("video1");

          //播放暫停

          function playPause()

          {

          if (myVideo.paused)

          myVideo.play();

          else

          myVideo.pause();

          }

          //視頻放大

          function makeBig()

          {

          myVideo.width=560;

          }

          //視頻中等

          function makeSmall()

          {

          myVideo.width=320;

          }

          //視頻縮小

          function makeNormal()

          {

          myVideo.width=420;

          }

          </script>

          </body>

          </html>

          實現的效果:

          PS:注意一下那個src地址:一定得是在項目里,如果是電腦里的絕對路徑是不行的。

          新手上路,希望大家多多支持,多多關注,希望能夠在頭條的路上越走越遠。


          主站蜘蛛池模板: 亚洲国产情侣一区二区三区| 国产成人一区二区三区免费视频| 国模私拍福利一区二区| 欧美av色香蕉一区二区蜜桃小说 | 亚洲AV无码一区二区三区网址| 久久精品国产亚洲一区二区三区 | 日韩AV在线不卡一区二区三区| 亚洲国产精品综合一区在线 | 91午夜精品亚洲一区二区三区| 中文字幕亚洲一区二区三区| 免费人妻精品一区二区三区| 怡红院一区二区三区| 亚洲日韩国产一区二区三区在线 | 蜜桃视频一区二区| 国精产品999一区二区三区有限| 亚洲熟妇av一区| 一区国产传媒国产精品| 日韩精品中文字幕无码一区| 日本不卡一区二区视频a| 亚洲男人的天堂一区二区| 日韩视频在线观看一区二区| 国产一区二区在线|播放| 一区二区三区在线播放| 亚洲美女高清一区二区三区| 精品一区二区三区免费视频| 日本精品高清一区二区| 无码aⅴ精品一区二区三区浪潮 | 精品一区二区三区3d动漫| 动漫精品第一区二区三区| 亚洲国产成人精品久久久国产成人一区二区三区综 | 天堂Aⅴ无码一区二区三区| 久久国产一区二区| 2021国产精品一区二区在线| bt7086福利一区国产| 国产裸体舞一区二区三区| 国产高清一区二区三区四区| 美女啪啪一区二区三区| 亚洲精品伦理熟女国产一区二区| 无码av中文一区二区三区桃花岛| 精品一区二区三区免费毛片| 久久亚洲综合色一区二区三区|