在template标签下,定义一个div标签:<div class='className'></div>
定义div的样式,撑起滚动条:
.className {
height: 100%;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
overflow: auto;
}
现在已经有了滚动条,在上面已经撑起滚动条的情况下,监听滚动条我这里选择两种方式,个人比较推荐第二种方式:
第一种使用id监听方法:
将div标签改写成:<div class='className' id='yourId'></div>
在mounted函数中:document.getElementById('yourId').addEventListener('scroll', this.handleScroll);
这里你也可以使用window.addEventListener('scroll', this.handleScroll, true);监听。
在methods中:handleScroll() {
console.log(document.getElementById('yourId').scrollTop);
console.log(document.getElementById('yourId').scrollHeight);
}
现在滚动鼠标就会打印出滚动条位置了,
如果想要设置滚动条的位置,直接使用document.getElementById('yourId').scrollTop = value;value为你要滚动条到的位置,比如回到顶部的写法:document.getElementById('yourId').scrollTop = 0;,如此关于滚动条的操作也就完事了,但在vue中使用document并不是太好,因为别人会说你都用vue了,还在用原生的document。
第二种使用ref监听
将div标签改写成:<div class='className' ref='yourName' @scroll="functionName($event)"></div>
①在mounted函数中:你仍然可以使用window.addEventListener('scroll', this.handleScroll, true);监听,然后在methods中写handleScroll进行打印或操作;
②你也可以在methods中写入div中的方法,依靠标签内的@scroll=functionName($event)监听:
functionName(e) {
console.log(this.$refs.yourName.scrollTop);
console.log(this.$refs.yourName.scrollHeight);
}
重新给滚动条定位使用this.$refs.yourName.scrollTop = value;即可,value为你要定位的位置。
如果你的滚动条重新定位需要延迟比较顺滑的那种,可以弄个定时器,设置一个静态的或动态的滚动速度。