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 相关文章推荐
CSDN轮换广告图片轮换效果
Mar 27 Javascript
JavaScript写的一个自定义弹出式对话框代码
Jan 17 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
Feb 11 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
Feb 26 Javascript
JavaScript驾驭网页-CSS与DOM
Mar 24 Javascript
JavaScript判断数组是否存在key的简单实例
Aug 03 Javascript
微信小程序链接传参并跳转新页面
Nov 29 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
May 22 Javascript
关于Angular2 + node接口调试的解决方案
May 28 Javascript
详解如何使用webpack在vue项目中写jsx语法
Nov 08 Javascript
vue服务端渲染缓存应用详解
Sep 12 Javascript
可能被忽略的一些JavaScript数组方法细节
Feb 28 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代码质量36计
2012/09/05 PHP
基于php iconv函数的使用详解
2013/06/09 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
jquery ajax 检测用户注册时用户名是否存在
2009/11/03 Javascript
Javascript string 扩展库代码
2010/04/09 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
[43:41]OG vs Newbee 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
python sys.argv[]用法实例详解
2018/05/25 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
工程项目经理任命书
2014/06/05 职场文书
欢迎领导检查标语
2014/06/27 职场文书
幼儿生日活动方案
2014/08/27 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书
离婚起诉状范本
2015/05/19 职场文书
人民检察院起诉书
2015/05/20 职场文书
pytorch中的 .view()函数的用法介绍
2022/03/17 Python