vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)


Posted in Javascript onJune 11, 2020

1、是否滚动到底部

isScrollBottom() {
   // 是否滚动到了底部
   this.box = this.$refs.chatListWrapper
   var clientHeight = this.box.clientHeight
   var scrollTop = this.box.scrollTop
   var scrollHeight = this.box.scrollHeight
   if (scrollTop + clientHeight == scrollHeight) {
    this.$store.dispatch('setBottomBtn', false, { root: true }) // 隐藏直达最新消息按钮
    this.isBottom = true
    this.isTop = false
   } else {
    this.$store.dispatch('setBottomBtn', true, { root: true }) // 显示直达最新消息按钮
    this.isTop = false
    this.isBottom = false
    if (scrollTop == 0) {
     this.isTop = true
    }
   }
  },

2、scroll滚动方向判断

getDirection() {
   // scroll滚动方向~~~~
   this.box = this.$refs.chatListWrapper
   var scrollTop = this.box.scrollTop
   var scroll = scrollTop - this.initTop
   this.initTop = scrollTop
   let dir = 'down'
   if (scroll < 0) {
    dir = 'up'
   } else {
    dir = 'down'
   }
   return dir
  },

3、滚动节流

1)、在滚动的dom上绑定scroll事件,监听滚动

vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)

2)、data中定义:fnScroll: () => {}, 初始值
3)、mounted中给fnScroll函数赋值,_.throttle实现滚动节流

this.fnScroll = _.throttle(() => {
}, 500)

4、获取滚动可视区域内dom:

实现注意:判断当前元素是否在可视区域内,若在则存到isSeeDomArr中,然后循环isSeeDomArr数组,拿到当前可视区域内的最后一个dom,再去判断是否更新对应的咨询轨迹。
不要滚动时就去更新,这样会造成不停请求更新,最后一次请求可能无效,造成数据的错乱

sendRead() {
   const chatLi = document
    .getElementById('chat_list_wrapper')
    .getElementsByTagName('li')
   var container = this.$refs.chatListWrapper
   var swHeight = container.clientHeight
   const scrollTop = container.scrollTop
   const aa = swHeight + scrollTop
   let isSeeDomArr = []
   for (let j = 0; j < chatLi.length; j++) {
    if (scrollTop < chatLi[j].offsetTop && chatLi[j].offsetTop < aa) {
     isSeeDomArr.push(chatLi[j]) //将可视区域内所有dom存储到isSeeDomArr
    }
   }
   if (isSeeDomArr.length) {
    // 非 ceo接诊台更新消息的已读状态
    if (this.$route.path.indexOf('diagnose/ceo') === -1) {
     for (let m = 0; m < isSeeDomArr.length; m++) {
      const isSelfSend = isSeeDomArr[m].getAttribute('isSelfSend')
      const msgStatus = isSeeDomArr[m].getAttribute('msgStatus')
      const msgType = isSeeDomArr[m].getAttribute('msgType')
      if (!isSelfSend && !msgStatus && msgType !== 'notice') {
       const _id = isSeeDomArr[m].getAttribute('id')
       this.sendReadApi(_id)
      }
     }
    }
    // 更新聊天对应的咨询轨迹
    this.setCurrentFdAsk(
     isSeeDomArr[isSeeDomArr.length - 1].getAttribute('fdAsk')
    )
   }
  },

the end:滚动加载这些判断前前后后改了好多次,这次终于感觉逻辑比较清晰了,也算对自己有个交代。。。

到此这篇关于vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)的文章就介绍到这了,更多相关vue scroll滚动判断内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
用js获取电脑信息(是使用与IE浏览器)
Jan 15 Javascript
动态加载脚本提升javascript性能
Feb 24 Javascript
jQuery带进度条全屏图片轮播特效代码分享
Jun 28 Javascript
谈谈jQuery Ajax用法详解
Nov 27 Javascript
jQuery实现右键菜单、遮罩等效果代码
Sep 27 Javascript
jQuery内存泄露解决办法
Dec 13 Javascript
详解vue 中使用 AJAX获取数据的方法
Jan 18 Javascript
iscroll实现下拉刷新功能
Jul 18 Javascript
VUE2实现事件驱动弹窗示例
Oct 21 Javascript
Element-ui table中过滤条件变更表格内容的方法
Mar 02 Javascript
基于JavaScript获取base64图片大小
Oct 18 Javascript
微信小程序自定义底部弹出框功能
Nov 18 Javascript
Vue初始化中的选项合并之initInternalComponent详解
Jun 11 #Javascript
Vue组件为什么data必须是一个函数
Jun 11 #Javascript
Vue实现点击箭头上下移动效果
Jun 11 #Javascript
webpack+express实现文件精确缓存的示例代码
Jun 11 #Javascript
详解vue 组件
Jun 11 #Javascript
vue实现员工信息录入功能
Jun 11 #Javascript
JavaScript Event Loop相关原理解析
Jun 10 #Javascript
You might like
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
php获取百度收录、百度热词及百度快照的方法
2015/04/02 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
js网页中的(运行代码)功能实现思路
2013/02/04 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
利用python获得时间的实例说明
2013/03/25 Python
Windows下PyMongo下载及安装教程
2015/04/27 Python
详解Python中的Descriptor描述符类
2016/06/14 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
pandas分区间,算频率的实例
2019/07/04 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
劳资人员岗位职责
2013/12/19 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
学习十八大宣传标语
2014/10/09 职场文书
慰问信模板
2015/02/14 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers