这篇文章主要介绍了vue项目设置scrollTop不起作用(总结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

今天在开发中,遇到这样一个情景。一个页面中有三个模块,每个模块对应一个标题,每个模块内容都很长,所以需要点击当前模块对应的标题到模块所在位置。

我想的方案是获取到每个模块距离文档顶部的距离,然后将值赋给对应要的元素。 步骤如下:

首先给每个模块一个id,例如:

<div id="anchor-0">
<div id="anchor-1">
<div id="anchor-2">

点击每个标题的时候获取到当前模块的id

<a v-for="(navItem,index) in navData" :key="index" :class="{active:index == i }" @click="goAnchor('#anchor-'+index)">{{navItem.name}}</a>

methods: {
   // tab点击
   goAnchor(val) {
    let anchor = this.$el.querySelector(val);
 }

*最后就可以获取每个模块距离文档顶部的距离了,然后赋值给对应要的元素就可以了

methods: {
   // tab
   goAnchor(val) {
    let anchor = this.$el.querySelector(val);
    this.$nextTick(() => {
     document.querySelector(".el-main").scrollTop = anchor.offsetTop;
    });
   },

切记:在这里一定要加上this.$nextTick()方法,否则document.querySelector(“.el-main”).scrollTop的值永远为0,不会赋值成功的!

container.scrollTop 一直为0不能赋值的解决方法

 watch: {
  historyList () {
   this.$nextTick(() => {
    const container = this.$el.querySelector('.scrolldivmain')
    console.log(container.scrollHeight)
    console.log(container.scrollTop)
    this.$refs.scrolldiv.scrollTo(0, container.scrollHeight + 'px')
    container.scrollTop = container.scrollHeight
    container.scrollTop(0, container.scrollHeight)
    console.log(container.scrollTop) // container.scrollTop 一直为0
   })
  }
 }

注意点

确定下条是在哪里显示的

有个方法判断下:

  window.addEventListener('scroll', () => {
    var scrollTop = this.$el.querySelector('.scrolldivmain')
    // console.log(scrollTop.scrollHeight)
    console.log(scrollTop.scrollTop) // 查看打印的值是否有变化 如果有 则说明滚条在这个标签中
    // scrollTop.scrollTop = scrollTop.scrollHeight // 可以尝试下 条。一直在底部则可以设置成功
  }, true)

解决方案

需要用到的地方 调用this.scrollToBottom()即可

<!--element-ui-->

<el-main>
  some code
</el-main>
methods: {
 // 到底部
  scrollToBottom () {
   this.$nextTick(() => {
    setTimeout(() => {
     var scrollTop = this.$el.querySelector('.scrolldivmain')
     scrollTop.scrollTop = scrollTop.scrollHeight
    }, 13)
   })
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持爱安网。

最新资讯
美团互助宣布关停 专家呼吁出台网络互助监管规则

美团互助宣布关停 专

目前除了美团互助外,蚂蚁集团、360、滴滴等多家互联网
院士“炮轰”1000公里续航电动车 商业化面临挑战

院士“炮轰”1000公里

有人认为,这直接打脸了蔚来汽车推出的超1000km续航里程
OTA巨头攻防战:美团“狼来了”,携程如何防?

OTA巨头攻防战:美团“

美团的“狼来了”,意欲搅动沉寂许久的OTA竞争格局。但
新能源车续航可达1000公里,颠覆还是泡沫?

新能源车续航可达1000

一直以来,续航里程焦虑都是新能源车市场的大敌。
别了,锤子手机

别了,锤子手机

  欢迎关注“创事记”的微信订阅号:sinachuangshiji
滴滴:北京超10万名司机完成疫苗接种

滴滴:北京超10万名司机

在防疫部门和交通主管部门的指导和帮助下,在市、区两级
最新文章
详解Vue的ref特性的使用

详解Vue的ref特性的使

这篇文章主要介绍了详解Vue的ref特性的使用,文中通过
vue学习笔记之slot插槽基本用法实例分析

vue学习笔记之slot插

这篇文章主要介绍了vue学习笔记之slot插槽基本用法,结
vue跳转方式(打开新页面)及传参操作示例

vue跳转方式(打开新页

这篇文章主要介绍了vue跳转方式(打开新页面)及传参操作,
vue学习笔记之过滤器的基本使用方法实例分析

vue学习笔记之过滤器

这篇文章主要介绍了vue学习笔记之过滤器的基本使用方
js获取本日、本周、本月的时间代码

js获取本日、本周、本

本篇文章给大家分享的内容是利用js如何获取本日、本周
node crawler如何添加promise支持

node crawler如何添加

这篇文章主要介绍了node crawler如何添加promise支持,