vue2获取div高度并默认滚动到底部

7,644 阅读1分钟

vue获取div节点,默认设置滚动到底部

前言


最近在做一个简单的聊天窗口,技术栈采用的是vue+element-ui 需求是每次进入该页面都会默认将滚动条滚动到底部,即显示最新的消息:

如果是整个页面滚动到顶部,写一句代码即可

    window.scrollTo(0,0);

获取DOM的方法


    // 方法1
    let DOM = this.$el.querySelector(".className");
    // 方法2
    let newDom = document.getElementsByClassName('className');

设置默认滚动到底部


方法1

        setTimeout(() => {
		let container = this.$el.querySelector(".chat_content");
		container.scrollTop = container.scrollHeight;
        }, 0)

方法2

	this.$nextTick(() => {
		let container = this.$el.querySelector(".chat_content");
		console.log(container.scrollHeight)
		container.scrollTop = container.scrollHeight;
	});
特别注意
**采用上诉两个方法之后,还存在另一个问题,第一次进入时并未滚动到底部,之后才可以**

解决方法

把延时增加即可

        setTimeout(() => {
		let container = this.$el.querySelector(".chat_content");
		container.scrollTop = container.scrollHeight;
        }, 100)

总结


在vue中操作DOM时经常会遇到先执行了该方法,DOM并没有更新完成,这时就应该用到延时器或者vue中的nextTick方法

传送门(推荐阅读)