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 1.0.2
Oct 11 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
Nov 18 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
Jul 10 Javascript
jQuery使用fadein方法实现渐出效果实例
Mar 27 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
Aug 29 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
Dec 26 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
Jan 23 Javascript
p5.js实现斐波那契螺旋的示例代码
Mar 22 Javascript
妙用缓存调用链实现JS方法的重载
Apr 30 Javascript
微信小程序代码上传、审核发布小程序
May 18 Javascript
vue+elementui 对话框取消 表单验证重置示例
Oct 29 Javascript
js轮播图之旋转木马效果
Oct 13 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
Yii核心组件AssetManager原理分析
2014/12/02 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
简明json介绍
2008/09/28 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
Jquery中获取iframe的代码
2011/01/11 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
nodejs导出excel的方法
2015/06/30 NodeJs
JSON与XML优缺点对比分析
2015/07/17 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
vue+element实现批量删除功能的示例
2018/02/28 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
layui实现给某一列加点击事件
2019/10/26 Javascript
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
在Python中使用成员运算符的示例
2015/05/13 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
Python 编程速成(推荐)
2019/04/15 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
python中的逆序遍历实例
2019/12/25 Python
python各种excel写入方式的速度对比
2020/11/10 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
尼克松手表官网:Nixon手表
2019/03/17 全球购物
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
物流管理专业求职信
2014/05/29 职场文书
订货会邀请函
2015/01/31 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
单位综合评价意见
2015/06/05 职场文书
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js