vue 滚动表格,鼠标进入暂停

本文介绍如何在Vue项目中创建一个滚动表格,并实现当鼠标悬停在表格上时暂停滚动的效果。同时,根据设备状态展示不同颜色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 表格数据循环滚动

2 鼠标移到表格数据停止滚动

3 设备状态显示不同的颜色

   <el-col :span="24" class="chart" style="height: 85%;">
                  <div class="table" style="height: 98%;overflow-y:hidden;font-size:10px;" 
                   @mouseenter="mouseEnter('Dev')"
                   @mouseleave="mouseLeave('Dev')">
                    <table>
                        <thead>
                          <tr>
                          <th style="display:none">devId</th> 
                          <th>设备类型</th>
                          <th>所在地址</th>
                          <th>设备状态</th>
                          <th>最后更新数据时间</th>
                          <th>更多</th>
                        </tr>
                        </thead>
                      <tbody>
                      <tr style="height:40px" v-for="item in devInfo_tabledata"
                         >
                        <td style="display:none">{{item.devId}}</td>  
                        <td>{{item.devType}}</td>
                        <td>{{item.address}}</td>
                        <td style="color:#00FF00" v-if="item.devStatus === ''"></td>
                        <td style="color:#00FF00" v-if="item.devStatus === '正常'">{{item.devStatus}}</td>
                        <td style="color:#eeea21" v-if="item.devStatus === '睡眠'">{{item.devStatus}}</td>
                        <td style="color:red" v-if="item.devStatus === '故障'">{{item.devStatus}}</td> 
                        <td>{{item.updateTime}}</td>
                        <td style="white-space:nowrap;text-overflow:ellipsis;">设备详情</td>
                        <!-- <td> <button style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;background-color:#99CCFF">查看详情</button></td> -->
                      </tr>
                      </tbody>
                      </table>
                </div>
              </el-col>
mounted(){
this. scrollDevInfoTabledata()
},
method(){
     
 //设备列表轮播
      scrollDevInfoTabledata() {
        // this.devInfo_tabledata.push(this.deviceData[0]);
        this.devInfo_tabledata.shift();
        if (this.devInfo_tabledata.length < 6) {
        }
        this.devTimer = setTimeout(this.scrollDevInfoTabledata, 3000)
      },
    //鼠标进入表格暂停
      mouseEnter(label){
        if(label === 'Dev'){
          clearTimeout(this.devTimer);
          this.devTimer = null;}
}
      //鼠标离开表格开始轮播
mouseLeave(label){
        if(label === 'Dev'){
          this.devTimer = setTimeout(this.scrollDevInfoTabledata,3000);}
}
}

 

### Vue3 实现轮播表格功能 在 Vue3 中实现一个具有轮播效果的表格,可以通过组合 `watch` 和定器来完成自动滚动的效果。以下是详细的实现方式: #### 核心逻辑说明 为了实现轮播表格的功能,在 Vue3 的组件中需要定义几个核心部分: 1. **数据源管理**:通过数组存储表格的数据项。 2. **状态控制**:利用响应式变量记录当前显示的索引位置以及是否暂停轮播的状态。 3. **事件监听**:当鼠标进入或离开容器触发对应的函数以启动或停止轮播。 具体来说,可以按照以下结构编写代码[^1]。 #### 组件模板设计 ```html <template> <div class="carousel-container" @mouseenter="rollStop()" @mouseleave="rollStart()"> <table border="1"> <thead> <tr> <th v-for="(header, index) in headers" :key="'h' + index">{{ t(header) }}</th> <!-- 支持国际化 --> </tr> </thead> <tbody> <tr v-for="(item, idx) in visibleItems" :key="'i' + idx" :class="{ active: currentIndex === idx }"> <td>{{ item.name }}</td> <td>{{ item.value }}</td> </tr> </tbody> </table> </div> </template> ``` #### 脚本部分 ```javascript <script setup> import { ref, computed, onMounted, watchEffect } from 'vue'; import { useI18n } from 'vue-i18n'; // vue-i18n用于支持多语言 const { t } = useI18n(); // 数据源模拟 const items = [ { name: 'Item A', value: 10 }, { name: 'Item B', value: 20 }, { name: 'Item C', value: 30 } ]; // 当前可见条目数量 const visibleCount = 3; // 响应式的属性声明 const currentIndex = ref(0); let timerId = null; const isPaused = ref(false); // 计算属性获取当前展示的内容 const visibleItems = computed(() => { const startIdx = (currentIndex.value * visibleCount) % items.length; return Array.from({ length: visibleCount }, (_, i) => items[(startIdx + i) % items.length] ); }); // 表格头部字段名称(可翻译) const headers = ['Name', 'Value']; // 定义方法 roll() function roll() { if (!isPaused.value && !timerId) { timerId = setInterval(() => { currentIndex.value++; }, 2000); // 每隔两秒更新一次 } } // 方法 stopRoll(), 清除计器并标记为已暂停 function rollStop() { clearInterval(timerId); timerId = null; isPaused.value = true; } // 方法 startRoll(), 开始新的计器 function rollStart() { isPaused.value = false; roll(); } onMounted(() => { roll(); // 初始化即开始轮播 }); </script> <style scoped> .carousel-container { width: 400px; overflow: hidden; } .active td { font-weight: bold; color: red; } </style> ``` 上述代码实现了基本的轮播表格功能,并且加入了简单的样式变化以便于观察效果。其中还集成了国际化的处理机制,使得表头能够动态切换不同语言版本[^3]。 #### 注意事项 - 如果希望进一步优化性能或者增强用户体验,还可以考虑引入虚拟列表技术减少 DOM 元素渲染压力。 - 对于更复杂的场景比如异步加载更多数据等情况,则需额外增加分页请求等相关逻辑[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值