<template>
  <el-table
    class="tableList"
    ref="rw_table"
    height="700"
    solt="append"
    :data="useData"
    :row-class-name="tableRowClassName"
    @cell-mouse-enter="mouseEnter"
    @cell-mouse-leave="mouseLeave"
  >
    <el-table-column
      prop="username"
      label="姓名"
    />
    </el-table-column>
    <el-table-column
      label="备注"
    >
      <template slot-scope="scope">
        <span>{{ getNote(scope.row) }}</span>
      </template>
    </el-table-column>
  </el-table>
</template>
<script>
export default {
  name: 'TableObj',
  props:{
    tableData:{
      type: Array,
      default:()=>{
        return []
      }
    }
  },
  data () {
    return {
      useData:[],
      autoPlay:false,
      timer:undefined
    }
  },
  watch:{
    tableData:{
      deep:true,
      handler(v){
        if(v&&v.length){
          this.startRolling = false
          let data = []
          for(let i in v){
            data.push(v[i])
          }
          this.useData = data
          this.autoPlay = true
          this.startMove()
        }
      }
    }
  },
  methods: {
    // 鼠标进入
    mouseEnter() {
      this.autoPlay = false
    },
    // 鼠标离开
    mouseLeave() {
      this.autoPlay = true
    },
    startMove(){
      // 拿到表格挂载后的真实DOM
      const table = this.$refs.rw_table
      if(table){
        // 拿到表格中承载数据的div元素
        const divData = table.bodyWrapper
        if(divData){
          if(this.timer){
            clearInterval(this.timer)
          }
          // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素)
          this.timer = setInterval(() => {
            if(this.autoPlay){
              // 元素自增距离顶部1像素
              if(divData.scrollTop>=48){
                const item = this.useData.shift();
                this.useData.push(item)
                divData.scrollTop-=48
              }
              divData.scrollTop += 1
            }
          }, 50)
        }
      }
    },
    getStatus(row){
      let status = ''
      if(row.workType){
        switch(row.workType){
          case 1:
            status = `在岗`;
            if(row.workplace){
              status +=`(${row.workplace})`
            }
            break;
      }
      return status;
    },
    getNote(row){
      let not = ''
      if(row.workType!==1&&row.handoverName){
        not = `工作交接${row.handoverName}`
        if(row.handoverPos){
          not += ` (${row.handoverPos})`
        }
      }
      return not
    },
    tableRowClassName({row}) {
      let className = ''
      if(row.workType){
        switch(row.workType){
          case 1:
            className = 'onJob';
            break;
        }
      }
      return className;
    }
  }
}
</script>

vue element ui table 自动无限滚动组件的更多相关文章

  1. Vue+element ui table 导出到excel

    需求: Vue+element UI table下的根据搜索条件导出当前所有数据 参考: https://blog.csdn.net/u010427666/article/details/792081 ...

  2. vue+element ui 的表格列使用组件

    前言:工作中用到 vue+element ui 的前端框架,有这个场景:很多表格的列有许多一样的,所以考虑将列封装为组件.转载请注明出处:https://www.cnblogs.com/yuxiaol ...

  3. vue+element ui table组件封装,使用render渲染

    后台管理经常会用到表格,一开始封装了一个常用的功能性表格,点击这里: 后来由于需求增加,在表格中还会用到switch,select,input等多种组件,每次都要在html中增加<el-tabl ...

  4. Vue+element UI实现“回到顶部”按钮组件

    介绍 这是一个可以快速回到页面顶部的组件,当用户浏览到页面底部的时候,通过点击按钮,可快速回到页面顶部. 使用方法 由于该组件是基于element-UI进行二次封装的,所以在使用该组件时请务必安装el ...

  5. vue + element ui table表格二次封装 常用功能

    因为在做后台管理项目的时候用到了大量的表格, 且功能大多相同,因此封装了一些常用的功能, 方便多次复用. 组件封装代码: <template> <el-table :data=&qu ...

  6. Element UI table组件源码分析

    本文章从如下图所示的最基本的table入手,分析table组件源代码.本人已经对table组件原来的源码进行削减,源码点击这里下载.本文只对重要的代码片段进行讲解,推荐下载代码把项目运行起来,跟着文章 ...

  7. vue+element ui 的上传文件使用组件

    前言:工作中用到 vue+element ui 的前端框架,使用到上传文件,则想着封装为组件,达到复用,可扩展.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9 ...

  8. vue+element ui中select组件选择失效问题原因与解决方法

    codejing 2020-07-10 09:13:31  652  收藏 分类专栏: Web Vue Element UI 版权 .当表单form赋完值后,如果后续又对form中某一属性值进行操作如 ...

  9. VUE -- 对 Element UI table中数据进行二次处理

    时间——日期 后台经常给我们返回的是 时间戳 (例如:1535620671) 这时候我们页面展现的时候需要将时间戳转换为我们要的格式 例如 (YYYY-MM-DD HH:mm:ss) 如果是在Elem ...

  10. vue + element ui 实现实现动态渲染表格

    前言:之前需要做一个页面,能够通过表名动态渲染出不同的表格,这里记录一下.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9786326.html 网站地址:我的 ...

随机推荐

  1. vue项目部署在nodejs+express

    一.安装node和打包vue项目就不用多说了 二.安装express Express是一个保持最小规模的灵活的Node.js web应用程序开发框架,为web和移动应用程序提供一组强大的功能 npm ...

  2. vue3 语法糖setup 兄弟组件传值

    使用 mitt // 全局引入 npm install mitt 或者 cnpm install mitt 在main文件中挂载 import { createApp } from 'vue' imp ...

  3. HGAME 2023 WP week1

    WEEK1 web Classic Childhood Game 一眼顶真,直接翻js文件,在Events.js中找到mota(),猜测是获取flag,var a = ['\x59\x55\x64\x ...

  4. sqllabs:less18-22

    在利用抓包工具进行抓包的时候,我们能看到很多的项,下面详细讲解每一项. HTTP 头部详解 1. Accept:告诉 WEB 服务器自己接受什么介质类型,/ 表示任何类型,type/* 表示该类型下的 ...

  5. el-input只能输入数字和小数

    1.oninput ="value=value.replace(/[^\d]/g,'')" //只能输入数字 2.oninput ="value=value.replac ...

  6. sys.argv的用法

    一.Python sys 模块 "sys" 是 "system",是一个系统模块,该模块提供了一些接口,用户访问python解释器自身使用和维护的变量,同时模块 ...

  7. SpringMVC基础源码分析(一)

    实现Controller的三种方式分析 每种实现的方式对应的HanderAdapter都不同. 实现Controller接口 该接口对应的HanderAdapter为SimpleControllerH ...

  8. pat乙级1014 福尔摩斯的约会

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> int ...

  9. k8s网路策略

    Network Policy(网络策略) 默认情况下,k8s集群网络是没有任何限制的,Pod可以和任何其他Pod通信,在某些场景下需要做网络控制,减少网络面的攻击,提高安全性,就会用到网络策略(Net ...

  10. c++ class基础知识

    目录 class 创建对象 通过对象指针访问类成员 类方法可以定义在类体外部(要用到域解析符:. 类成员/类方法访问权限 构造函数 析构函数Destructor this指针 静态变量 静态函数 co ...