vue项目设置scrollTop不起作用(总结)


Posted in Javascript onDecember 21, 2018

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

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

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

<div class="module module1" id="anchor-0">
<div class="module module1" id="anchor-1">
<div class="module module1" id="anchor-2">

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

<a v-for="(navItem,index) in navData" :key="index" class="navItem" :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 class="scrolldivmain">
  some code
</el-main>
methods: {
 // 滚动到底部
  scrollToBottom () {
   this.$nextTick(() => {
    setTimeout(() => {
     var scrollTop = this.$el.querySelector('.scrolldivmain')
     scrollTop.scrollTop = scrollTop.scrollHeight
    }, 13)
   })
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery easyui 下loaing效果示例代码
Aug 12 Javascript
JavaScript实现简单的拖动效果
Jul 02 Javascript
Javascript 实现简单计算器实例代码
Oct 23 Javascript
JS验证input输入框(字母,数字,符号,中文)
Mar 23 Javascript
如何重置vue打印变量的显示方式
Dec 06 Javascript
web前端页面生成exe可执行文件的方法
Feb 08 Javascript
JavaScript获取用户所在城市及地理位置
Apr 21 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
Jul 04 Javascript
JavaScript插入排序算法原理与实现方法示例
Aug 06 Javascript
浅谈vue项目用到的mock数据接口的两种方式
Oct 09 Javascript
jQuery操作元素追加内容示例
Jan 10 jQuery
微信小程序APP页面的之间的相互传递参数以及自定义组件
Apr 19 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
Dec 21 #Javascript
JS二级菜单不同实现方法分析【4种方法】
Dec 21 #Javascript
vue中eslintrc.js配置最详细介绍
Dec 21 #Javascript
angularjs http与后台交互的实现示例
Dec 21 #Javascript
JS执行控制之节流模式实例分析
Dec 21 #Javascript
vue favicon设置以及动态修改favicon的方法
Dec 21 #Javascript
微信小程序自定义键盘 内部虚拟支付
Dec 20 #Javascript
You might like
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
PHP学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
js二级地域选择的实现方法
2013/06/17 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
Python模块学习 datetime介绍
2012/08/27 Python
使用graphics.py实现2048小游戏
2015/03/10 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
python实现Decorator模式实例代码
2018/02/09 Python
Python反转序列的方法实例分析
2018/03/21 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
python仿抖音表白神器
2019/04/08 Python
简单了解Python生成器是什么
2019/07/02 Python
python正则-re的用法详解
2019/07/28 Python
pygame实现非图片按钮效果
2019/10/29 Python
Python 实现自动获取种子磁力链接方式
2020/01/16 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
一套SQL笔试题
2016/08/14 面试题
常务副总经理岗位职责
2014/04/12 职场文书
空乘英文求职信
2014/04/13 职场文书
技术合作协议书范本
2014/04/18 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
财务稽核岗位职责
2015/04/13 职场文书