久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

HTML使用canvas實現彈幕功能

最近在做大作業的時候需要做一個彈幕播放器,今天小編給大家分享基于HTML使用canvas實現彈幕功能,需要的的朋友參考下吧

簡介

 最近在做大作業的時候需要做一個彈幕播放器。借鑒了一下別人的源碼自己重新實現了一個,演示如下

HTML使用canvas實現彈幕功能

主要的功能有

發送彈幕
設置彈幕的顏色,速度和類型
顯示彈幕
 

已知缺陷:

不能全屏

canvas沒有做自適應
沒有自定義播放器控件
沒有根據播放時間顯示相應的彈幕
彈幕不能實現懸停
已知的缺陷以后會進行改進。網上能找到的彈幕播放器的源碼一般只做了滾動的彈幕而沒有做靜止的彈幕,這里我特意加上了靜止彈幕的實現。

Canvas繪制文字以及文字滾動效果

 整個播放器的核心就是繪制文字以及做文字滾動的動畫,canvas中對于文字并沒有很好的動畫支持,只能通過自己實現,實現的思路就是不斷的清屏然后重寫文字,當清屏重寫的頻率達到24fps的時候就是流暢的動畫了。

先在HTML文件中添加視頻video標簽和畫布canvas標簽

<div id="barrageplayer">
    <canvas id="cv_video" width="900px" height="450px"></canvas>
    <video id="v_video" src="test.MP4" controls type="video/mp4"></video>
</div>

把canvas標簽的位置樣式設置為position:absolute然后視頻和畫布就重疊在一起,看起來就是一個彈幕播放器了。然后為畫布添加彈幕相關的內容,首先獲取畫布的相關信息和設置畫布的字體大小和字體樣式

var c=document.getElementById("cv_video");
//獲取畫布大小
var c_height=c.height;
var c_width=c.width;
//獲取畫布
ctx=c.getContext("2d");
//設置字體樣式
ctx.font="25px DengXian";
畫布信息已經獲取和設置,巧婦難為無米之炊,接著我們就要構造彈幕對象,使用的構造模式是動態原型模式
//彈幕對象
function Barrage(content,color,type,speed){
    this.content=content;
    this.color=color;
    this.type=type;
    this.speed=speed;
    if(this.type=="default"){
        this.height=parseInt(Math.random()*c_height)+10;
    }else if (this.type=="static top"){
        this.height=parseInt((c_height/2)-Math.random()*c_height/2)+10;
    }else if (this.type=="static bottom"){
        this.height=parseInt((c_height/2)+Math.random()*c_height/2)+10;
    }
    if(typeof this.move!="function"){
        Barrage.prototype.move=function(){
            if(this.type=="default"){
                this.left=this.left-this.speed;
            }
        }
    }
}

構造的彈幕對象初始化了各種參數,包括內容,顏色,運動類型和速度,定義了move()方法來控制彈幕的緩動,每出發一次move()方法向左滾動一個單位speed的像素。
彈幕對象構造完成之后就進入到主題,動畫的制作,直接上代碼

//循環擦寫畫布實現動畫效果
setInterval(function(){
    ctx.clearRect(0,0,c_width,c_height);
    ctx.save();
    for(var i=0;i<msgs.length;i++){
        if(msgs[i]!=null){
            if(msgs[i].type=="default"){
                handleDefault(msgs[i]);
            }else{
                handleStatic(msgs[i]);
           }
        }
    }
},20)

每20ms執行一次擦寫,ctx.clearRect(0,0,c_width,c_height);是將整張當前的畫布清除,然后使用ctx.save()將當前的畫布保存,接著遍歷彈幕列表(msgs是彈幕列表,當每發送一條彈幕都會將該彈幕實例添加到列表中),然后按照默認樣式的彈幕還是靜止樣式的彈幕分別處理。如果是默認樣式的彈幕將會按照以下的方法處理

//處理默認彈幕樣式
function handleDefault(barrage){
    if(barrage.left==undefined||barrage.left==null){
        barrage.left=c.width;
    }else{
         if(barrage.left<-200){
            barrage=null;
        }else{
            barrage.move()
            ctx.fillStyle=barrage.color;
            ctx.fillText(barrage.content,barrage.left,barrage.height)
            ctx.restore();
        }
    }  
}

 

首先如果彈幕實例沒有設置left屬性則將畫布的寬度賦予它,如果彈幕實例已經退出畫布則將其置null以節省內存,否則的話就調用彈幕實例的move()方法改變left屬性的值,然后設置文字的顏色,一級寫入新的文字,恢復畫布。這樣就完成了一幀動畫。

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章給大家詳細介紹了HTML頁面跳轉及參數傳遞問題,需要的朋友參考下吧
本文給大家分享一段代碼關于雙11搶券,寫一個自動打開頁面的html,僅僅是設定時間打開搶券的頁面,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
本文通過實例代碼給大家介紹了HTML 表單組件的知識,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
最近公司安排我做一個ccfa的小東東,其中有一項需求就是做一個網頁播放攝像頭的實時監控功能,對于我這個小菜鳥來說真是難到了,下面小編給大家帶來了HTML實現海康攝像頭實時監控
html頁面的查找功能主要是實現在查找框內輸入字符,下面通過本文給大家分享html頁面的查找功能,需要的朋友參考下吧
這篇文章主要介紹了HTML頁面自動清理js、css文件的緩存(自動添加版本號),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
主站蜘蛛池模板: 九九热在线视频免费观看 | 亚洲欧洲成人 | 国产91在线播放 | 嫩草研究影院 | 精品日韩一区二区 | 爱爱视频在线观看 | 91麻豆精品国产91久久久资源速度 | 亚洲 成人 在线 | 国产精品视频网 | 精品国产乱码久久久久久88av | 自拍视频一区二区三区 | 99国内精品久久久久久久 | 久久久久国产精品 | 久久久久久久久久久久久久国产 | 亚洲美女天堂网 | 九色视频网 | 男女视频91 | 一二三在线视频 | 欧美精品在线一区 | 欧美成人激情视频 | 日韩在线第一 | 一级毛片免费看 | 色久电影 | 国产农村一级国产农村 | av黄色在线播放 | 欧美日韩亚洲在线 | 久久国产精品99久久久大便 | 国产精品久久毛片av大全日韩 | 欧美精品久久久 | 欧美日韩高清免费 | 午夜视频免费 | 国产精品视频网 | 久久精品二区亚洲w码 | 美女在线视频一区二区三区 | 久久精品一区 | 精品一区二区视频 | 一区天堂| 中文字幕亚洲精品 | 丁香综合 | 九九亚洲| 综合二区 |