需求
相同的内容,在不同屏幕分辨率下,有存在显示不完全的情况,此时需要要实现自动滚动效果。
1、当内容超过高度时,开启自动滚动
2、默认向下滚动,触底后停止一段时间后,向上滚动
3、向上滚动同理
4、点击停止滚动,延迟一段时间后继续滚动
方案选择
1、 使用css中的transition和transform?
实现过于复杂,不采用
2、使用js中的setInterval
可行
代码实现
<template> <div :id="scrollId" style="border:1px solid red; height: 300px; width: 200px; overflow-y: scroll; position: absolute; text-align: center; top: 10%; left: 40%;" > <div> 滚动内容1<br> 滚动内容2<br> 滚动内容3<br> 滚动内容4<br> 滚动内容5<br> 滚动内容6<br> 滚动内容7<br> 滚动内容8<br> 滚动内容9<br> 滚动内容10<br> 滚动内容11<br> 滚动内容12<br> 滚动内容13<br> 滚动内容14<br> 滚动内容15<br> 滚动内容16<br> 滚动内容17<br> 滚动内容18<br> </div> </div> </template> <script> export default { data() { return { scrollTimer: null, // 滚动定时器 pauseTimer: null, // 暂停定时器 scrollId: 'scrollId', // 滚动容器id scrollDirection: 'down' // 滚动方向 up向上 down向下 } }, destroyed() { // 清理定时器 clearTimeout(this.pauseTimer) this.pauseTimer = null clearInterval(this.scrollTimer) this.scrollTimer = null // 清理点击监听 window.document.removeEventListener('click', this.pauseScroll) }, mounted() { this.dataCompleteFun() }, methods: { // 数据加载完成方法 dataCompleteFun() { // 开启滚动 this.autoScroll() }, autoScroll() { const scrollHeight = document.getElementById(this.scrollId).scrollHeight const clientHeight = document.getElementById(this.scrollId).clientHeight const scroll = scrollHeight - clientHeight // 滚动长度为0 if (scroll === 0) { return } // 触发滚动方法 this.scrollFun() // 去除点击监听 window.document.removeEventListener('click', this.pauseScroll) // 重设点击监听 window.document.addEventListener('click', this.pauseScroll, false) }, pauseScroll() { // 定时器不为空 if (this.scrollTimer) { // 清除定时器 clearInterval(this.scrollTimer) this.scrollTimer = null // 一秒钟后重新开始定时器 this.pauseTimer = setTimeout(() => { this.scrollFun() }, 2000) } }, scrollFun() { // 如果定时器存在 if (this.scrollTimer) { // 则先清除 clearInterval(this.scrollTimer) this.scrollTimer = null } this.scrollTimer = setInterval(() => { const scrollHeight = document.getElementById(this.scrollId).scrollHeight const clientHeight = document.getElementById(this.scrollId).clientHeight const scroll = scrollHeight - clientHeight // 获取当前滚动条距离顶部高度 const scrollTop = document.getElementById(this.scrollId).scrollTop // 向下滚动 if (this.scrollDirection === 'down') { const temp = scrollTop + 1 document.getElementById(this.scrollId).scrollTop = temp // 滚动 // 距离顶部高度 大于等于 滚动长度 if (scroll <= temp) { // 滚动到底部 停止定时器 clearInterval(this.scrollTimer) this.scrollTimer = null // 改变方向 this.scrollDirection = 'up' // 一秒后重开定时器 setTimeout(() => { this.scrollFun() }, 1000) } // 向上滚动 } else if (this.scrollDirection === 'up') { const temp = scrollTop - 0.5 document.getElementById(this.scrollId).scrollTop = temp // 滚动 // 距离顶部高度 小于等于 0 if (temp <= 0) { // 滚动到底部 停止定时器 clearInterval(this.scrollTimer) this.scrollTimer = null // 改变方向 this.scrollDirection = 'down' // 一秒后重开定时器 setTimeout(() => { this.scrollFun() }, 1000) } } }, 150) } } } </script>
发表评论