当前位置:首页 » 《随便一记》 » 正文

前端利用JS实现自定义表格滚动效果

21 人参与  2024年09月19日 11:21  分类 : 《随便一记》  评论

点击全文阅读


在数据可视化大屏中会有滚动表格的需求,不使用插件自己封装重复使用!!!!

好久不见!话不多说,直接上代码!!!!!!!!!!

一、利用scrollTop、定时器实现滚动效果

scrollTop为元素滚动条滚动距离

roll(t) {            var box1 = document.getElementById("box1");            var box2 = document.getElementById("box2");            var table = document.getElementById("table");            table.scrollTop = 0; // 开始无滚动时设为0 滚动距离            // 当内容小于父元素不实现滚动            if (box1.scrollHeight >= table.scrollHeight) {                box2.innerHTML = box1.innerHTML;            }            this.timer = setInterval(this.rollStart, t); // 设置定时器,参数t用在这为间隔时间(单位毫秒),参数t越小,滚动速度越快            // 鼠标移入div时暂停滚动            table.onmouseover = () => {                clearInterval(this.timer);            }            // 鼠标移出div后继续滚动            table.onmouseout = () => {                this.timer = setInterval(this.rollStart, t);            }        },        rollStart() {            // 上面声明的DOM对象为局部对象需要再次声明            var box1 = document.getElementById("box1");            var table = document.getElementById("table");            // 正常滚动不断给scrollTop的值+1,当滚动高度大于列表内容高度时恢复为0,scrollTop滚动条滚动的距离            if (table.scrollTop >= box1.scrollHeight) {                table.scrollTop = 0;            } else {                table.scrollTop += 1;            }        }

 二、效果展示

三、完整代码实现
<template>    <div>        <div class="cont">            <div class="title-cont">                <div class="title" v-for="item in titleList">                    {{ item.title }}                </div>            </div>            <div class="table" id="table">                <div id="box1">                    <div class="content" v-for="item in tableData">                        <div class="item">{{ item.name }}</div>                        <div class="item">{{ item.phone }}</div>                        <div class="item">{{ item.age }}</div>                    </div>                </div>                <div id="box2"></div>            </div>        </div>    </div></template><script>export default {    data() {        return {            titleList: [                {                    title: '姓名'                },                {                    title: '电话'                },                {                    title: '年龄'                }            ],            tableData: [                {                    name: '张三',                    phone: '1515151',                    age: '23'                },                {                    name: '李四',                    phone: '1515151',                    age: '23'                },                {                    name: '王五',                    phone: '1515151',                    age: '23'                },                {                    name: '赵六',                    phone: '1515151',                    age: '23'                },                {                    name: '田七',                    phone: '1515151',                    age: '23'                },                {                    name: '田八',                    phone: '1515151',                    age: '23'                },                {                    name: '张三丰',                    phone: '1515151',                    age: '23'                },                {                    name: '张无忌',                    phone: '1515151',                    age: '23'                }            ],            timer: null,        }    },    mounted() {        this.$nextTick(() => {            this.roll(20);        })    },    methods: {        roll(t) {            var box1 = document.getElementById("box1");            var box2 = document.getElementById("box2");            var table = document.getElementById("table");            table.scrollTop = 0; // 开始无滚动时设为0 滚动距离            if (box1.scrollHeight >= table.scrollHeight) {                box2.innerHTML = box1.innerHTML;            }            this.timer = setInterval(this.rollStart, t); // 设置定时器,参数t用在这为间隔时间(单位毫秒),参数t越小,滚动速度越快            // 鼠标移入div时暂停滚动            table.onmouseover = () => {                clearInterval(this.timer);            }            // 鼠标移出div后继续滚动            table.onmouseout = () => {                this.timer = setInterval(this.rollStart, t);            }        },        rollStart() {            // 上面声明的DOM对象为局部对象需要再次声明            var box1 = document.getElementById("box1");            var table = document.getElementById("table");            // 正常滚动不断给scrollTop的值+1,当滚动高度大于列表内容高度时恢复为0,scrollTop滚动条滚动的距离            if (table.scrollTop >= box1.scrollHeight) {                table.scrollTop = 0;            } else {                table.scrollTop += 1;            }        }    }}</script><style lang="scss" scoped>.cont {    width: 50vw;    height: 50vh;    margin: 0 auto;    .table {        margin: 0 auto;        width: 300px;        height: 200px;        border: 1px solid #ddd;        overflow: hidden;        .content {            width: 100%;            height: 40px;            display: flex;            align-items: center;            justify-content: center;            .item {                width: 100px;                height: 40px;                text-align: center;                line-height: 40px;            }        }    }    .title-cont {        display: flex;        align-items: center;        justify-content: center;        .title {            width: 100px;            height: 40px;            text-align: center;            line-height: 40px;            border: 1px solid #333;            &:not(&:first-of-type) {                border-left: none;            }        }    }}</style>

点击全文阅读


本文链接:http://zhangshiyu.com/post/161604.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1