国产精品亚洲lv粉色-狼人青草久久网伊人-一区二区精品视频在线观看-国产靠逼视频-日本天天射-懂色av懂色av粉嫩av分享吧-国产特级黄色片-亚洲九九九九-操操操.com-国产激情高中生呻吟视频-最近中文字幕日本-国内精品久久久久久99-成年人在线观看视频-免费在线观看视频a-久久午夜国产-天天谢天天干-一区在线播放

高級彈幕發(fā)射器插件

  • 1942
  • 0
  • 0
高級彈幕發(fā)射器插件- 素材8

下載包里面的demo包含了大部分的API演示,基本使用方法為 添加普通彈幕 -》 下拉框選擇”控制項-》 啟動 ?。?!

插件描述:本插件是一個彈幕發(fā)生器,利用HTML5 canvas + ES6來實現(xiàn)普通彈幕和高級彈幕發(fā)送。 也有通過babel轉(zhuǎn)成的ES5版,支持IE10+;版本從3.0.0開始,從重優(yōu)化了性能,豐富了功能,而且本插件是個開源項目, 本人會不斷更新新的功能。相比其他同類型插件來講,本插件適用范圍更廣,不光適用于視頻、直播,也適用于其他的一些場景。 插件繼承了相關(guān)模塊工具的引用接口,也可以和其他視頻播放插件(如video.js等)進行有效結(jié)合, 支持高級彈幕和全局彈幕的控制和過濾,在默認(rèn)配置下,在移動設(shè)備上也有良好的性
DanMuer

本插件是一個彈幕發(fā)生器,利用HTML5 canvas + ES6來實現(xiàn)普通彈幕和高級彈幕發(fā)送。目前版本將從3.0.0開始。

相較于前兩版來說,第三版性能更好,而且實現(xiàn)了播放器模塊和彈幕模塊的解耦,也就是說相比第二版,第三版 可以適用但不限于播放器,可用性更高,而且實現(xiàn)了高級彈幕的發(fā)送,未來將慢慢補齊更多的功能和代碼重構(gòu),希望大家遇到什么BUG或者是某些合理的需求再此貼留言。

兼容性

所有現(xiàn)代瀏覽器,IE10+ (IE除外),后面將會考慮寫個IE用的兼容ES5版本

使用方法

1. 先準(zhǔn)備一個容器元素:

  1. <div id="danmuer-wrapper"></div>
復(fù)制代碼

2. 進行調(diào)用

  1. var wrapper = document.getElementById("danmuer-wrapper"),options = {};
  2. var DMer = DanMuer( wrapper, options); //調(diào)用插件,wrapper為包裹元素,options為初始設(shè)定
  3. DMer.inputData({
  4.    "text" : "我是彈幕",
  5.    "type" : "slide"
  6. }); //插入一條彈幕,如果想同時插入多條彈幕可以用循環(huán)輸入
  7. DMer.start(); //運行
復(fù)制代碼
調(diào)用方法

調(diào)用接口非常的簡單,通過調(diào)用一個函數(shù)接口。本插件還集成了requireJS和nodeJS的接口,如果需要也可以直接當(dāng)成一個模塊引用。

  1. var DMer = DanMuer( wrapper, options);
  2. wrapper(必選 HTMLnode):容器元素
  3. options(可選 Object):配置選項
復(fù)制代碼
options提供的參數(shù):
  1. auto : ( Boolean ) 是否自動運行,默認(rèn)false
  2. callback :( Function ) 鼠標(biāo)右鍵觸發(fā)后的回調(diào)函數(shù),將返回一個被捕獲的字幕對象
  3. direction : ( String ) 彈幕顯示的方向,默認(rèn)為從右到左,擁有兩個值,"ltor"左到右和"rtol"右到左
  4. duration : ( Number ) 滾動型彈幕的持續(xù)時間(ms),默認(rèn)為 9000
  5. enableEvent :( Boolean ) 是否開啟鼠標(biāo)右鍵的點擊事件,默認(rèn)false
  6. enable :( Boolean ) 是否啟用高級彈幕,默認(rèn)true
  7. leftTime :( Number ) 靜止型彈幕默認(rèn)的生存時間(ms),默認(rèn)為 2000
  8. fontSize :( String ) 普通彈幕全局的字體大小,默認(rèn)為 “26px”
  9. fontWeight :( String ) 普通彈幕全局的字體粗細(xì),默認(rèn)為 “normal”
  10. fontFamily :( String ) 普通彈幕全局的字體,默認(rèn)為 “微軟雅黑”
  11. fontStyle :( String ) 普通彈幕全局的文本樣式,默認(rèn)為 “normal”
  12. fontColor :( String ) 普通彈幕全局的文本填充顏色,默認(rèn)為 “#FFFFFF”
  13. opacity :( Number ) 透明度,默認(rèn)為 1
  14. space :( Number ) 普通彈幕之間的行距,默認(rèn)為 10
  15. type : ( String ) 普通彈幕調(diào)用Tween類時選擇的曲線類型,默認(rèn)是“quad”(二次方),目前還有"cubic","quart","quint"三種
  16. timing : ( String ) Tween時間曲線函數(shù)類型,默認(rèn)是"linear",還有"easeIn","easeOut","easeInOut"
復(fù)制代碼

數(shù)據(jù)格式

由于高級彈幕和普通彈幕是在兩個不同的canvas繪制的,所以全文提到的“全局”僅僅適用在普通彈幕上

1. 普通彈幕

  1. {
  2.     "text" : "string", //必須,文本內(nèi)容
  3.     "type" : "string", //必須,彈幕類型,包括("slide","top","bottom")三種類型的彈幕,其中后兩種為靜止型彈幕
  4.     "change" : boolean, //可選,表示本條彈幕有不同于全局樣式的設(shè)定,這里做了限制,只有顏色和fontsize可以修改
  5.     "fontSize" :"string", //可選,必須change為true的時候才可以使用
  6.     "color" : "string" //可選,必須change為true的時候才可以使用
  7. }
復(fù)制代碼

2. 高級彈幕

  1. {
  2.     "type" : "", //必須,高級彈幕的類型,目前有四種類型("text","rect","polygon","circle")
  3.     "currentIndex" : 0,//必須,表示目前彈幕正在運行的步驟,默認(rèn)為0就行,不用更改此值
  4.     "hide" : false,//必須,默認(rèn)為false,不用更改此值,表示是否顯示該彈幕
  5.     "steps" : [] //必須,表示該彈幕一共有幾個步驟,用于排隊動畫的實現(xiàn),與currentIndex配合使用
  6. }
復(fù)制代碼

高級彈幕中steps里面的值比較復(fù)雜,根據(jù)type的不同,參數(shù)也會有所差異,下面我們先介紹共用的參數(shù)

  1. {
  2.     //以下參數(shù)除顏色和type外都為Number類型,不帶單位
  3.     startX : 0, //起點x
  4.     startY : 0, //起點y
  5.     endX : 0, //終點x
  6.     endY : 0, //終點y
  7.     scaleStartX : 1, //起始x軸縮放倍數(shù)
  8.     scaleStartY : 1, //起始y軸縮放倍數(shù)
  9.     scaleEndX : 1, //終點x軸縮放倍數(shù)
  10.     scaleEndY : 1, //終點y軸縮放倍數(shù)
  11.     rotateStart : 0, //起始旋轉(zhuǎn)角度
  12.     rotateEnd : 0, //終點旋轉(zhuǎn)角度
  13.     skewStartX : 0, //起始x斜切角度
  14.     skewStartY : 0, //起始y斜切角度
  15.         skewEndX : 0, //終點x斜切角度
  16.     skewEndY : 0, //終點y斜切角度
  17.     duration : 3000, //生存時間ms
  18.     opacityStart : 1, //初始透明度
  19.         opacityEnd : 1, //終點透明度
  20.     fillStyle : "#66ccff", //填充顏色
  21.     strokeStyle : "#cccccc", //描邊顏色
  22.     pastTime : 0, //不用設(shè)置,默認(rèn)為0
  23.     type : "quad", //Tween時間曲線的類型,默認(rèn)為"quad(二次方)",目前還有"cubic","quart","quint"三種
  24.     timing : "linear", //動畫時間曲線,默認(rèn)為linear,還有“easeIn”,“easeOut”,“easeInOut”
  25. }
復(fù)制代碼

下面是文本類型的特有屬性:

  1. {
  2.     fontStyle:"",
  3.     fontWeight:"",
  4.     fontSize:"",
  5.     fontFamily:"",
  6.     text:""
  7. }
復(fù)制代碼

下面是方形的特有屬性:

  1. {
  2.     width : 100,
  3.     height : 100
  4. }
復(fù)制代碼

下面是多邊形的特有屬性:

//多邊形比較特殊,相比上面的形狀來說,多邊形不用填寫startX,startY等,計算是通過points和distX


,distY的值進行計算的

  1. {
  2.     points : [{x:0,y:0},{x:0,y:0}],
  3.     distX : 0,
  4.     distY : 0
  5. }
復(fù)制代碼

下面是圓形的特有屬性:

//角度什么的暫時沒寫,畫出來的都是整圓

  1. {
  2.     radius : 0
  3. }
復(fù)制代碼
API

插件只選擇性的暴露了一些接口,如果想了解更多,請去翻閱源碼

    start() :啟動插件,與上面options中的auto對應(yīng),如果初始化沒有設(shè)置auto,可以通過start來啟動

    stop() :停止運行,與start()對應(yīng)的功能相反方法

    pause() :暫停運行,此時canvas上彈幕并不會被清除

    run() :繼續(xù)運行,與上面pause()對應(yīng)

    changeStyle(options) :修改全局文本樣式,包括字體大小,樣式,family,weight,color和opacity,與options的相關(guān)屬性對應(yīng),參數(shù)類型為Object

    addGradient(type,options) :將全局顏色變?yōu)闈u變顏色;type包括linear和radius兩種,options為一個對象,對象里包含(startX,startY,endX,endY,colorStops)五個參數(shù),前兩個參數(shù)表示漸變的起點坐標(biāo),接下來的兩個參數(shù)表示漸變的終點坐標(biāo),最后一個參數(shù)表示colorStop,為一個數(shù)組,元素格式為

    {

    "point" : 0, //斷點

    "color" : this.globalColor //對應(yīng)顏色

    }

    setSize(width,height) :更改canvas大小,width和height都是Number類型

    getSeize() :獲取當(dāng)前的canvas大小,返回一個對象

    inputData(obj) :添加一個普通彈幕

    inputEffect(obj) :添加一個高級彈幕

    clear() :刪除所有已添加的彈幕

    reset(index) :重新從index開始發(fā)送彈幕

    addFilter(type,value) :添加一條過濾規(guī)則

    removeFilter(tyoe,value) : 刪除一條過濾規(guī)則

    disableEffect() :禁用高級彈幕

    enableEffect() :啟用高級彈幕

    getFPS() :獲取FPS

    timing(timing,type) : 改變普通彈幕的動畫時間曲線,timing和type的值請參看上面的timing和type

    direction(direc) : 改變普通彈幕的方向,目前有“l(fā)tor”和“rtol”,默認(rèn)為“rtol”(從右往左)

其他一些小技巧

在播放視頻時,如果需要使用該插件,而且需要在對應(yīng)的時間顯示對應(yīng)的彈幕,因為第三版相對第二版來講已經(jīng)將判別功能移到了插件外部,需要用戶自己判斷并添加,所以最好先對彈幕集合進行排序,下面給個完整的操作示例:

  1. //首先隨機生成一個彈幕集合,彈幕顯示的時間隨機生成,假設(shè)視頻總時長為230秒
  2. var save = [];
  3. for( var i = 0; i < 10000; i++ ){
  4.     save.push({
  5.         "text" : text,
  6.     "time" : (Math.random() * 228 + 2 ) >> 0, //這里是隨機生成的時間
  7.     "type" : types[idx]
  8.     });
  9. }
  10. //對于需要頻繁操作的對象來說,為了保證性能的穩(wěn)定我們需要盡可能的優(yōu)化操作,排序也是為了后面的優(yōu)化做準(zhǔn)備
  11. save.sort(function(a,b){
  12.     return a.time - b.time; //按時間從小到大排列
  13. });
  14. //接下來是當(dāng)視頻播放進行中的時候進行遍歷
  15. var start = 0, //循環(huán)的初始下標(biāo),簡化循環(huán)用
  16.     doing = false; //保證功能的執(zhí)行順序
  17. video.ontimeupdate = function(e){
  18.     var time = this.currentTime >> 0;
  19.     if(doing) return false; //保證一次調(diào)用只運行一次循環(huán)
  20.     doing = true;
  21.     for( var i = start,obj; obj = save[i++]; ){
  22.     if( obj.time == time ){ //當(dāng)處于相同時間點的時候
  23.     DMer.inputData(obj);//插入數(shù)據(jù)
  24.     start = i; //更改下標(biāo)
  25.     }
  26.     if( obj.time > time ){
  27.     break; //這里就體現(xiàn)上面排序的好處了,因為我們已經(jīng)可以確定后面彈幕的時間都會比現(xiàn)在的時間大,所以可以直接略過,節(jié)省資源
  28.     }
  29.     }
  30.     doing = false;  
  31. };
復(fù)制代碼

對于直播類型的來說就更簡單,在取到數(shù)據(jù)后直接插入數(shù)據(jù)即可,相比上面這種,直播類型的更容易操作。

由于插件很多職責(zé)外的功能都分離出去了,所以使用起來相對比較自由,因為本插件也不僅僅只限于視頻播放,只要有容器可以放置即可。

對于插件中某些接口的調(diào)用,如漸變,在移動設(shè)備上是非常吃性能的,所以在使用的時候請盡量審慎。

對于高級彈幕,由于與普通彈幕是分處于兩個不同的canvas,所以針對普通彈幕的操作是不會影響到高級彈幕的。當(dāng)然,分開后做針對操作也更容易點。

至于高級彈幕的自動跟隨實現(xiàn)起來也比較容易,直接將上一步的結(jié)果填寫到對應(yīng)的下一步的起始位置即可,如:

  1. {
  2.     //第一步
  3.     startX : 0,
  4.     endX : 100
  5. }
  6. //第二步
  7. {
  8.     startX : 100,
  9.     endX : ???
  10. }
  11. //這樣便可以實現(xiàn)跟隨
復(fù)制代碼



高級彈幕發(fā)射器插件
  • NaiHe 剛剛下載了一個素材
  • 豐豐富富 剛剛下載了一個素材
  • 月亮是我啃彎的o 剛剛下載了一個素材
  • 領(lǐng)帆網(wǎng)絡(luò)李巖15357913151 剛剛下載了一個素材
  • 李迎波 剛剛下載了一個素材
  • qqvWK7 剛剛下載了一個素材
  • 沒找好下家還不知道叫啥 剛剛下載了一個素材
  • 晨暉 剛剛下載了一個素材
  • 紫冰之蕭 剛剛下載了一個素材
  • 保持清醒! 剛剛下載了一個素材
  • 光明使者 剛剛下載了一個素材
  • 04388 剛剛下載了一個素材
  • 你還會回來吧 剛剛下載了一個素材
  • R5450 剛剛下載了一個素材
  • MM4649 剛剛下載了一個素材
分享者:
分享者頭像
小編
熱門素材推薦
HTML素材網(wǎng),HTML5模板,網(wǎng)頁特效 微信公眾賬號二維碼 淘寶店鋪地址二維碼
Copyright©2025  素材8  Powered by 智伙伴科技
   魯ICP備14029286號-5 魯公網(wǎng)安備37060202001967號
返回頂部返回頂部
發(fā)布主題
察哈| 新源县| 松潘县| 万源市| 滨海县| 永嘉县| 祥云县| 禹州市| 图木舒克市| 静海县| 镇远县| 安丘市| 望谟县| 紫阳县| 藁城市| 安多县| 常熟市| 茂名市| 金昌市| 东宁县| 石台县| 新蔡县| 云安县| 承德县| 华安县| 东平县| 绩溪县| 当涂县| 海阳市| 台山市| 琼中| 玛曲县| 铁岭市| 若尔盖县| 微博| 三原县| 綦江县| 陆河县| 九江市| 卓资县| 孟连|