react实现弹幕

本文介绍了基于 CSS3 Animation、使用 React 构建的可扩展、高性能弹幕组件 rc-bullets。它支持传入 React 组件,能灵活控制弹幕内容和 UI,还具备弹幕屏幕管理、动画参数化等特性。文中给出了下载方式,以及在 React 组件中使用该组件的相关操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bullets 基于 CSS3 Animation,使用 React 构建,可扩展,高性能

下载rc-bullets

yarn add  rc-bullets

特性

  • 支持传入 React 组件,灵活控制弹幕内容和 UI,并提供一个默认样式组件:<StyledBullet/>
  • 弹幕屏幕管理:清屏,暂停,隐藏(后续可能会加入针对单个弹幕的控制)
  • 弹幕动画参数化:运动函数(匀速/ease/步进/cubic-bezier)、时长(秒)、循环次数、延迟等
  • 鼠标悬浮弹幕暂停

 react组件中使用

import React, { useEffect, useState } from 'react';
import BulletScreen, { StyledBullet } from 'rc-bullets';

const headUrl='https://zerosoul.github.io/rc-bullets/assets/img/heads/girl.jpg';
export default function Demo() {
  // 弹幕屏幕
  const [screen, setScreen] = useState(null);
  // 弹幕内容
  const [bullet, setBullet] = useState('');
  useEffect(() => {
    // 给页面中某个元素初始化弹幕屏幕,一般为一个大区块。此处的配置项全局生效
    let s = new BulletScreen('.screen',{duration:20});
    // or
    // let s=new BulletScreen(document.querySelector('.screen));
    setScreen(s);
  }, []);
  // 弹幕内容输入事件处理
  const handleChange = ({ target: { value } }) => {
    setBullet(value);
  };
  // 发送弹幕
  const handleSend = () => {
    if (bullet) {
      // push 纯文本
      screen.push(bullet);
      // or 使用 StyledBullet

      screen.push(
        <StyledBullet
          head={headUrl}
          msg={bullet}
          backgroundColor={'#fff'}
          size='large'
        />
      );
      // or 还可以这样使用,效果等同使用 StyledBullet 组件
      screen.push({msg:bullet,head:headUrl,color:"#eee" size="large" backgroundColor:"rgba(2,2,2,.3)"})
    }
  };
  return (
    <main>
      <div className="screen" style={{ width: '100vw', height: '80vh' }}></div>
      <input value={bullet} onChange={handleChange} />
      <button onClick={handleSend}>发送</button>
    </main>
  );
}
  • 初始化弹幕屏幕:const screen = new BulletScreen(<queryString>|<HTMLElement>,[<option>]),此处的option和下面的一致,偏向全局初始化,没有则使用默认值,每次发送弹幕不传则使用默认或全局设置,传了则该条弹幕覆盖全局设置。
  • 发送弹幕:const bulletId = screen.push(<string>|<ReactElement>,[<option>])
选项含义值类型默认值备注
top弹幕位置stringundefined自已强制定制距离顶部的高度,格式同 CSS 中的 top
trackHeight轨道高度number50均分轨道的高度
onStart自定义动画开始函数functionnulle.g.(bulletId,screen)=>{//do something}可以自定义一些动作,比如播放某个音效,在特定时间暂停该弹幕:screen.pause(bulletId)
onEnd自定义动画结束函数functionnulle.g.(bulletId,screen)=>{//do something}可以自定义一些动作,比如播放某个音效
pauseOnClick鼠标点击暂停booleanfalse再次点击继续
pauseOnHover鼠标悬停暂停booleantrue鼠标进入暂停,离开继续
loopCount循环次数number/string1值为‘infinite’时,表示无限循环
duration滚动时长number/string10数字则单位为‘秒’,字符串则支持'10s'和'300ms'两种单位
delay延迟number/string0数字则单位为‘秒’,字符串则支持'10s'和'300ms'两种单位
direction动画方向stringnormalanimation-direction支持的所有值
animateTimeFun动画函数stringlinear:匀速animation-timing-function支持的所有值

  • 弹幕清屏:screen.clear([<bulletId>]),无参则清除全部
  • 暂停弹幕:screen.pause([<bulletId>]),无参则暂停全部
  • 弹幕继续:screen.resume([<bulletId>]),无参则继续全部
  • 隐藏弹幕(滚动继续):screen.hide([<bulletId>]),无参则隐藏全部
  • 显示弹幕:screen.show([<bulletId>]),无参则显示全部
  • 自带的一个弹幕样式组件:<StyledBullet msg="<弹幕内容>" head="<头像地址>" color="<字体颜色>" backgroundColor="<背景色>" size="<尺寸:small|normal|large|huge|自定义大小,基于em机制,默认normal>">

### React 弹幕组件实现示例 #### 一、rc-danmaku 组件介绍 `rc-danmaku` 是一款专为 React 设计的弹幕组件,能够轻松集成到基于 React 的项目中[^1]。该组件提供了丰富的配置选项来满足不同的业务需求。 #### 二、安装依赖包 为了使用 `rc-danmaku` ,首先需要通过 npm 或 yarn 安装对应的库文件: ```bash npm install rc-danmaku --save ``` 或者 ```bash yarn add rc-danmaku ``` #### 三、基础用法实例 下面是一个简单的例子展示了如何创建并初始化一个基本的弹幕列表: ```jsx import React, { useState } from 'react'; import DanmuList from 'rc-danmaku'; function App() { const [danmus, setDanmus] = useState([ { text: "欢迎来到直播间", color: "#ff0000", time: 1 }, { text: "主播好漂亮~", color: "#00ff00", time: 2 } ]); return ( <div> {/* 渲染弹幕 */} <DanmuList danmu={danmus} /> {/* 添加新的弹幕条目 */} <input type="text" id="new_danmu"/> <button onClick={() => { let inputText = document.getElementById('new_danmu').value; if (inputText !== '') { setDanmus([...danmus, { text: inputText, color: '#ffffff', time: Date.now()/1000 }]); } }}>发送</button> </div> ); } export default App; ``` 此代码片段定义了一个名为 `App` 的函数式组件,在其中引入了 `rc-danmaku` 提供的核心组件 `<DanmuList>` 并传入初始数据作为属性传递给它;同时实现了向现有弹幕数组追加新消息的功能。 #### 四、高级特性支持 除了上述的基础功能外,`rc-danmaku` 还具备更多实用特性的支持,比如自定义样式、滚动速度调整以及多轨道布局等设置项,具体可查阅官方文档获取更多信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值