1.4.0 • Published 3 months ago

rc-bullets-ts v1.4.0

Weekly downloads
-
License
MIT
Repository
github
Last release
3 months ago

rc-bullets-ts

👏 基于 rc-bullets 库使用typescript结合webpack 进行重构,为后续项目开发提供更安全的类型支持与拓展性支持。感谢原作者:@zerosoul 提供支持
🌈 基于 CSS3 Animation,使用 React 构建,可扩展,高性能。
💻 原项目地址:https://github.com/zerosoul/rc-bullets
NPM NPM downloads

注意!

⚠️ 更新至v1.1.1版本后,修复了之前版本中暂停全部弹幕后继续播放时可能导致轨道计算出错的问题
⚠️ 更新至v1.1.0版本后,修复了之前版本useBullentScreen拼写问题,由useBullentScreen -> useBulletScreen 感谢@hellohejinyu指出
⚠️ 如之前安装版本存在弹幕大面积重合及消失问题,请尝试升级npm库到最新版本。

体验

下载demo文件夹,运行npm install完成依赖安装后,执行npm run start即可体验项目

安装

npm:

npm install --save rc-bullets-ts

yarn:

yarn add rc-bullets-ts

初始化一个简单的弹幕场景

import BulletScreen, {StyledBullet} from 'rc-bullets-ts'
import {useEffect, useRef, useState} from 'react'

const headUrl =
  'https://zerosoul.github.io/rc-bullets/assets/img/heads/girl.jpg'

const Demo = () => {
  const screenElRef = useRef < HTMLDivElement > (null)
  const screenRef = useRef < InstanceType < typeof BulletScreen >> ()
  const [bullet, setBullet] = useState('')

  useEffect(() => {
    // 给页面中某个元素初始化弹幕屏幕,一般为一个大区块。此处的配置项全局生效
    screenRef.current = new BulletScreen(screenElRef.current, {duration: 20})
  }, [])

  return (
    <main>
      <div ref={screenElRef} style={{width: '100vw', height: '80vh'}}/>
      <input
        value={bullet}
        onChange={({target: {value}}) => {
          // 弹幕内容输入事件处理
          setBullet(value)
        }}
      />
      <button
        onClick={() => {
          // 发送弹幕
          if (bullet && screenRef.current) {
            // 纯文本调用形式
            screenRef.current.push(bullet)

            // StyledBullet 调用形式
            screenRef.current.push(
              <StyledBullet
                head={headUrl}
                msg={bullet}
                backgroundColor={'#fff'}
                size="large"
              />
            )

            // 对象调用形式
            screenRef.current.push({
              msg: bullet,
              head: headUrl,
              color: '#eee',
              size: 'large',
              backgroundColor: 'rgba(2, 2, 2, .3)',
            })
          }
        }}
      >
        发送
      </button>
    </main>
  )
}

export default Demo

特性

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

常用 API

  • 初始化弹幕屏幕:const screen = new BulletScreen(<queryString>|<HTMLElement>,[<option>]),此处的option 和下面的一致,偏向全局初始化,没有则使用默认值,每次发送弹幕不传则使用默认或全局设置,传了则该条弹幕覆盖全局设置。
  • 发送弹幕:const bulletId = screen.push(<string>|<ReactElement>,[<option>])

option

选项含义值类型默认值备注
top弹幕位置stringundefined强制指定距离容器顶部的高度,格式同 CSS 中的 top
bottom弹幕距离容器底部位置stringundefined强制指定距离容器底部的高度,格式同 CSS 中的 bottom
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'两种单位animation-delay支持的所有值
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>">

TO DO

  • react hook
  • 暂时还未想好,欢迎提issues~

本地开发指引

  1. git clone
     git clone https://github.com/slatejack/rc-bullets-ts
  2. 安装依赖
     npm install
  3. 测试环境
     npm run dev
  4. 打包正式
     npm run build

License

MIT © slatejack

1.4.0

3 months ago

1.3.2

4 months ago

1.3.1

4 months ago

1.3.0

5 months ago

1.2.0

8 months ago

1.1.1

8 months ago

1.1.0

12 months ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago