当前位置: 首页 > article >正文

vxe-table制作高亮刷新功能

start

记录一下 vxe-table 实现表格新增数据背景闪烁功能。

1. 效果

2. demo代码

<template>
  <div id="app">
    <div @click="tomato">点我新增数据 lazy_tomato</div>
    <vxe-grid ref='xTable' :height="height" :columns="columns" :data="data" :scroll-y="{ enabled: true }"
      :row-class-name="getRowClassName" :row-config="{ keyField: 'id', useKey: true }">
    </vxe-grid>
  </div>
</template>

<script>
export default {
  data () {
    let that = this
    return {
      border: true,
      height: 500,
      columns: [
        { type: 'seq', width: 50 },
        { field: 'name', title: 'Name' },
        { field: 'sex', title: 'Sex', showHeaderOverflow: true },
        { field: 'address', title: 'Address', showOverflow: true },
      ],
      data: [],
      rowClassName ({ row }) {
        let index = that.list.indexOf(row.id)
        if (index !== -1) {
          return 'animating'
        }
        return ''
      },
      list: []
    }
  },
  mounted () {
    const list = []
    for (let index = 0; index < 700; index++) {
      list.push({
        name: `名称${index}`,
        id: index,
        nickname: 'T1',
        role: 'Develop',
        sex: 'Man',
        age: 0,
        address: 'Shenzhen',
      })
    }
    this.data = list
  },
  methods: {
    getRowClassName ({ row, rowIndex }) {

      let a = row.isAnimating ? 'animating' : '';

      if (rowIndex === 0) {
        a = a + ' ' + new Date().getTime()
      }
      return a
    },
    tomato () {
      let length = 2
      console.log(length)
      let a = new Date().getTime()
      let newRows = []
      for (let index = 0; index < length; index++) {
        newRows.push({ // 你的数据结构
          id: a + 'tomato' + index,
          name: '随机数据' + a + index,
          // 添加动画标识
          isAnimating: true
        })
      }


      this.data.unshift(...newRows);

      // 遍历每条新数据,设置定时器移除动画标识
      setTimeout(() => {
        newRows.forEach((row, index) => {
          row.isAnimating = false;
        });

        newRows = null
      }, 2000);  // 动画时间为2秒,设置适合的间隔


    }
  }
}
</script>
<style>
@keyframes fadeToWhiteRGBA {
  0% {
    background-color: pink;
  }

  /* 接近白色的淡蓝色 */
  100% {
    background-color: #fff;
  }

  /* 白色 */
}

.animating {
  animation: fadeToWhiteRGBA 2s linear;
}
</style>

3.难点说明

3.1 动画实现

最简单的还是使用css的animation属性,实现动画效果即可,当元素加载时会播放动画。在vue等框架中,组件更新也会重新渲染dom更新动画。

3.2 vxe-table首行不更新动画

在我自己实现功能的时候,发现首行的样式不会更新,排查了一下原因,可能是和 vue的diff算法有关,需要给虚拟节点 vnode增加一个key,标志组件唯一即可。(加上如下配置)

:row-config="{ keyField: 'id', useKey: true }"

3.3 vue-table 虚拟滚动失效

在使用vue-table的时候,发现虚拟滚动失效了,后面发现这几个原因,记录一下

  1. 要设置高度或最大高度。
  2. 是否开启了虚拟滚动
  3. 如何和树状效果一起使用,tree-config:{},不能等于空对象。


http://www.kler.cn/a/324161.html

相关文章:

  • pytest在conftest.py中实现用例执行失败进行截图并附到allure测试报告
  • 2024强化学习的结构化剪枝模型RL-Pruner原理及实践
  • DVWA靶场通关——SQL Injection篇
  • # 第20章 Cortex-M4-触摸屏
  • 使用 Redis 作为消息队列 - Pub/Sub, List, SortedSet
  • 11.08-10.14谷粒商城
  • C#源码安装ZedGraph组件,并且立即演示使用
  • 代码随想录训练营第46天|回文子序列
  • 高通Camx-内存池架构/ImageBuffer
  • Linux进程的学习(持续更新)
  • java后端传时间戳给前端的三种方式
  • 学习C语言(21)
  • videojs 播放mp4视频只有声音没有画面问题
  • k8s搭建一主三从的mysql8集群---无坑
  • 【深度学习】注意力机制与自注意力机制详解
  • Docker学习路线
  • 将 Java 对象自动转换为 XML 字符串
  • 电子数据交换EDI 835 的处理
  • Spring Boot 进阶- Spring Boot 自定义拦截器详解
  • 中药材识别
  • 前置机、跳板机、堡垒机:安全运维领域的“黄金三角”
  • stm32 FLASH闪存(读写内部FLASH读取芯片ID)
  • Mac下利用vscode配置latex
  • 记一次因视频编码无法在浏览器播放、编码视频报错问题
  • 软件测试学习路线图
  • 【有啥问啥】深度解析迁移学习(Transfer Learning)