成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

前端要怎么做B站那樣的彈幕效果?非常有趣!!!

開發 前端
當我們創建好了一個??manager??的時候就可以掛載到某個具體的節點上并渲染,實際上??manager??內部會啟動一個定時器來輪詢將內存區的彈幕來渲染出來,而輪詢的時間是交由你來控制的。

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心~

最近發現一個超級好玩的彈幕工具庫,他就是:danmu

圖片圖片

1、安裝依賴

npm install danmu

2、創建 manager

danmu核心包只暴露了一個 create 方法,用來創建一個 manager 實例

import { create } from'danmu';

// 在此處創建一個 manager 實例,如果不傳遞則會使用默認的配置
const manager = create({
  trackHeight: '20%',
  plugin: {
    $createNode(danmaku) {
      danmaku.node.textContent = danmaku.data;
    },

    willRender(ref) {
      console.log(ref.type); // 即將要渲染的彈幕類型
      console.log(ref.danmaku); // 即將要渲染的彈幕實例
      ref.prevent = true; // 設置為 true 將阻止渲染,可以在這里做彈幕過濾工作
      return ref;
    },
  },
// .
});

配置:

interface CreateOption {
  rate?: number; // 用來設置設置彈幕的運動速率
  interval?: number; // 內核輪詢渲染的頻率
  gap?: number | string; // 同一條軌道在碰撞檢測的啥情況下,后一條彈幕與前一條彈幕最小相隔的距離
  durationRange?: [number, number]; // 普通彈幕的運動時間,這是一個范圍值,普通彈幕會在這個范圍內隨機選擇一個時間作為運動時間,如果你希望所有的彈幕運動時間都一致,你可以將兩個數設置為同樣的數
  trackHeight?: number | string; // 軌道高度
  plugin?: ManagerPlugin;
  limits?: { // 這個參數會限制彈幕渲染的數量
    view?: number;
    stash?: number;
  };
  direction?: 'right' | 'left'; // 彈幕的運動方向
  mode?: 'none' | 'strict' | 'adaptive'; // 用來確定內核的碰撞檢測算法
}

exportdeclarefunction create(options?: CreateOption): Manager;

3、掛載并渲染

當我們創建好了一個manager的時候就可以掛載到某個具體的節點上并渲染,實際上manager內部會啟動一個定時器來輪詢將內存區的彈幕來渲染出來,而輪詢的時間是交由你來控制的

const container = document.getElementById('container');

// 掛載,然后開始渲染
manager.mount(container);
manager.startPlaying();

4、發送普通彈幕

// 發送彈幕的內容類型可以在創建 manager 的時候通過范型來約定,可以看后面的章節
manager.push('彈幕內容');

但是通過manager.push方法來發送的彈幕可能會受到彈幕算法的影響,不會立即渲染,想象一些往一個數組里面 push 一個數據,但是消費是從數組最前端拿出數據消費的。我們可以換一個manager.unshift方法來發送彈幕

// 這會在下一次渲染輪詢中,立即渲染
manager.unshift('彈幕內容');

5、發送高級彈幕

普通彈幕會受到碰撞渲染算法的限制,對于那些需要特殊處理的彈幕,例如頂部彈幕,特殊位置的彈幕,則需要通過manager.pushFlexibleDanmaku這個 API 發送高級彈幕來渲染,高級彈幕不會受到碰撞算法的限制

manager.pushFlexibleDanmaku('彈幕內容', {
  id: 1, // 可選參數
  duration: 1000, // 默認從 manager.options.durationRange 中隨機取一個值
  direction: 'none', // 默認取 manager.options.direction 的值
  position: (danmaku, container) => {
    // 這會讓彈幕在容器居中的位置出現,因為 direction 為 none,所以會靜止播放 1s
    return {
      x: `50% - ${danmaku.getWidth() / 2}`, 
      y: `50% - ${danmaku.getHeight() / 2}`, 
    };
  },
  plugin: {
    // plugin 參數是可選的,具體可以參考普通彈幕的鉤子,這里是一樣的
  },
});


責任編輯:武曉燕 來源: 前端之神
相關推薦

2018-04-15 22:28:25

2015-07-15 13:54:13

2021-07-13 10:59:49

Python可視化

2022-12-26 00:00:05

Python爬蟲B站彈幕

2019-04-04 15:00:40

SQL索引數據庫

2023-12-14 17:21:28

前端性能優化

2018-01-04 09:20:55

python爬蟲視頻彈幕

2020-10-29 10:00:55

Python函數文件

2024-03-26 08:17:00

Controller參數校驗

2016-10-10 10:11:06

51CTO 融資

2013-06-14 14:57:09

Java基礎代碼

2020-11-18 14:01:07

設計師產品需求項目

2021-09-09 06:18:04

交互功能彈幕

2017-10-25 09:50:51

Linux

2020-11-17 10:23:56

安全黑客網站

2022-03-10 11:25:51

InnoDB優化

2023-09-27 22:44:18

數據遷移數據庫

2011-07-07 17:16:43

PHP

2010-07-30 09:07:12

PHP函數

2017-08-02 13:32:18

編程Java程序片段
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 婷婷福利视频导航 | 日韩在线高清 | 一级片av| 成人精品国产一区二区4080 | 欧美精品一二三区 | 黄色毛片一级 | 亚洲一区二区久久 | 国产精品不卡一区 | 国产精品久久久久aaaa樱花 | 国产亚洲欧美在线视频 | 亚洲第一成人av | 中文字幕在线一区 | 日韩高清在线观看 | 日本精品999 | 亚洲成人在线视频播放 | 精品久 | 日韩在线观看 | 91九色在线观看 | 亚洲 欧美 日韩 在线 | 欧美精品一区二区三区在线播放 | 99热欧美 | 中文字幕日韩欧美一区二区三区 | 九色91视频 | 91www在线观看 | 四虎影院在线观看av | 精品一二 | 亚洲在线一区二区三区 | 亚洲精品欧美一区二区三区 | 狠狠干天天干 | 99久久婷婷国产综合精品电影 | 欧美成人性生活 | 精品久久久久久久久久久久 | 亚洲精品久久久一区二区三区 | 精品一区二区三区91 | 99精品福利视频 | 日韩精品视频中文字幕 | 色综合久久久久 | 一区二区三区视频免费观看 | 久久男人 | 99在线资源 | 亚洲国产精品激情在线观看 |