欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

高性能彈幕效果封裝(Canvas + 原生JS)

freeflydom
2024年10月25日 10:52 本文熱度 928

前言

6000+門店使用的大屏,主機(jī)配置竟然是Android5.5 + Chrome 78,不支持es6。。。

隨隨便便一個(gè)css動(dòng)畫都可以把頁(yè)面卡成ppt。

開(kāi)發(fā)只給兩天。。。

buff疊滿,還想在頁(yè)面中做websocket,實(shí)現(xiàn)彈幕滿屏播放功能。。。


調(diào)研嘗試了一下,考慮了repaint等因素,用了css的transform:tanslate屬性,頁(yè)面只有兩個(gè)div在移動(dòng)頁(yè)面都卡,無(wú)語(yǔ)了,甚至還開(kāi)啟了gpu加速transform:tanslateZ,一樣卡成ppt,真的是delay no more了

無(wú)奈之下,嘗試了自己最不熟悉的Canvas,沒(méi)想到竟然如此絲滑,把元素調(diào)成100個(gè)也絲毫不影響性能。

 

大家逛街時(shí)估計(jì)都見(jiàn)過(guò)吧哈哈哈


核心優(yōu)勢(shì)

Canvas繪圖

批量渲染:可以在一次繪制循環(huán)中處理所有彈幕,減少瀏覽器重繪次數(shù)。

內(nèi)存效率:不需要為每個(gè)彈幕創(chuàng)建DOM元素,降低內(nèi)存使用。

靈活性:可以輕松實(shí)現(xiàn)復(fù)雜的視覺(jué)效果和碰撞檢測(cè)。

requestAnimationFrame

function animate() {

    // 更新彈幕位置

    updateBarrages();

    // 渲染彈幕

    renderBarrages();

    // 循環(huán)調(diào)用

    requestAnimationFrame(animate);

}


requestAnimationFrame(animate);

與setTimeout或setInterval相比,requestAnimationFrame有以下優(yōu)勢(shì):


與顯示器刷新率同步,通常是60fps,減少丟幀。

在標(biāo)簽頁(yè)不可見(jiàn)時(shí)自動(dòng)暫停,節(jié)省資源。

允許瀏覽器優(yōu)化并合并多個(gè)動(dòng)畫操作,提高性能。


隊(duì)列虛擬列表:突破性能瓶頸

為了處理大量彈幕,實(shí)現(xiàn)了一個(gè)隊(duì)列虛擬列表:

class CanvasBarrage {

    // ...其他代碼


    handleBarrageRenderList() {

        // 移除已經(jīng)離開(kāi)屏幕的彈幕

        this.barrageList = this.barrageList.filter(item => !item.isExit);


        // 添加新的彈幕到渲染列表

        let addList = this.handleBarrageOriginList(this.barrageOriginList);

        addList = this.handleBarragePosition(addList);

        this.barrageList = this.barrageList.concat(addList);


        this.barrageCleanCount = 0;

    }

}


自適應(yīng)

支持px到vw的轉(zhuǎn)換,使彈幕在不同屏幕尺寸下都能正常顯示。


使用介紹

配置參數(shù)

以下是CanvasBarrage類的主要配置參數(shù):

參數(shù)名類型默認(rèn)值描述
idstringnull容器元素的選擇器
barrageListIBarrageItem[][]初始彈幕列表
barrageRownumber5彈幕行數(shù)
barrageSpacenumber50彈幕間隔
toVwbooleanfalse是否轉(zhuǎn)換為vw單位
basePxnumberclientWidth基準(zhǔn)像素值
renderSizenumber50渲染size
fontSizenumber20字體大小
fontFamilystring'Arial'字體族
isRandomFontColorbooleanfalse是否使用隨機(jī)字體顏色
fontColorstring'black'字體顏色
barrageSpeednumber1彈幕速度
renderOverLimitnumber20渲染超出限制數(shù)量
maxLimitnumber200最大渲染數(shù)量


使用方法

const barrageSystem = new CanvasBarrage({

  id: '#video-container',

  barrageList: initialBarrages,

  barrageRow: 10,

  fontSize: 24,

  isRandomFontColor: true

});


barrageSystem.drawBarrage();


// 添加新彈幕

barrageSystem.addBarrage([{ value: '新彈幕內(nèi)容' }]);

?

效果

因?yàn)橐瞥薝I,給大家自定義化,所以效果是最原始樣式


源碼

記得點(diǎn)一個(gè)star

Github鏈接


轉(zhuǎn)自https://juejin.cn/post/7428247498861396022



該文章在 2024/10/25 10:52:25 編輯過(guò)
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved