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

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

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

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

前言

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

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

開發只給兩天。。。

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


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

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

 

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


核心優勢

Canvas繪圖

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

內存效率:不需要為每個彈幕創建DOM元素,降低內存使用。

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

requestAnimationFrame

function animate() {

    // 更新彈幕位置

    updateBarrages();

    // 渲染彈幕

    renderBarrages();

    // 循環調用

    requestAnimationFrame(animate);

}


requestAnimationFrame(animate);

與setTimeout或setInterval相比,requestAnimationFrame有以下優勢:


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

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

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


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

為了處理大量彈幕,實現了一個隊列虛擬列表:

class CanvasBarrage {

    // ...其他代碼


    handleBarrageRenderList() {

        // 移除已經離開屏幕的彈幕

        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的轉換,使彈幕在不同屏幕尺寸下都能正常顯示。


使用介紹

配置參數

以下是CanvasBarrage類的主要配置參數:

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


使用方法

const barrageSystem = new CanvasBarrage({

  id: '#video-container',

  barrageList: initialBarrages,

  barrageRow: 10,

  fontSize: 24,

  isRandomFontColor: true

});


barrageSystem.drawBarrage();


// 添加新彈幕

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

?

效果

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


源碼

記得點一個star

Github鏈接


轉自https://juejin.cn/post/7428247498861396022



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