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实现新消息闪烁标题提示的方法
Mar 11 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
Dec 18 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
Mar 08 Javascript
Bootstrap安装环境配置教程分享
May 27 Javascript
原生js实现节日时间倒计时功能
Jan 18 Javascript
javascript自执行函数
Feb 10 Javascript
从零开始做一个pagination分页组件
Mar 15 Javascript
jQuery轻松实现无缝轮播效果
Mar 22 jQuery
vue轮播图插件vue-awesome-swiper
Nov 27 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
Sep 13 Javascript
Vue如何循环提取对象数组中的值
Nov 18 Vue.js
angular4实现带搜索的下拉框
Mar 25 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 删除cookie方法详解
2014/12/01 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
PHP自定义错误用法示例
2016/09/28 PHP
Javascript valueOf 使用方法
2008/12/28 Javascript
jQuery实现在列表的首行添加数据
2015/05/19 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
Vue2.0 http请求以及loading展示实例
2018/03/06 Javascript
vue项目中应用ueditor自定义上传按钮功能
2018/04/27 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
python 将md5转为16字节的方法
2018/05/29 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
Python用SSH连接到网络设备
2021/02/18 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
医院护士专业个人的求职信
2013/12/09 职场文书
会计电算化大学生职业规划书
2014/02/05 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
中学语文教学反思
2016/02/16 职场文书
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫