datav-实现轮播表,使用updateRows方法-无缝衔接加载数据

news2024/12/25 23:49:10

前言

  • 最近在做大屏需求的时候,遇到一个轮播数据的需求,查看datav文档发现确实有这个组件

  • 但这个组件只提供了一次加载轮播的例子,虽然提供了轮播加载数据updateRows方法

  • 但是文档并没有触发事件,比如轮播完数据触发事件,加载完数据事件-这些都没有说明

  • 关键时我们要解决谁来判断数据轮播完了,来触发这个事件,请求接口,加载第二页数据

视频

datav-轮播表无缝衔接数据

须知

1.为什么要边滚动边加载数据
  • 直接把后端所有数据请求之后直接轮播-确实比较省事。但是这样做法不符合

  • 先不说浏览器受不受得了,就一个真实设备报警可能就有7,8条,数据会越来越多

  • 作为一个合理cv工程师,我们还是要避免这种事,不到万不得已还是不要这样干

2.直接往config.data里面push数据不就行了-不合理
  • 如果我们直接往config.data里面push数据,数据确实进去了,但是轮播表的数据没有更新

  • 轮播的还是原来的数据,如果我们把config.data重新赋值一遍,轮播数据确实改变了

  • 但他有从头开始轮播,没有无缝衔接。并且是我们手动按钮触发,不符合需求,不建议

3.使用定时器计算时间加载数据-推荐
  • 本来想在网上找一下有没有轮播完的事件直接用,找了一圈一言难尽,自己写了一个

  • 注意一:我们不能直接写定时器来写代码逻辑,因为修改定时器间隔后,定时器不会变

  • 注意二:因为默认就显示了五个,所以有两种情况,第一次,第二次....代码有注释

  • 注意三:因为我们是用定时器来判断加载数据,所以要把鼠标悬停停止播放关掉

代码实现-子父组件形式-可复制-看注释

父组件
<template>
  <div class="app-container">
    <el-card class="box-card">
      <div class="cont-top">
        <div class="con-title">
          测试
          <el-button @click="doUpdate" type="success" size="mini"
            >替换数据滚动列表是否更新数据测试</el-button
          >
        </div>
      </div>
      <div class="cont-bottom">
        <DatavTable ref="DatavTable" />
      </div>
    </el-card>
  </div>
</template>
​
<script>
// datav-轮播表
import DatavTable from './components/DatavTable.vue'
export default {
  name: 'Purejs',
  components: {
    DatavTable
  },
  methods: {
    // datav-轮播表添加数据
    doUpdate () {
      this.$refs.DatavTable.ceshi()
    }
  }
}
</script>
​
<style lang="scss" scoped>
.app-container {
  ::v-deep .box-card {
    width: 32%;
    height: 328px;
    margin: 0 2% 1% 0;
    &:nth-child(3n) {
      margin-right: 0;
    }
​
    .el-card__body {
      height: 100%;
      padding: 0;
      display: flex;
      flex-direction: column;
      // align-items: center;
      .cont-top {
        height: 50px;
        .con-title {
          line-height: 50px;
          padding-left: 10px;
          font-size: 16px;
          // font-family: PingFang SC-Bold, PingFang SC;
          font-weight: 700;
          border-bottom: 1px solid #f4f4f4;
        }
      }
      .cont-bottom {
        flex: 1;
        padding: 10px;
      }
      .PieDevicetype {
        background: rgba(2, 29, 159, 0.7);
      }
    }
  }
}
</style>
子组件-DatavTable.vue
<template>
  <div id="DatavTable">
    <dv-scroll-board
      :config="config"
      ref="scrollBoard"
      style="width:100%;height:100%"
    />
  </div>
</template>
​
<script>
export default {
  name: 'DatavTable',
  data () {
    return {
      // 配置
      config: {
        // 标头
        header: ['列1', '列2', '列3'],
        // 数据
        data: [],
        // 是否开启序号
        index: true,
        // 宽度-按照顺序-不写就是平均分配
        columnWidth: [50],
        // 居中方式
        align: ['center', 'center', 'center', 'center'],
        // 滚动时间-每条
        waitTime: 3500,
        // 序号别名
        indexHeader: '排名'
      },
      // 定时器加载数据
      time: null,
      // datav数据刷新间隔
      datavNumber: 5,
      // datav下标
      datavIndex: 15,
      // 追加数据
      addlist: [],
 // 禁止鼠标悬浮暂停
      hoverPause: false
    }
  },
  created () {
    // 模拟调接口-等待data-html加载完毕-不然取不到数据会报错
    this.$nextTick(() => {
      this.doUpdate()
    })
  },
  methods: {
    // 测试方法-测试直接往config.data添加数据时,轮播表数据是否会刷新
    ceshi () {
      this.config.data.push(
        ['行', '行1', '行1列3'],
        ['行', '行2', '行2列3'],
        ['行', '行3', '行3列3'],
        ['行', '行4', '行4列3'],
        ['行', '行5', '行5列3'],
        ['行', '行6', '行6列3'],
        ['行', '行7', '行7列3'],
        ['行', '行8', '行8列3'],
        ['行', '行9', '行9列3'],
        ['行', '行1', '行10列3']
      )
      // 解决办法-1
      // 重新new一个对象-轮播数据确实更新了,
      // 缺点-没有衔接滚动,又从1开始滚动
      // this.config = { ...this.config }
      console.log('this.config.data', this.config.data)
    },
    doUpdate () {
      if (this.addlist.length < 10) {
        console.log('第一次')
        // 调用第一次接口赋值数据-模拟
        this.config.data = [
          ['行1列1', '行1列2', '行1列3'],
          ['行2列1', '行2列2', '行2列3'],
          ['行3列1', '行3列2', '行3列3'],
          ['行4列1', '行4列2', '行4列3'],
          ['行5列1', '行5列2', '行5列3'],
          ['行6列1', '行6列2', '行6列3'],
          ['行7列1', '行7列2', '行7列3'],
          ['行8列1', '行8列2', '行8列3'],
          ['行9列1', '行9列2', '行9列3'],
          ['行10列1', '行10列2', '行10列3']
        ]
        // 记录数据-
        this.addlist = [
          ['行1列1', '行1列2', '行1列3'],
          ['行2列1', '行2列2', '行2列3'],
          ['行3列1', '行3列2', '行3列3'],
          ['行4列1', '行4列2', '行4列3'],
          ['行5列1', '行5列2', '行5列3'],
          ['行6列1', '行6列2', '行6列3'],
          ['行7列1', '行7列2', '行7列3'],
          ['行8列1', '行8列2', '行8列3'],
          ['行9列1', '行9列2', '行9列3'],
          ['行10列1', '行10列2', '行10列3']
        ]
      }
      //   开始判断加载数据
      console.log('this.config.data.length', this.config.data.length)
      console.log('this.config.data', this.config.data)
      console.log('this.addlist', this.addlist.length)
​
      // 第二次加载
      if (this.addlist.length > 10) {
        console.log('第二次执行')
        // 刷新时间10次
        this.datavNumber = 10
      }
​
      // 先清空-在触发
      // 不这样写,修改时间间隔后,定时器时间间隔不会修改
      clearInterval(this.time)
      this.time = setInterval(this.datavloaddata, 3500 * this.datavNumber)
    },
    // datav-添加数据方法
    datavloaddata () {
      // 页码加一
      console.log('执行调接口-第二次')
      let a = [
        ['行', '行1', '行1列3'],
        ['行', '行2', '行2列3'],
        ['行', '行3', '行3列3'],
        ['行', '行4', '行4列3'],
        ['行', '行5', '行5列3'],
        ['行', '行6', '行6列3'],
        ['行', '行7', '行7列3'],
        ['行', '行8', '行8列3'],
        ['行', '行9', '行9列3'],
        ['行', '行1', '行10列3']
      ]
      // 模拟调接口赋值数据-res.data - 轮播数据
      this.addlist = [...this.addlist, ...a]
​
      // 数据保存一份-没有什么作用
      // this.config.data = this.addlist
​
      // 开始轮播数据下标-建议传
      // 不传也可以-不会影响太大
      // 传的话就是添加数据开始每次数据长度-15 因为一屏可以显示5个,
      // 或者是第一次是5 每次加10 - 比较麻烦
      let c = this.addlist.length - this.datavIndex
      console.log('this.addlist.length', this.addlist.length)
      console.log('this.datavIndex', this.datavIndex)
      console.log('c', c)
​
      // 解决方法二-使用updateRows()方法追加数据
      // 优点-无限追加数据-无缝衔接
      // 缺点-不能直接使用,需要代码触发(比如定时器)这个方法相当于一个缓存,并不会直接把数据更新到config里面
      // 就更element-table表格选中道理一样,必须先渲染数据表格,才能通过方法选中(直接写死是选中不了-可能没有标记)
      // this.$refs['scrollBoard'].updateRows(this.addlist,c)
      this.$refs['scrollBoard'].updateRows(this.addlist)
​
      // 配置数据-上面赋值了就会变,不赋值是不会变(因为updateRows()方法-不会修改config里面数据)
      console.log('this.config.data', this.config.data)
      // 执行下一次
      this.doUpdate()
    }
  },
  beforeDestroy () {
    // 在页面销毁后,清除计时器
    clearInterval(this.time)
  }
}
</script>
​
<style lang="scss" scoped>
#DatavTable {
  width: 100%;
  height: 100%;
}
</style>

总结:

经过这一趟流程下来相信你也对 datav-实现轮播表,使用updateRows方法-无缝衔接加载数据 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

有什么不足的地方请大家指出谢谢 -- 風过无痕

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ-RocketMQ高性能核心原理节点(流程图)

NamesrvServer启动流程图&#xff1a; namesrvServer启动简图&#xff1a; Broker服务启动过程流程图 Broker服务启动过程流程简图 整体RPC框架流程如下图 client: DefaultMQProducer

CTF刷题记录

刷题 我的md5脏了KFC疯狂星期四坤坤的csgo邀请simplePHPcurl 我的md5脏了 g0at无意间发现了被打乱的flag&#xff1a;I{i?8Sms??Cd_1?T51??F_1?} 但是好像缺了不少东西&#xff0c;flag的md5值已经通过py交易得到了&#xff1a;88875458bdd87af5dd2e3c750e534741 flag…

2024美赛备战1--数据处理(数据预处理,异常值处理,预测模型,插值拟合 *****必看****)

1.数据预处理 所谓数据预处理&#xff0c;就是指在正式做题之前对数据进行的一些处理。在有些情 况下&#xff0c;出题方提供的数据或者网上查找的数据并不能直接使用&#xff0c;比如缺少数据甚 至是异常数据&#xff0c;如果直接忽略缺失值&#xff0c;或者没发现异常数据&am…

idea java 创建 hellword 项目

1.概要 建立一个最简单的工程&#xff0c;开始编码。 2.试验过程 2.1 创建的过程很简单&#xff0c;除了第一个窗口选择“java 模块”&#xff0c;其他的都是下一步。 2.2 还有就是刚创建的工程什么都没有需要&#xff0c;自己创建一个启动的类和启动函数。 2.3 运行和运行…

随机生成验证码的jar包

这是已经开发好的验证码&#xff0c;咱们直接调用接口&#xff0c;拿过来直接用就可以了 链接&#xff1a;https://pan.baidu.com/s/1QMPhW5UzxmhIa7THFab5hw 提取码&#xff1a;6666 下面演示一下&#xff1a; 首先创建一个Code来先生成随机验证码&#xff0c;然后传…

一个音乐能够做成二维码吗?音乐的活码制作技巧

一个音乐能够做成二维码后展示吗&#xff1f;现在以二维码为载体来储存内容的方式越来越常见&#xff0c;比如图片、文件、视频、音频都可以做成二维码展示&#xff0c;人们也更习惯去扫码获取内容。音频作为日常工作生活中常用的一种内容&#xff0c;可以用音频二维码生成器来…

如何在Word中简洁地插入代码

如何在Word中简洁地插入代码 背景&#xff1a; ​ 最近在一写一些论文或者报告的时候&#xff0c;需要将源代码放在论文的最后&#xff0c;有一个很头疼的问题&#xff0c;如果直接把代码从编辑器复制到word中&#xff0c;就变成了下面这个样子&#xff1a; 这有点丑陋啊&…

2023-12学习笔记

1.NonNull要手动写无参构造器 这是一个我今天研究了很久的问题&#xff0c;开始不知道原因是在这里&#xff0c;还在那想是不是Data覆盖了无参构造&#xff0c;结果当然不是。先说下解决历程 1.问题起因 通过RequestBody接收前端报文的时候报错&#xff0c;大致是说我构造方…

【算法提升—力扣每日一刷】五日总结【12/06--12/10】

2023/12/06 力扣每日一刷&#xff1a;206. 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2…

马云说的AI电商真的要来了?AR技术虚拟试穿公司ZERO10引入AI人工智能模型,未来试衣间就应这样!

ZERO10 是一家提供虚拟试穿体验的公司&#xff0c;他们基于自家的 AR 技术&#xff0c;提供高度逼真且顶尖的虚拟试穿体验。与现有的技术不同&#xff0c;他们的生成式人工智能试穿技术只需要 1-5 张用户照片&#xff0c;就可以实现虚拟试穿。这种方法为规模化应用提供了巨大机…

jquery手写广告轮播图,无限循环功能

说明 在很多情况下&#xff0c;我们都需要开发广告轮播图&#xff0c;当我们进行页面的功能开发时&#xff0c;采用轮播图来实现也行&#xff0c;但是很多情况下&#xff0c;我们只需要简单的控制轮播循环轮播展示即可&#xff0c;所以用jq开开发广告轮播波&#xff0c;自定义…

NR重写console.log 增加时间信息

如题&#xff0c;默认console.log输出的日志是13位的时间戳&#xff0c;然后不方便查看与对比代码运行点的耗时&#xff0c;我们可以简单地重写 console.log方法&#xff0c;增加自定义时间戳格式&#xff0c;如下是增加时间&#xff08;时&#xff0c;分&#xff0c;秒&#x…

dirmap 工具学习

dirmap 1.1 工具的下载路径1.2 工具的安装流程1.3 工具的详细使用参数说明测试实验 1.1 工具的下载路径 dirmap 是一个高级 web 目录扫描工具&#xff0c;基于 python3 开发、运行&#xff0c;功能将会强于 DirBuster、Dirsearch、cansina、御剑。 github 下载地址 1.2 工具…

日本服务器:确保其稳定性的几个要点

​  在租用日本服务器时&#xff0c;用户们大多一定会关注它的稳定性&#xff0c;其实这些顾及都是正常的。毕竟&#xff0c;网站要想正常运行&#xff0c;保障服务器稳定是关键。本文将讨论有关如何保障日本服务器稳定性的一些有用技巧&#xff0c;希望对您有所帮助。 1.注重…

西工大网络空间安全学院计算机系统基础实验二(清楚实验框架及phase_1)

首先&#xff0c;将自己的实验包从Windows系统中使用scp命令传到Linux虚拟机中。而要想传到Linux虚拟机中&#xff0c;第一步就是要确定Linux虚拟机的IP地址&#xff0c;如 图1&#xff1a;确定Linux虚拟机的IP地址 所示。接着使用scp命令将实验包从Windows系统传送到Linux虚拟…

Linux系统的各项命令

文章目录 Linux系统的目录结构Linux路径的描述方式Linux命令入门**什么是命令、命令行**Linux命令基础格式 ls命令入门HOME目录和工作目录ls命令的参数和选项ls命令的 -a选项ls命令的 -l选项ls命令选项的组合使用ls选项和参数的组合使用ls命令的 -h选项 目录切换相关命令&#…

迅为RK3568开发板使用OpenCV处理图像(颜色转换)

1 颜色转换 本小节代码在配套资料“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程 \04_OpenCV 开发配套资料\05”目录下&#xff0c;如下图所示&#xff1a; cv2.cvtColor()函数功能&#xff1a; 将一幅图像从一个色彩空间转换到另一个色彩空间。 函数原型&#xff…

使用pe安装windows操作系统

一、系统安装前准备工作&#xff0c;制作系统盘 &#xff08;1&#xff09;拷贝电脑上的资料 &#xff08;2&#xff09;准备一个至少8G的U盘 &#xff08;3&#xff09;下载windows镜像文件及pe软件 通过百度网盘可下载下列软件及镜像 windows镜像文件&#xff08;百度网盘…

Shell三剑客:正则表达式简介

前言 一、名称解释 正则表达式&#xff08;regular expression&#xff0c;RE&#xff09;是一种字符模式&#xff0c;用于在查找过程中匹配指定的字符。在大多数程序里&#xff0c;正则表达式都被置于两个正斜杠之间&#xff1b;例如/l[oO]ve/就是由正斜杠界定的正则表达式&am…

无需公网IP联机Minecraft,我的世界服务器本地搭建教程

目录 前言 1.Mcsmanager安装 2.创建Minecraft服务器 3.本地测试联机 4. 内网穿透 4.1 安装cpolar内网穿透 4.2 创建隧道映射内网端口 5.远程联机测试 6. 配置固定远程联机端口地址 6.1 保留一个固定TCP地址 6.2 配置固定TCP地址 7. 使用固定公网地址远程联机 8.总…