VUE中如何让滚动条保持在最底部(数据实时更新,页面高度随时变化)

先说需求:

  1. 数据实时更新渲染到页面
  2. 页面高度随数据更新变化
  3. 默认页面显示当前更新内容即滚动条处于页面最底部
  4. 当用户进行鼠标滚轮向上滚动或者拖动滚动条向上时停止滚动条处于页面最底部操作
  5. 当用户进行上一步操作后又向下滚动时 继续让滚动条保持最下

思路:

  1. 首先得监听页面的scroll时间并判断是向上或者向下滚动
  2. 让滚动条保持在页面最底部
 data() {
        return {
            oldScrollTop:0,
            scrollFlag:true,
            Intervall:null,
        }
    },
   mounted() {
   		this.getUpdataData()
   		//监听滚动事件
        document.querySelector(".box").addEventListener('scroll',this.scrolling)
        
        this.scrollToBottom();
    },
      destroyed(){
      	// 销毁监听滚动事件
         document.querySelector(".consoleBox").removeEventListener('scroll',this.scrolling)
    },
methods:{
	//滚动条保持最底部方法
	scrollToBottom () {
            this.$nextTick(() => {
                var container = this.$el.querySelector(".box");
                container.scrollTop = container.scrollHeight;
            })
        },
        
		scrolling() {
            let scrollTop = document.querySelector(".box").scrollTop 
            // 更新——滚动前,滚动条距文档顶部的距离
            let scrollStep = scrollTop - this.oldScrollTop;
            this.oldScrollTop = scrollTop;
            //判断当前是向上or向下滚动
            if (scrollStep < 0) {
            	//向上
            	console.log("正在向上滚动")
                this.scrollFlag=false
            }else{
            console.log("正在向下滚动")
                this.scrollFlag=true
            } 
        },
		getUpdataData(){
					//定时获取后台返回数据
		 			this.Interval=setInterval(()=>{
		 				  ajax("/xxx/xxx/xx").then(res=>{
			    			//更新数据
							this.xxx=res.data
							//当数据更新完毕清除定时器
							if(res.code===0){
								clearInterval(this.Interval)
							}
			   	 		})
			   	 		//调用保持滚动条方法(这一步也可以在updated生命周期调用)
                        if(this.scrollFlag){
                           	 	this.scrollToBottom();
                       	}
                   },1000)
		}
}

定义滚动条样式:

<style scoped>
    .consoleBox {
        width: 100%;
        min-height: 500px;
        max-height: 1780px;
        overflow-x: hidden;
        overflow-y: auto;
    }

    .consoleBox::-webkit-scrollbar {
        width: 10px !important; /*高宽分别对应横竖滚动条的尺寸*/
        height: 1px !important;
    }

    .consoleBox::-webkit-scrollbar-thumb {
        /*滚动条里面小方块*/
        border-radius: 10px !important;
        background-color: skyblue !important;
        /*background-color: 0096c7 !important;*/
        background-image: -webkit-linear-gradient(
                45deg,
                rgba(255, 255, 255, 0.2) 25%,
                transparent 25%,
                transparent 50%,
                rgba(255, 255, 255, 0.2) 50%,
                rgba(255, 255, 255, 0.2) 75%,
                transparent 75%,
                transparent
        );
    }

    .consoleBox::-webkit-scrollbar-track {
        /*滚动条里面轨道*/
        box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
        background: #ededed;
        border-radius: 10px;
    }

</style>

仅为了方便自己以后遇到同样问题查阅,
希望帮助到遇到同样需求的同学,
有需要优化的地方请大佬不吝指正

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值