table表格数据无缝循环向上滚动,hover后暂停滚动

3 篇文章 0 订阅
1 篇文章 0 订阅

先来效果图:

 直接复制代码到vue就好了

<template>
  <div class="listDiv">
    <div class="tableDiv" @mouseenter="stopScroll" @mouseleave="autoScroll">
      <div class="tHeaderContainer">
        <table class="tHeader">
          <thead>
            <tr ref="tr">
              <th>负责人</th>
              <th>任务</th>
              <th>备注</th>
            </tr>
          </thead>
        </table>
      </div>
      <div class="scrollContainer">
        <!-- 用ref绑定后就不需要再获取dom节点了,直接绑定table和tBody,然后$refs里面调用就行。
        在javascript里面调用:this.$refs.table  这样就可以减少获取dom节点的消耗了 -->
        <table class="tTableName" ref="table">
          <tbody  ref="tBody">
            <tr v-for="(item, index) in tableData" :key="index">
              <td>{{ item.functionary }}</td>
              <td>{{ item.task }}</td>
              <td><i class="el-icon-more"></i></td>
            </tr>
          </tbody>
        </table>
      </div>
    </div>
  </div>
</template>

<script>
let scrollTimer;
export default {
  name: "",
  components: {},
  data() {
    return {
      tableData: [
        "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
      ].reduce((pre, cur, currentIndex) => {
        let data = {};
        data.functionary = cur + "号工人";
        switch (cur) {
          case "1":
          case "5":
            data.task = "完成AAA";
            break;
          case "2":
          case "6":
            data.task = "完成BBB";
            break;
          case "3":
          case "8":
            data.task = "完成CCC";
            break;
          case "4":
          case "10":
            data.task = "完成DDD";
            break;
          case "7":
            data.task = "完成EEE";
            break;

          default:
            data.task = "完成FFF";
            break;
        }
        pre.push(data);
        // console.log(data,pre,8888);
        return pre;
      }, []),
    };
  },
  mounted() {
    this.autoScroll();
  },
  methods: {
    autoScroll() {
      const table = this.$refs.table;
      const tBody = this.$refs.tBody;
      //保留这个子节点在原先位置的显示,先用Node.cloneNode方法复制出一个节点的副本,然后再插入到新位置
      //用法:var dupNode = node.cloneNode(deep);node表示将要被克隆的节点,dupNode克隆生成的副本节点
      //deep 可选是否采用深度克隆,如果为true,则该节点的所有后代节点也都会被克隆,如果为false,则只克隆该节点本身
      //appendChild() 方法可向节点的子节点列表的末尾添加新的子节点。
      table.appendChild(tBody.cloneNode(true));
      //元素的height为在tr中设置的height: 1.8rem,所以offsetHeight始终为 1.8rem
      //(offsetHeight:包括padding、border、水平滚动条,但不包括margin的元素的高度。)
      let speed = table.getElementsByTagName("td")[0].offsetHeight;
      function scroll() {
        let top = table.offsetTop; 
        //offsetTop:DOM对象的上边距离定位父级(最近有定位属性的父级)的上边的距离,也就是table与scrollContainer的距离,初始值为0
        //tBody的offsetHeight是固定值,top表示超出tbody的部分为负数,0.5s循环一次,不断减去speed
        if (top <= speed - tBody.offsetHeight) {
          table.style.transition = "0s";
          table.style.top = 0;
        } else {
          table.style.transition = "ease 0.5s";
          table.style.top = top - speed + "px";
        }
      }
      scrollTimer = setInterval(scroll, 500);
    },
    stopScroll() {
      clearInterval(scrollTimer);
    },
  },
  computed: {},
};
</script>

<style  scoped>
.listDiv {
  width: 20%;
  height: 96%;
  display: flex;
  justify-content: center;
  align-items: center;
  margin: 1%;
  position: relative;
  background: url("../showFiles/2.jpg") no-repeat;
}

.tableDiv {
  z-index: 100;
  width: 90%;
  height: 90%;
  pointer-events: auto;
  padding: 0 1%;
  box-shadow: 0 0 1rem #b8b7b780 inset;
  -webkit-backdrop-filter: blur(4px);
  backdrop-filter: blur(4px);
}
.tableDiv::before,
.tableDiv::after {
  content: "";
  pointer-events: none;
  position: absolute;
  width: 1.5rem;
  height: 1.5rem;
  transition: 0.3s ease-in-out;
}
.tableDiv::before {
  top: -0.1rem;
  left: -0.1rem;
  border-top: 0.15rem solid #769ce2;
  border-left: 0.15rem solid #769ce2;
}
.tableDiv::after {
  right: -0.1rem;
  bottom: -0.1rem;
  border-bottom: 0.15rem solid #769ce2;
  border-right: 0.15rem solid #769ce2;
}
.tableDiv:hover::before {
  width: 100%;
  height: 100%;
  border-top: 0.15rem solid #769ce2;
  border-left: 0.15rem solid #769ce2;
  animation: glow_before 1s ease-out infinite alternate;
}
.tableDiv:hover::after {
  width: 100%;
  height: 100%;
  border-bottom: 0.15rem solid #769ce2;
  border-right: 0.15rem solid #769ce2;
  animation: glow_after 1s ease-out infinite alternate;
}

.tHeaderContainer {
  position: relative;
  height: 2.7rem;
  width: 100%;
  overflow: hidden;
}
.scrollContainer {
  position: relative;
  height: calc(100% - 2.7rem);
  width: 100%;
  overflow: hidden;
}

.tHeader,
.tTableName {
  position: absolute;
  width: 100%;
  height: 100%;
  /* border-collapse属性是运用在table标签里的, collapse值会让 边框合并为一个单一的边框。会忽略 border-spacing 和 empty-cells 属性。 */
  border-collapse: collapse;
}
tr {
  height: 2rem;
  font-size: 0.8rem;
  text-align: center;
  border-bottom: 1px dashed rgb(107, 101, 119);
}
th {
  font-size: 0.95rem;
  height: 2.5rem;
  width: 30%;
  text-align: center;
}
td {
  width: 30%;
  height: 100%;
  text-align: center;
}
@font-face {
  font-family: "sysFont";
  src: url("/static/font/时尚中黑简体.ttf");
}
@keyframes glow_before {
  0% {
    box-shadow: -0.1rem -0.1rem 0.2rem #408acf50;
  }
  100% {
    box-shadow: -0.5rem -0.5rem 1rem #769ce2;
  }
}
@keyframes glow_after {
  0% {
    box-shadow: 0.1rem 0.1rem 0.2rem #408acf50;
  }
  100% {
    box-shadow: 0.5rem 0.5rem 1rem #769ce2;
  }
}
</style>

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您的问题是关于 HTML 表格行自动向上和 jQuery 实现表格无缝向上滚动效果的方法。对于 HTML 表格行自动向上,您可以使用 JavaScript 或 jQuery 实现。 以下是使用 jQuery 实现 HTML 表格行自动向上的示例代码: ```html <!DOCTYPE html> <html> <head> <title>Table Scroll Up</title> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <style type="text/css"> #table-container { height: 200px; overflow-y: scroll; margin: 10px; border: 1px solid #ccc; } table { border-collapse: collapse; width: 100%; } table td { padding: 10px; border: 1px solid #ccc; } </style> <script type="text/javascript"> $(document).ready(function() { setInterval(function() { var firstRow = $('#table tr:first'); $('#table tr:first').remove(); $('#table').append(firstRow); }, 3000); }); </script> </head> <body> <div id="table-container"> <table id="table"> <tr> <td>Row 1, Column 1</td> <td>Row 1, Column 2</td> <td>Row 1, Column 3</td> </tr> <tr> <td>Row 2, Column 1</td> <td>Row 2, Column 2</td> <td>Row 2, Column 3</td> </tr> <tr> <td>Row 3, Column 1</td> <td>Row 3, Column 2</td> <td>Row 3, Column 3</td> </tr> <tr> <td>Row 4, Column 1</td> <td>Row 4, Column 2</td> <td>Row 4, Column 3</td> </tr> <tr> <td>Row 5, Column 1</td> <td>Row 5, Column 2</td> <td>Row 5, Column 3</td> </tr> </table> </div> </body> </html> ``` 上述代码中,我们使用 setInterval() 方法每隔 3 秒钟将表格的第一行移动到最后一行。 对于 jQuery 实现表格无缝向上滚动效果,您可以使用 jQuery 插件,比如 DataTables 或 jQWidgets。这些插件可以帮助您快速构建具有滚动效果的 HTML 表格

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值