小程序实现弹幕功能-无限循环,不会重叠

2023-11-06

以下是支付宝小程序代码,先上效果图

在这里插入图片描述
以下是axml代码:

<view class="view">
  <block a:for="{{bulletChatData}}" a:key="id">
    <text class="item"  style="animation: first 8s linear forwards;top:{{item.top}}%;color:{{item.color}};">{{index+item.text}}</text>
  </block>
</view>

js:


const app = getApp();
var bulletChatList = [];
var id = 0;
var cycle = null;  //计时器
var topArray = [0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150];//用来做随机top值
var usedTop = [];

Page({
  data: {
    bulletChatData: [],
    messageList: ['小白提问 我应该买哪个好 投入多少 多久有成果或初步成果', '我的红包呢?幸运奖都没?我冤啊,在家待业,还得', '什么时候买才是好', '买什么基金比较好', '四月份买了一点,这两个月都在跌,陆续在补,下半年行情如何?', '什么时候买入比较好', '国债收益率下降,目前投资债基,风险大不大?', '如何选择基金。如何评估基金未来潜力', '怎样选债基']
  },
  onShow: function () {
    var _this = this;
    cycle = setInterval(function () {
      let arr = _this.data.messageList
      if (arr[id] == undefined) {
        id = 0;
        // 2.无限循环弹幕
        var obj = {};
        obj.text = arr[id];
        var num = Math.floor(Math.random() * topArray.length);
        obj.top = topArray[num];//拿到随机值 Math.ceil向上取整
        // 被使用了,从原数组删掉并添加到已使用的数组里
        usedTop.push(topArray[num]);
        topArray.splice(num, 1);
        obj.color = _this.getRandomColor();
        bulletChatList.push(obj);
        _this.setData({
          bulletChatData: bulletChatList
        })
        id++;
      } else {
        var obj = {};
        obj.text = arr[id];
        var num = Math.floor(Math.random() * topArray.length);
        obj.top = topArray[num];//拿到随机值 
        // 被使用了,从原数组删掉并添加到已使用的数组里
        usedTop.push(topArray[num]);
        topArray.splice(num, 1);
        obj.color = _this.getRandomColor();
        bulletChatList.push(obj);
        _this.setData({
          bulletChatData: bulletChatList
        })
        id++;
      }
      if (usedTop.length > 5) {
        // 从已使用的数组删掉并添加到原数组里
        topArray.push(usedTop.shift());
      }
    }, 1000)
  },
  getRandomColor() {
    let rgb = []
    for (let i = 0; i < 3; ++i) {
      let color = Math.floor(Math.random() * 256).toString(16)
      color = color.length == 1 ? '0' + color : color
      rgb.push(color)
    }
    return '#' + rgb.join('')
  },
  onHide() {
    clearInterval(cycle)
    ids = 0;
    bulletChatList = []
  },

});

acss:


.item {
    position: absolute;
    white-space: nowrap;
    /* 防止向下换行*/
    animation-timing-function: linear;
    animation-fill-mode: none;
}

.view {
    z-index: 3;
    height:20%;
    width: 100%;
    position: absolute;
}

@keyframes first {
    from {
        transform: translateX(750rpx);
    }
    to {
        transform: translateX(-1000rpx);
        display: none;
    }
}

复制代码即可运行查看效果
以上就是一个完整的小程序弹幕实现的过程,不会上下重叠左右重叠,有更好的方法,欢迎留言!
本文章纯属原创,转载请注明出处!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小程序实现弹幕功能-无限循环,不会重叠 的相关文章

  • 如何在同一命名空间内从函数 B 调用函数 A?

    假设我有命名空间 var Namespace A function alert Hello B function Call A from here do other stuff 在这个命名空间中 我想让A成为B的辅助函数 也就是说 A 永远
  • Javascript/jQuery 变量未给出预期值

    和我之前的其他人一样 我也在 Javascript 的范围内苦苦挣扎 那并试图阅读该死的东西 我已经检查了关于这个问题的一些先前的线程 但我似乎无法让它们正确地应用于我的问题 在下面的示例中 我想操纵中的值tagsArr数组 一旦数组已完全
  • 添加 Javascript 按钮来更改 iframe 的内容

    我正在尝试创建此页面 其中有一个 Iframe 并且我想添加一个按钮来显示 iframe 中的下一页 以及一个按钮来显示 iframe 中的上一页 我总共有 4 个页面要在名为 1 html 2 html 3 html 4 html 的 i
  • 如何在chartjs中绘制多个时间序列,其中每个时间序列都有不同的时间

    例如 我有两个时间序列 s1 2017 01 06 18 39 30 100 2017 01 07 18 39 28 101 and s2 2017 01 07 18 00 00 90 2017 01 08 18 00 00 105 我想在
  • 在承诺中运行同步函数

    我是 JS 和异步操作的新手 在使用express的nodeJS路由器中 我使用mongoose从mongo聚合了一些数据 该数据是每隔 15 分钟从不同站点收集的天气数据 我使用猫鼬聚合管道处理数据 以获取每小时数据并按每个站点进行分组
  • Angular 2 测试 ng-content

    我想知道是否有办法测试ng content不创建宿主元素 例如 如果我有警报组件 Component selector app alert template div div
  • 如何抑制 IE9 window.close() 确认消息

    应用 window close 函数后 IE9 会引发 您正在查看的网页正在尝试关闭 消息 有没有办法在不更改应用程序代码的情况下 而是通过更改一些特定于 IE 的注册表项来抑制此消息 如果窗口不是由脚本打开的 IE 不允许在没有确认的情况
  • 将 Javascript 正则表达式转换为 PHP

    我知道这个问题已经被问了大约十几次 但是从技术上讲 这个问题并不是一个骗局 如果您愿意 请检查其他问题 基本上 我有一个 Javascript 正则表达式来检查用于前端验证的电子邮件地址 并且我使用 CodeIgniter 在后端进行双重检
  • HTML:您可以隐藏/忽略浏览器查找中的文本元素 (CTRL+F)

    我有一个具有相当复杂的 UI 的 Web 应用程序 并且屏幕的一部分保留用于内容 如果可能的话 我想这样做 以便当用户使用浏览器的内置文本搜索 CTRL F 时 UI 中的任何文本都将被忽略 并且仅搜索实际内容 这可行吗 CSS 和 Jav
  • 如何隐藏 URL 中的 ID

    我以前在 Stack Overflow 上见过这类问题 但没有一个真正有帮助 我也用谷歌搜索过 但没有骰子 我想知道如果用户单击选项卡本身是否可以隐藏 URL 中的 ID 这是网页 www planet nu dev new experia
  • ES6 生成器——它们真的是 async/await 的替代品吗?

    评论区的帖子之一this http blogs msdn com b typescript archive 2014 10 22 typescript and the road to 2 0 aspx打字稿博客文章说 如果我必须等到 2 0
  • 如何将这段 javascript 代码重写为 C++11?

    这是我在 Javascript Definitive Guide 中看到的 javascript 闭包代码 我想把它写成C 11 var uniqueID1 function var id 0 return function return
  • 根据复选框显示/隐藏输入字段[重复]

    这个问题在这里已经有答案了 如果单击该复选框 它将显示一个输入字段 到目前为止它正在工作 但如果未选中该复选框 它应该隐藏它 我该怎么做 div class checkbox div
  • 在浏览器中打开的 .mhtml 文件中填写输入

    我想对 mhtml 文件运行 e2e 测试 即填写表格 在 mhtml 文件上查看和提取数据效果非常好 但我无法填写任何内容input字段 既不是手动也不是通过木偶操作者 你可以用这个试试 mhtml 文件 https gist githu
  • 为什么发送 fetch() 时我的响应数据未定义?

    我正在尝试在客户端使用 fetch 将数据发布到我的 NodeJS 服务器或从我的 NodeJS 服务器发布数据 服务器很好地收到了 post 请求 我能够记录 req 变量 但是当我 res send any data 时 客户端无法检测
  • 使用XMLHttpRequest自动网页刷新内存泄漏

    问候 我一直在为一些使用 8 位微控制器的硬件开发网络界面 该网页使用 HTML javascript JSON 和 XHR XMLHttpRequest 进行通信 我想做的是创建一个页面 使用 setInterval 使用控制器中的新值每
  • jQuery 更改为隐藏字段后触发重力表单中的表单更新

    简而言之 是否有 JavaScript 函数或挂钩来触发重力形式的更新 以便执行条件逻辑 原问题 我正在使用重力形式 并且创建了一个 变化时 事件 gform 1 find gfield date dropdown month select
  • 将数组数组的字符串转换为 Javascript 数组数组的优雅方法?

    我有一个 ajax 请求 它返回一个值列表 如下所示 5 5 5 6 15 15 7 13 12 我需要它是一个带有数字的 javascript 数组 5 5 5 6 15 15 7 13 12 我尝试将 和 替换为 然后用 分割和 for
  • Javascript 最佳实践,为什么使用逗号来链接函数/变量声明?

    我一直在为 jQuery jQueryLog 开发一个插件 以允许调试链选择器和返回值 如果你想检查一下 你可以这样做here http www jquerylog com 这已经是第二个版本了 第一个版本实际上是经过编辑的 jQuery
  • 在哪里放置资源特定逻辑

    您能帮我考虑在 AngularJS 中将资源 服务 特定的业务逻辑放置在哪里吗 我觉得在我的资源上创建一些类似模型的抽象应该很棒 但我不确定如何做 API调用 gt GET customers 1 lt first name John la

随机推荐

  • C语言位操作 - bit 、byte的清零,置1,提取,判断

    一 位操作概述 针对MCU的嵌入是开发中经常涉及到寄存器的操作 例如GPIO配置低寄存器GPIOx CRL 共32个bit 有时需要改变其中的一位或者几位bit值 同时不能影响其它bit位的值 例如 需要设置第0位bit 1时 不能简单的设
  • 从别人那学习什么?

    author skate time 2010 09 11 从别人那学习什么 今天在看oracle优化文档时 在诊断优化数据库时 在发现问题与解决问题这一过程中 就像我们现实中的一个缩影 思维总是天马行空 我们从出生一直到离开人世 都在 学习
  • 【寒假每日一题】蛇形矩阵

    问题1 题目来源 AcWing 题目链接 756 蛇形矩阵 AcWing题库 题目描述 输入两个整数 n 和 m 输出一个 n 行 m 列的矩阵 将数字 1 到 n m 按照回字蛇形填充至矩阵中 具体矩阵形式可参考样例 输入格式 输入共一行
  • 数据库设计之网上书店系统

    版权声明 对于本博客所有原创文章 允许个人 教育和非商业目的使用 但务必保证文章的完整性且不作任何修改地以超链接形式注明原始作者 出处及本声明 博客地址 http blog csdn net shuxiao9058 原始作者 季亚 一 概要
  • python函数初步了解

    文章目录 什么是函数 python中函数的创建和调用 python中函数的变量作用域 全局变量 局部变量 python中的函数参数 形参 实参 默认参数 可变参数 关键字参数 匿名函数 递归函数 什么是函数 函数是组织好的 可重复使用的 用
  • vue路由props传递参数

    props分为三种形式 props为对象 props为布尔值 这种只能接收params动态路由的参数 props为函数 可以接收query和params参数 推荐 import Vue from vue import VueRouter f
  • 大数据技术之(一) Spark-Core

    第1章 Spark 概述 1 Spark是什么 Spark 是一种基于内存的快速 通用 可扩展的大数据分析计算引擎 2 Spark and Hadoop 在之前的学习中 Hadoop 的 MapReduce 是大家广为熟知的计算框架 那为什
  • sqli-labs通关(less31~less40)

    目录 Less31 Less32 Less33 Less34 Less35 Less36 Less37 Less38 Less39 Less40 Less31 这关和前两关也只是闭合不同的差别 思路还是通过HTTP参数污染绕过WAF 爆数据
  • Dubbo3.0如何实现进行路由扩展

    Dubbo3 0如何实现进行路由扩展 前言 关键类介绍 RouterFactory 接口 CacheableRouterFactory抽象类 Router 接口 AbstractRouter 抽象类 RouterChain 类 怎么扩展路由
  • 加密货币技术架构(一)——BTC、ETH

    一 BTC 比特币 一 项目背景 BTC 比特币 是第一个基于去中心化 采用点对点网络与共识主动性 开放源代码 以区块链作为底层技术的加密货币 身为世界上第一个加密货币 市值毋庸置疑是最大的 并且历经13年的牛熊转换 坐拥最稳加密货币宝座
  • struct 和 typedef struct 的区别

    文章目录 前言 struct和typedef struct的区别 C语言中的struct和typedef struct struct typedef struct C 中的struct和typedef struct struct typed
  • 搜索引擎solr系列---solr分词配置

    分词我理解的是 输入的一句话 按照它自己定义的规则分为常用词语 首先 Solr有自己基本的类型 string int date long等等 对于string类型 比如在你的core conf manage schema文件中 配置一个字段
  • 【教程】Matrikon OPC使用教程连载(二)

    MatrikonOPC介绍 Matrikon 是基于OPC UA和基于OPC的控制自动化数据互操作性产品的供应商 提供自动化厂商的高级OPC UA开发工具包 适用于从嵌入式设备到云应用的所有产品线 对于终端用户客户 Matrikon提供了关
  • 【elementplus】解决el-table的固定列不固定了

    如图所示 只要只有表头还是固定的 表体不固定了 解决方法 取消给表格固定列设置的position 我这里是因为设置了position relative导致的 ep table fixed column right position rela
  • Cookie的创建和读取和常用方法

    b 如何创建 Cookie Servlet 程序中的代码 public class CookieServlet extends BaseServlet 创建Cookie param req param resp throws Servlet
  • 数据结构知识点复习

    第一章 数据结构概述 基本概念与术语 数据 数据是对客观事物的符号表示 在计算机科学中是指所有能输入到计算机中并被计算机程序所处理的符号的总称 数据元素 数据元素是数据的基本单位 是数据这个集合中的个体 也称之为元素 结点 顶点记录 补充
  • MyBatis中 sql标签和include标签的使用

  • Flutter报错Building with plugins requires symlink support的解决方法

    错误 Building with plugins requires symlink support Please enable Developer Mode in your system settings Run start ms sett
  • js 识别当前设备信息 是否是移动端

    一 navigator userAgent 对象 最简单的方法就是分析浏览器的 user agent 字符串 它包含了设备信息 JS 通过navigator userAgent属性拿到这个字符串 只要里面包含mobi android iph
  • 小程序实现弹幕功能-无限循环,不会重叠

    以下是支付宝小程序代码 先上效果图 以下是axml代码