鸿蒙开发实现弹幕功能

鸿蒙开发实现弹幕功能如下:
在这里插入图片描述
弹幕轮播组件:BannerScroll

import type { IDanMuInfoList, IDanMuInfoItem } from '../model/DanMuData'
//定义组件
@Component
export default struct BannerScroll {
  //@Watch 用来监视状态数据的变化,包括:@State、@Prop、@Link、@Provide、@Consume
  //一旦状态数据变化,监视的回调就会调用
  // 我们可以在监视的回调中执行应用需要的特定逻辑
  @Link @Watch('start') bannerList: IDanMuInfoList
  @State scrollList: IDanMuInfoList = []
  scroller: Scroller = new Scroller()

  aboutToAppear() {
    this.start()
  }

  aboutToDisappear() {
    this.stop()
  }

  xOffset: number = 0 // 位移距离
  timeId: number // 定时器标识
  duration: number = Math.round(1000 / 60) // 位移间隔时间

  move() {
    this.stop()
    this.timeId = setTimeout(() => {
      this.xOffset += 4
      // 动画的持续时间,不能大于或等于定时器的间隔
      this.scroller.scrollTo({
        xOffset: this.xOffset / 10,
        yOffset: 0,
        animation: { duration: this.duration - 5, curve: Curve.Linear }
      })
      this.move()
    }, this.duration)
  }

  start() {
    const bannerList = this.bannerList;
    if (bannerList.length === 0) {
      return;
    }
    this.scrollList = [...bannerList, ...bannerList].map((item, index) => {
      return {
        ...item,
        id: index
      }
    })
    this.move()
  }

  stop() {
    clearInterval(this.timeId);
  }

  reset(firstIndex: number) {
    if (firstIndex === this.bannerList.length) {
      this.xOffset = 0;
      this.scroller.scrollTo({ xOffset: 0, yOffset: 0, animation: { duration: 0, curve: Curve.Linear } })
    }
  }

  build() {
    List({ scroller: this.scroller }) {
      ForEach(this.scrollList, (banner: IDanMuInfoItem) => {
        ListItem() {
          Row({ space: 6 }) {
            Text(banner.content).fontSize(14)
          }
          .padding({ top: 6, left: 6, bottom: 6, right: 10 })
          .borderRadius(42)
          .backgroundColor('#CDFFD9')
          .margin({ left: 10 })
        }
      }, banner => banner.id)
    }
    .listDirection(Axis.Horizontal) // 排列方向
    .edgeEffect(EdgeEffect.None) // 滑动到边缘无效果
    .onScrollIndex(this.reset.bind(this))
    .width('100%')
    .cachedCount(4)
    .hitTestBehavior(HitTestMode.None)
  }
}

关注‘猿来编码’,回复弹幕,获取更多,以后也会继续分享鸿蒙相关知识,相互学习。谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/462307.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Git版本控制系统】:起步

目录 前言 版本控制 集中式与分布式的区别 Windows安装Git 核心 文件状态 工作区域 基本工作流程 配置用户信息 获取帮助 在线资源 前言 本篇文件的环境是Windows环境下实现。 在日常工作中git少不了,所以编写本篇文章介绍Git基础,专栏会不…

【DAY3 3.16】

1.【刷题】 【知识点与思路】 用乘法求余公式,暴力计算最大的m。 ans1,2,6,24,120...。计算这些阶乘的和是否是能被ans其整除,也就是判断: A[1]!%ansA[2]!%ans....A[n]!%ans0 要是不行的话,就输出当前ans对应的阶乘数。 【代码】 …

为什么国外客户在你跟进的过程中“消失”了?

看着别人跟的客户终于下单了,再看看自己的,怎么跟着跟着就没了。很多时候我们的客户就是不知不觉就被我们给跟丢了,因为我们的跟进方法是有问题的,下面给大家一些比较好的跟进方式和思路。 首先要跟进哪些客户? 不是所…

解压即用,2024最简单好用AI开源换脸应用,整合包已备好

软件整合包:点击下载 关键词:#AI换脸 #开源应用 #可视化界面 #实时换脸 #高清修复 #多个模型 #人脸遮挡处理 #模糊修复 #性能优化 #操作简单 总结:本软件是一款2024年最强大、最易用的AI换脸开源应用。该应用界面经过汉化,操作简…

数字万用表 (Digital Multimeter)

数字万用表 [Digital Multimeter] 1. Product parameters2. 交流频率测量3. 面板介绍4. 背光屏References 1. Product parameters 2. 交流频率测量 在交流 750V 档处按 HOLD 键切换到市电频率 3. 面板介绍 4. 背光屏 ​ References [1] Yongqiang Cheng, https://yongqiang…

Internet协议的安全性

Internet协议的安全性 文章目录 Internet协议的安全性1. 网络层1. IP*62. ARP*33. ICMP * 3 2. 传输层协议1. TCP1. * SYN-Flood攻击攻击检测* 防御 2. TCP序号攻击攻击 3. 拥塞机制攻击 2. UDP 3. 应用层协议1. DNS攻击*3防范*3: 2. FTP3. TELNET: 改用ssh4. 电子邮件1. 攻击2…

【leetcode-53最大子数组和】

题目: 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4] …

Java关于物联网消息引擎:EMQ X

1.背景 1、5G 时代,万物互联 随着5G的到来,万物互联已经成为现实,物联网行业得以蓬勃发展,催生了很多的应用,比如:物联网pass平台,车联网,面向云平台的IOT-Hub,NB-IoT蜂…

更安全的C gets()和str* 以及fgets和strcspn的用法

#include <stdio.h>int main() {char *str;gets(str);puts(str);return(0); }可以说全是错误 首先char *str没有指向一个分配好的地址&#xff0c;就直接读入&#xff0c;危险 ps: 怎么理解char *str "Hello World" 是将一个存储在一个只读的数据段中字符串常…

进程学习--02

在C语言中&#xff0c;一般使用fork函数开辟进程&#xff0c;这个函数开辟进程后会返回一个进程号&#xff0c;在子进程中会返回0&#xff0c;在父进程中会返回子进程的进程号。 int main(){int ret fork();if(ret<0){fprintf(stderr, "pid error");exit(-1);}e…

【嵌入式实践】【芝麻】【硬件篇-4】从0到1给电动车添加指纹锁:IO电路简单介绍

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹&#xff0c;电动车进入P档等待时计时&#xff0c;计时超过5min则自动锁车&#xff0c;计时过程中按刹车可中断P档状态&#xff0c;同时中断锁车计时。改项目我称之为“芝…

linux最佳入门(笔记)

1、内核的主要功能 2、常用命令 3、通配符&#xff1a;这个在一些启动文件中很常见 4、输入/输出重定向 意思就是将结果输出到别的地方&#xff0c;例如&#xff1a;ls标准会输出文件&#xff0c;默认是输出到屏幕&#xff0c;但是用>dir后&#xff0c;是将结果输出到dir文…

基于springboot+vue实现艺术水平考级报名系统【项目源码+论文说明】计算机毕业设计

基于springbootvue实现艺术水平考级报名系统演示 摘要 本次毕业设计基于SpringBoot框架开发了一款艺术水平考级报名管理系统。该系统为考生提供了线上报名、准考证管理等核心功能&#xff0c;并为系统管理员提供了在线发布考试信息、对报名考生进行审核等管理功能。通过该系统…

一文搞懂PCL中自定义点云类型的构建与函数使用

上周猛男快乐开发时遇到个bug&#xff0c;要用pcl的函数对自定义的点云进行处理。一起解决问题时遇到了很多问题&#xff0c;解决后整理出来分享给各位参考&#xff0c;以免踩一样的坑&#x1f60a;。文章中自定义的点我用PointT来表示&#xff0c;自定义点云一般指的是pcl::Po…

SaaS智慧校园管理平台,智能电子班牌源码,智慧校园建设方案

电子班牌是什么&#xff1f; 电子班牌是一种智能交互终端&#xff0c;电子班牌可以解决“走班教学”考勤管理问题&#xff0c;将大数据、物联网和人工智能等新兴技术和教学管理工作融合&#xff0c;提升学校管理水平和管理效率。 电子班牌是在学校各教室门口安装高清可视化和具…

实验室管理系统 |基于springboot框架+ Mysql+JSP技术+Tomcat的实验室管理系统 设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 用户后台功能模块 用户后台管理 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunw…

论文阅读FCN-Transformer Feature Fusion for PolypSegmentation

本文提出了一种名为Fully Convolutional Branch-TransFormer (FCBFormer)的图像分割框架。该架构旨在结合Transformer和全卷积网络&#xff08;FCN&#xff09;的优势&#xff0c;以提高结肠镜图像中息肉的检测和分类准确性。 1&#xff0c;框架结构&#xff1a; 模型采用双分…

专题二 - 滑动窗口 - leetcode 904. 水果成篮 | 中等难度

leetcode 904. 水果成篮 leetcode 904. 水果成篮 | 中等难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 904. 水果成篮 | 中等难度 1. 题目详情 你正在探访一家农场&#xff0c;农场从左到右种植…

【SQL Server】实验六 数据安全性

1 实验目的 掌握用户管理的基本方法&#xff0c;包括创建用户、删除用户和设置用户密码。掌握用户授权和回收权限的基本方法。掌握系统级权限和对象级权限的授权和回收方法掌握角色的使用方法 2 实验内容 2.1 掌握用户管理的基本使用方法 创建用户&#xff08;带密码&#…

RTP 控制协议 (RTCP) 反馈用于拥塞控制

摘要 有效的 RTP 拥塞控制算法&#xff0c;需要比标准 RTP 控制协议(RTCP)发送方报告(SR)和接收方报告(RR)数据包提供的关于数据包丢失、定时和显式拥塞通知 (ECN) 标记的更细粒度的反馈。 本文档描述了 RTCP 反馈消息&#xff0c;旨在使用 RTP 对交互式实时流量启用拥塞控制…