整合營銷服務商

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

          免費咨詢熱線:

          巧用CSS3-Animation動畫,實現小程序彈幕效果

          近接到公司小程序項目首頁迭代改版的工作,涉及到文章圖文布局改版。主要是精選文章,在首頁推廣入口增加評論彈幕效果,后端彈幕數據是隨文章列表接口一次性返回給前端,由前端來處理彈幕數據及相關彈幕交互效果。

          隨后,簡單分析了一下后端接口的數據結構,以及查詢了一些傳統web端彈幕的js實現方式。

          鑒于我們當前業務的后端彈幕數據非動態持續發送,而是固定的評論條目,前端處理也僅僅是把文章評論渲染成彈幕并循環滾動,于是我采用的解決方案是通過css3的Animation動畫屬性來實現。

          下面是拆分出來的部分代碼demo實現效果的動畫演示效果。



          左邊的視頻演示:有序彈幕(固定軌道式,彈幕數據劃分為三條固定軌道進行滾動顯示)

          右邊的視頻演示:無序彈幕(每條彈幕的出現位置隨機性);

          如果視頻無法播放的話,可以查看下方對比圖:




          當前代碼邏輯比較適合一些展示型的前端交互效果,比如:資訊類欄目、社交屬性圖文欄目、推廣類廣告位等。

          # 無序彈幕 wxml #

          <view class='dmGroup' wx:for="{{ dmData }}" wx:key="{{ item.id }}" style="top:{{ item.top }}%; animation: dmAnimation {{item.time}}s linear {{ index*3 }}s infinite; ">
           <view class='dmItem'>
           <view class='dm'>
           <view class='avatarBox'>
           <image src='{{ item.sex == 0 ? avatarBoy : avatarGirl }}' class='avatar' mode='aspectFit'></image>
           <image src='{{ item.sex == 0 ? iconBoy : iconGirl }}' class='sex' mode='aspectFit'></image>
           </view>
           <text class='content'>{{ item.content }}</text>
           <image src='{{ iconGood }}' class='icon good' mode='aspectFill'></image>
           <text>{{ item.zanNumber }}</text>
           </view>
           </view>
          </view>
          


          # 無序彈幕 wxss #

          @keyframes dmAnimation{
           from{ left: 100%; }
           to{ left: -100%; }
          }
          


          # 有序彈幕(軌道式) wxml #

          <!-- top -->
          <view class='dmGroup top' style="animation: dmAnimation2 35s linear infinite; ">
           <view class='dmItem' wx:for="{{ dmData }}" wx:if="{{ index < 6 }}" wx:key="{{ item.id }}">
           <view class='dm'>
           <view class='avatarBox'>
           <image src='{{ item.sex == 0 ? avatarBoy : avatarGirl }}' class='avatar' mode='aspectFit'></image>
           <image src='{{ item.sex == 0 ? iconBoy : iconGirl }}' class='sex' mode='aspectFit'></image>
           </view>
           <text class='content'>{{ item.content }}</text>
           <image src='{{ iconGood }}' class='icon good' mode='aspectFill'></image>
           <text>{{ item.zanNumber }}</text>
           </view>
           </view>
          </view>
          <!-- mid -->
          <view class='dmGroup mid' style="animation: dmAnimation2 30s linear 1s infinite; ">
           <view class='dmItem' wx:for="{{ dmData }}" wx:if="{{ index > 5 && index < 10 }}" wx:key="{{ item.id }}">
           <view class='dm'>
           <view class='avatarBox'>
           <image src='{{ item.sex == 0 ? avatarBoy : avatarGirl }}' class='avatar' mode='aspectFit'></image>
           <image src='{{ item.sex == 0 ? iconBoy : iconGirl }}' class='sex' mode='aspectFit'></image>
           </view>
           <text class='content'>{{ item.content }}</text>
           <image src='{{ iconGood }}' class='icon good' mode='aspectFill'></image>
           <text>{{ item.zanNumber }}</text>
           </view>
           </view>
          </view>
          <!-- btm -->
          <view class='dmGroup btm' style="animation: dmAnimation2 45s linear infinite; ">
           <view class='dmItem' wx:for="{{ dmData }}" wx:if="{{ index > 9 }}" wx:key="{{ item.id }}">
           <view class='dm'>
           <view class='avatarBox'>
           <image src='{{ item.sex == 0 ? avatarBoy : avatarGirl }}' class='avatar' mode='aspectFit'></image>
           <image src='{{ item.sex == 0 ? iconBoy : iconGirl }}' class='sex' mode='aspectFit'></image>
           </view>
           <text class='content'>{{ item.content }}</text>
           <image src='{{ iconGood }}' class='icon good' mode='aspectFill'></image>
           <text>{{ item.zanNumber }}</text>
           </view>
           </view>
          </view>
          


          # 有序彈幕 wxss #

          @keyframes dmAnimation2{ 
           0% { transform: translateX(0); } 
           100% { transform: translateX(-130%); } 
          }
          


          # 查看線上項目彈幕效果 #


          # 詳細代碼片段及詳解,請私信喲#

          天給小伙伴們推薦2款超優質的Vue自定義彈幕制作組件Vue-Barrage

          1、VueBarrage

          vue-barrage 基于vue2.x構建的彈幕組件。

          功能特性

          • 支持彈幕方向:滑動、頂部
          • 支持暫停/開始全局彈幕和彈幕劃過暫停;
          • 彈幕動畫采用transform3d并開啟css3硬件加速,彈幕基于按需加載和隊列復用的模式;

          快速使用

          首先,復制 components 目錄下 VBarrage文件夾 到自己的項目中。

          <v-barrage
            :arr="arr" // 傳入的彈幕源數組
            :isPause="isPause" // 控制是否暫停彈幕
            :percent="100" // 彈幕的屏幕占比
          </v-barrage>
          
          // 彈幕對象
          {
             content: this.sendContent, // 彈幕內容
             direction: this.direction, // 方向  default | top
             isSelf: true, // 是否是自己發的彈幕
             style: {
                color: 'red' // 彈幕顏色
             },
             isJs: false  // 是否解析html
          }

          # 示例地址
          http://null_639_5368.gitee.io/vue-barrage/
          
          # gitee倉庫
          https://gitee.com/null_639_5368/vue-barrage

          2、Vue-BaBerrage

          vue-baberrage 一款輕量級的Vue彈幕插件。

          特性

          • 易使用:只需幾行代碼,簡單配置即可使用;
          • 高性能:幾百條同屏彈幕依然能保持高性能;
          • 獨立性:彈幕數據自行可控管理;

          安裝

          $ npm i vue-baberrage -S

          使用組件

          <template>
            <div id="app">
              <vue-baberrage
                :isShow= "barrageIsShow"
                :barrageList = "barrageList"
                :loop = "barrageLoop"
              >
              </vue-baberrage>
            </div>
          </template>
          
          <script>
          import { vueBaberrage } from 'vue-baberrage'
          import { MESSAGE_TYPE } from 'vue-baberrage'
          export default {
            components: {
              vueBaberrage
            },
            data() {
              return {
                msg: 'Hello vue-baberrage',
                barrageIsShow: true,
                currentId : 0,
                barrageLoop: false,
                barrageList: []
              }
            },
            methods: {
              addToList (){
                this.barrageList.push({
                  id: ++this.currentId,
                  avatar: "./static/avatar.jpg",
                  msg: this.msg,
                  time: 5,
                  type: MESSAGE_TYPE.NORMAL
                });
              },
          	// ...
            }
          }
          </script>

          非常不錯的一款彈幕組件,讓你的頁面視頻元素瞬間提升一個檔次。

          # 文檔地址
          http://blog.chenhaotaishuaile.com/vue-baberrage/
          
          # 倉庫地址
          https://github.com/superhos/vue-baberrage

          好了,基于vue.js彈幕組件就分享到這里。希望對大家有所幫助哈!

          里云播放器SDK(ApsaraVideo for Player SDK)是阿里視頻云端到云到端服務的重要一環,除了支持點播和直播的基礎播放功能外,還深度融合視頻云業務,支持視頻的加密播放、安全下載、首屏秒開、低延時等業務場景,為用戶提供簡單、快速、安全、穩定的視頻播放服務。本文銜接上文,詳細介紹web播放器的功能及實現。

          一、基本概況及功能

          • 播放器架構

          Aliplayer Web播放器分為H5和Flash兩個,Flash播放器隨著技術的發展會逐漸被邊緣化,所以我們以后只做維護,不會更新功能了,重點會放在H5播放器上。H5播放器架構主要分四層,底層H5 Video,播放能力和H5原生Video緊密相關。第二層是基礎播放器,它不依賴于具體業務,通過URL的方式來播放。第三層是為各種業務場景準備的不同的播放器,可以很容易的擴展,相互隔離不依賴。最上面一層是適配的播放器,會根據終端類型、瀏覽器類型、播放格式和用戶指定來進行智能適配。

          • 播放器功能

          最近,我們在播放器端上也實現了截圖、國際化、變速、UI自定義、微信同層播放、自適應播放、加密播放、H5播放flv、自定義插件等功能。后續,我們還會通過插件的形式實現彈幕、廣告等功能,并會開源到github上,也會支持用戶根據自己業務需求來自定義SDK包。

          • 播放器支持視頻格式

          • 適配播放

          我們整個視頻播放的基本原則是H5優先,能用H5播放的肯定不用Flash去播放。所以在移動端,我們肯定是用H5來播放的,PC端也依照這個原則盡量使用H5。同時,我們會判斷瀏覽器類型支持哪種播放格式,比如m3u8在PC端IE11以上的瀏覽器才能播放,如果遇到IE11以下的瀏覽器,我們自動會選擇Flash播放。在視頻格式方面,假設視頻是rtmp和flv,我們會自動選擇Flash播放。另外,如果用戶自主設置useH5Prism和useFlashPrism屬性,那我們也會依照用戶的選擇。

          • 瀏覽器支持情況

          FLASH支持IE8以上,在瀏覽器上啟動允許FLASH運行即可;H5支持IE9以上,m3u8需要在IE11以上才可以運行;其他瀏覽器都也都是可以支持的。

          • 兩種播放方式

          1. source,通過url 去播放

          2. 通過點播vid+playauth去播放,第二種方式和視頻云結合比較緊密

          • 點播播放格式的選擇

          點播服務中轉碼生成的視頻格式有很多,包括m3u8、flv、mp4等。播放器有自己的一套邏輯去選擇播放格式。對于H5來說,默認播放低清版本來節省流量,如果用戶使用了切換清晰度的功能,那我們會默認打開他選擇的版本。格式方面,則默認播放mp4,用戶也可以設置qualitySort來優先播放高清的的版本。對于Flash來說,默認格式順序是m3u8、flv、mp4。

          二、功能介紹及啟用

          • 創建播放器

          1. 引用正確的JS和CSS文件

          2. 添加播放器容器 需要設置容器的id屬性,另外2.0.1之前的版本要添加prism-player類型。

          • New Aliplayer創建播放

          • 在線配置,用戶可以預先體驗下播放器的情況

          • Aliplayer-Cli創建演示例子

          用戶需要演示例子的時候,不需要寫很多代碼,通過這個命令,就可以創建例子,直接體驗AliPlayer。

          • PC端支持m3u8

          播放域名啟用允許跨域訪問

          • 訂閱和取消事件

          • 清晰度切換

          H5 1.9.9以后的版本和id+playauth播放方式才支持清晰度切換;支持記憶選擇的清晰度,當選擇的清晰度不能播放時,自動選擇下一個清晰度播放。

          • 手動切換視頻-H5

          這個功能播放器內比較常見。我們把它分成兩種情況去處理,如果是地址播放,我們通過loadByUrl來播放;如果是vid+playauth播放,我們通過replayByVidAndPlayAuth的方法來播放。

          • 手動切換視頻-flash

          地址播放方法與H5的方法一樣,vid+playauth播放則需要先銷毀播放器,再重新創建播放。

          • 不同地址格式的切換

          只能先銷毀播放器,再重新選擇正確的播放器播放。Github地址看simple demo:https://github.com/alilmq/aliplayer-simple-demo

          ![b_3_7]

          • UI自定義

          很多用戶有這個需求,所以我們的UI是可以隱藏掉的。提供了一個skinLayout的屬性,當這個屬性沒有指定值的時候,UI組件是全部顯示。如果是空數組的時候,UI組件全部不顯示。并且可以自定義組件的顯示和位置,在默認UI基礎上去裁剪,2.3.0版本以后,用戶也可以通過自定義插件的方式自定義自己的UI。

          • 截屏

          H5啟用:

          FLASH啟用:snapshot:true

          H5播放器,播放域名需添加允許跨域訪問的header

          支持訂閱snapshoted事件,獲取截屏的時間點和數據:

          支持設置截圖的大小和質量:

          支持添加文字水印:

          • 邊轉變播功能

          邊轉邊播是MTS的功能,播放器可以支持這種場景的播放。第一次觀看的時候調用MTS API啟動轉碼,邊轉碼邊播放,而且可以設置延遲播放。轉碼中使用直播播放器,轉碼完成后使用點播方式播放。

          • H5 android微信同層播放

          因為H5在android端微信打開時,會自動全屏播放,覆蓋Dom元素。

          同層播放一般有兩種業務場景,一種是點播的,視頻在某個地方播放,下面的評論、播放列表等,demo地址:https://github.com/alilmq/h5demo

          還要一種場景是直播場景,視頻需要全屏。可以通過設置x5_type:h5啟用同層播放。Demo 地址:https://github.com/alilmq/h5livedemo

          另外H5微信同層播放,有兩篇文章可以參考:

          http://player.alicdn.com/aliplayer/docs/blogs/how-to-handle-h5-same-layer.html

          http://player.alicdn.com/aliplayer/docs/blogs/how-to-handle-h5-same-layer.html

          • 國際化

          提供language屬性,用于啟用各種語言,默認為zh-cn,可選值為zh-cn or en-us。

          • 倍速播放

          提供UI的版本,只提供了0.5、1、1.5、2四種倍速播放;而setspeed方法,可以隨意設置倍速播放。這個可能會有一些限制,移動端有的瀏覽器會不支持,比如android微信。

          • 對于直播播放失敗的處理

          在播放失敗時候,會嘗試重新播放,觸發onM3u8Retry事件,事件里可以做一些提示,比如主播離開請稍等;如果幾次嘗試后還是失敗,會出發livestreamstop事件,事件里做一些直播失敗或結束的提示。


          三、其他輔助功能及工具

          我們也做了一些輔助工具,方便用戶去接入和排查問題。

          • 診斷工具

          通過錯誤碼描述的映射關系,大概能知道用戶的錯誤所在;

          通過vid知道用戶播放的是哪個視頻;

          通過uuid這個唯一標識,可以在日志系統中查到用戶的播放狀態;

          通過requestid和播放時間,可以定位到用戶的錯誤是哪次播放的錯誤和具體的播放時間。

          這里還有一個診斷的功能,可以知道用戶環境的具體信息,省去手工獲取視頻的繁瑣,可以快速診斷問題。

          地址:http://player.alicdn.com/detection.html

          • 檢測工具

          關于視頻播放失敗,我們提供了三種方式,原生H5、阿里云H5、阿里云Flash。我們把播放的日志調出來,通過日志來情況來判斷播放失敗的原因。舉個例子,如果用戶剛開始請求數據時就失敗的話,那我們會猜測存在鑒權失敗的情況;如果加載數據出錯,那可能是用戶的網絡的原因;如果是開始播放后出錯,可能就問題就出在解析或播放器不支持等方面。

          • ffmpeg查看視頻信息

          有的用戶只有畫面,沒有聲音。我們可以通過ffmpeg可以看下視頻的格式、流的情況、碼率、幀率等。

          最后,阿里云播放器的所有情況都聚合在以下的網站上:

          http://player.alicdn.com/detection.html,其中包括幫助文檔、在線配置、診斷工具、產品demo等,大家可以登錄了解詳情。


          主站蜘蛛池模板: 末成年女A∨片一区二区| 国产免费一区二区三区不卡| 亚洲啪啪综合AV一区| 日本精品一区二区在线播放| 少妇激情av一区二区| 日本成人一区二区三区| 中文字幕在线观看一区| 亚洲日本中文字幕一区二区三区 | 国产伦精品一区二区三区不卡| 精品日产一区二区三区手机| 国产午夜精品一区二区三区不卡| 精品中文字幕一区二区三区四区| 国产一区二区不卡老阿姨| 亚洲色偷精品一区二区三区| 色婷婷一区二区三区四区成人网| 日本精品一区二区三区在线观看| 果冻传媒一区二区天美传媒| 中文字幕在线观看一区| 中文字幕一区日韩在线视频 | 久久精品一区二区免费看| 不卡一区二区在线| 色老板在线视频一区二区| 国产精品一区二区av| 国产亚洲一区二区精品| 亚洲视频一区调教| 无码国产精品一区二区免费式影视 | 亲子乱av一区区三区40岁| 日本一区二区三区免费高清| 亚洲国产欧美日韩精品一区二区三区 | 国产成人精品亚洲一区| 一区二区三区在线看| 不卡无码人妻一区三区音频| 久久综合九九亚洲一区| 国产精品福利一区二区| 怡红院AV一区二区三区| 无码人妻一区二区三区免费视频| 制服中文字幕一区二区 | 久久91精品国产一区二区| 一区二区视频在线| 国产品无码一区二区三区在线| 天天爽夜夜爽人人爽一区二区|