首页 > 其他分享 >react中的弹幕效果怎么实现

react中的弹幕效果怎么实现

时间:2024-09-04 11:54:17浏览次数:11  
标签:const 效果 bullet screen react useState push 弹幕

就像这样 下面有完整代码

一、引入的模块和组件

  • 引入 React 的核心库以及useEffectuseState这两个用于处理副作用和管理状态的 React Hook。
  • 引入rc-bullets库中。这个库可用于创建弹幕效果

二、组件内部状态管理

 // 弹幕屏幕
  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}
          size='large'
        />
      );
      // or 还可以这样使用,效果等同使用 StyledBullet 组件
      // screen.push({msg:bullet,head:headUrl,color:"#eee",size:"large",backgroundColor:"rgba(2,2,2,.3)"})
    }

  };

里面包含的内容

  • 弹幕屏幕状态
    • const [screen, setScreen] = useState(null);:使用useState创建了一个名为screen的状态变量,初始值为null。这个状态变量用于存储弹幕屏幕的实例。
  • 弹幕内容状态
    • const [bullet, setBullet] = useState('');:创建了一个名为bullet的状态变量,用于存储用户输入的弹幕内容。
  • 初始化弹幕屏幕

    • useEffect
    • let s = new BulletScreen('.screen', { duration: 20 });:创建一个BulletScreen实例,传入页面中某个元素的选择器.screen和一个配置对象,这里设置了弹幕的持续时间为 20。
    • setScreen(s);:将创建的弹幕屏幕实例存储到screen状态变量中。
  • 自动发送弹幕

  • 弹幕内容输入事件处理

  • 发送弹幕事件处理

  • 如果bullet有内容,将其作为弹幕推送到弹幕屏幕实例中。可以直接推送纯文本,也可以使用StyledBullet组件或更复杂的配置对象来推送带有特定样式的弹幕。

完整代码

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}
          size='large'
        />
      );
      // or 还可以这样使用,效果等同使用 StyledBullet 组件
      // screen.push({msg:bullet,head:headUrl,color:"#eee",size:"large",backgroundColor:"rgba(2,2,2,.3)"})
    }

  };
  let arrdan=[
    '哈丢都会',
    '电饭锅','俄国人打不','地打不过','三大败','答复是个','俄国人打不','地打不过','三大败','答复是个'
  ]
    useEffect(()=>{
        let tim=0
      let aa=new BulletScreen('.screen',{duration:20});
    let intim=setInterval(()=>{
      aa.push(
        arrdan[tim]
        // <StyledBullet
        //   // head={headUrl}
        //   msg={arrdan[tim]}
        //   size='large'
        // />
      );
       tim+=1
       if(tim>=arrdan.length){
        clearInterval(intim)
       }
      },1000)
    },[])
  return (
    <div className='boxxx'>
      <div className="screen" style={{ width: '100vw', height: '20vh',position: 'fixed',
    top: 0,
    left: 0 }}></div>
      {/* <input value={bullet} onChange={handleChange} />
      <button className='buttomsss' onClick={handleSend}>发送</button> */}
    </div>
  );
}

标签:const,效果,bullet,screen,react,useState,push,弹幕
From: https://blog.csdn.net/2301_79038994/article/details/141889292

相关文章

  • 创建可调整大小的 React 组件react-resizable
    react-resizable是一个用于创建可调整大小的React组件的库。它为开发者提供了一种简单的方式来实现用户可以通过拖动边缘或角落来调整元素大小的功能。这个库通常用于需要动态调整尺寸的用户界面组件,如面板、窗口、表格列等。 主要特点轻量级:库非常小,只有核心的调整大小......
  • 1p-frac:已开源,仅用单张分形图片即可媲美ImageNet的预训练效果 | ECCV 2024
    分形几何是一个数学分支,主要应用于作图方面。一般来说,分形经过无数次递归迭代后的结果。比如取一条线段,抹去中间的三分之一,会得到长度是原三分之一长的两条线段,中间隔着相同长度的间隙。然后重复这个动作,直到所有的线段都被抹掉,就将会得到被以固定模式出现的间隙隔开的无限多的点......
  • 腾讯提出一种新的针对风格化角色和逼真服装动画的生成3D运动转移方法,生成效果逼真!
    来自腾讯XR视觉实验室的研究团队提出了一种创新的3D运动转移方法,专门针对风格化角色和逼真服装动画的生成。该方法能够将源动作准确地映射到目标角色上,同时考虑了角色身体的刚性变形和服装的局部物理动态变形。与现有技术相比,这技术不仅关注于角色身体的变形,还特别强调了服装的逼真......
  • react diff 学习之tree diff
    treediff主要针对的是reactdom节点跨层级的操作。什么是跨层级的操作呢?除同级之外的操作都是跨层级。比如A节点下有B和C,A的同级有个小狗节点,现在把整个A节点移到小狗节点下。对于这种跨层级操作,react只会进行创建和删除操作,当根节点发现子节点A消失了,就会直接销毁A,当小狗节点......
  • 【前端面试】采用react前后,浏览器-解析渲染UI的变化
    浏览器渲染html浏览器解析和渲染UI(用户界面),特别是HTML文档,是一个复杂的过程,涉及到多个阶段。以下是浏览器从接收HTML文档到显示渲染后的页面的一般步骤:1.下载HTML文档:用户输入URL或点击链接时,浏览器会向服务器请求HTML文档。服务器响应请求,并将HTML文档......
  • 《第三十四章 高级主题 - 动画效果》
    在Android应用开发中,动画效果能够显著提升用户体验,使应用更加生动和吸引人。本章将深入探讨Android中的动画效果,包括属性动画、帧动画以及ViewPager动画。一、属性动画(一)属性动画简介属性动画是Android中一种强大且灵活的动画机制,它可以对对象的任意属性进行动......
  • 实战复杂低代码项目React从架构到拆解
    实战复杂低代码项目:‌React从架构到拆解随着技术的不断进步和业务需求的日益复杂,‌低代码平台(‌Low-CodePlatform)‌已成为现代软件开发领域中的热门工具。‌而基于React的低代码平台,‌更是凭借其组件化、‌响应式、‌数据驱动等特性,‌为开发者提供了一种高效构建应用程序的新途......
  • CSS线性渐变效果
    1、未添加元素前2、添加元素后#实现方法,在父级盒子里面添加背景图片 .box{  position:relative;  margin:0auto;  z-index:index2;  width:736px;  height:414px;  background-image:url(./img/jhk-1723779352440.jpg); }......
  • 你的AI绘画工具SD该更新啦!6款超好用的SDXL负面提示词Embedding模型,让你的出图效果好上
    大家好,我是强哥AI绘画SDXL1.0模型发布以来,优质的SDXL大模型不断涌现,让图像的生成质量越来越高。但版本迭代后,之前的SD1.5的负面提示词Embedding并不能和SDXL大模型配合使用,而每次都输入一大串的反向提示词又实在麻烦。所以今天就给大家推荐6款可以配合SDXL......
  • react diff 学习 之 component diff
    所谓的diff算法,其实就是react同时比较两棵虚拟dom树之间的差异,一颗是当前的dom结构,另一棵在react状态变更将要重新渲染时生成。react通过比较这两棵树的差异,决定是否需要修改dom结构,以及如何修改。这种比较过程中的算法称作diff算法。componentdiff是专门针对更新前后的同一层......