狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

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

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

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

前言

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

隨隨便便一個css動畫都可以把頁面卡成ppt。

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

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


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

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

 

大家逛街時估計都見過吧哈哈哈


核心優(yōu)勢

Canvas繪圖

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

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

靈活性:可以輕松實現(xiàn)復雜的視覺效果和碰撞檢測。

requestAnimationFrame

function animate() {

    // 更新彈幕位置

    updateBarrages();

    // 渲染彈幕

    renderBarrages();

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

    requestAnimationFrame(animate);

}


requestAnimationFrame(animate);

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


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

在標簽頁不可見時自動暫停,節(jié)省資源。

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


隊列虛擬列表:突破性能瓶頸

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

class CanvasBarrage {

    // ...其他代碼


    handleBarrageRenderList() {

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

        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;

    }

}


自適應

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


使用介紹

配置參數(shù)

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

參數(shù)名類型默認值描述
idstringnull容器元素的選擇器
barrageListIBarrageItem[][]初始彈幕列表
barrageRownumber5彈幕行數(shù)
barrageSpacenumber50彈幕間隔
toVwbooleanfalse是否轉(zhuǎn)換為vw單位
basePxnumberclientWidth基準像素值
renderSizenumber50渲染size
fontSizenumber20字體大小
fontFamilystring'Arial'字體族
isRandomFontColorbooleanfalse是否使用隨機字體顏色
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)容' }]);

?

效果

因為移除了UI,給大家自定義化,所以效果是最原始樣式


源碼

記得點一個star

Github鏈接


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



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