在数据可视化大屏中会有滚动表格的需求,不使用插件自己封装重复使用!!!!
很久不见!话不多说,直接上代码!!!!!!!!!!
一、利用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>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |