当前位置: 代码网 > it编程>编程语言>Javascript > 前端如何利用JS实现自定义表格滚动效果实例

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

2024年10月28日 Javascript 我要评论
在数据可视化大屏中会有滚动表格的需求,不使用插件自己封装重复使用!!!!好久不见!话不多说,直接上代码!!!!!!!!!!一、利用scrolltop、定时器实现滚动效果scrolltop为元素滚动条滚

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

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

一、利用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>

总结 

到此这篇关于前端如何利用js实现自定义表格滚动效果的文章就介绍到这了,更多相关js自定义表格滚动效果内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com