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 相关文章推荐
详解JavaScript中undefined与null的区别
Mar 29 Javascript
自定义刻度jQuery进度条及插件
Sep 02 Javascript
谈谈AngularJs中的隐藏和显示
Dec 09 Javascript
vue.js开发环境搭建教程
May 04 Javascript
JQuery EasyUI的一些常用组件
Jul 12 jQuery
javaScript动态添加Li元素的实例
Feb 24 Javascript
使用JS实现导航切换时高亮显示的示例讲解
Aug 22 Javascript
vue+element-ui动态生成多级表头的方法
Aug 28 Javascript
JS 数组随机洗牌的实例代码
Sep 12 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
Dec 22 jQuery
element-ui组件table实现自定义筛选功能的示例代码
Mar 15 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
Aug 03 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小偷的核心程序
2007/04/09 PHP
php define的第二个参数使用方法
2013/11/04 PHP
javascript div 弹出可拖动窗口
2009/02/26 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
如何制作幻灯片(代码分享)
2017/01/06 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
Vue实现表格中对数据进行转换、处理的方法
2018/09/06 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
Python的条件语句与运算符优先级详解
2015/10/13 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
Python多继承顺序实例分析
2018/05/26 Python
Python3简单实现串口通信的方法
2019/06/12 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
python中的错误如何查看
2020/07/08 Python
python基于openpyxl生成excel文件
2020/12/23 Python
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
英语道歉信范文
2014/01/09 职场文书
点菜员岗位职责范本
2014/02/14 职场文书
模具毕业生推荐信
2014/02/15 职场文书
人力资源部经理的岗位职责
2014/03/04 职场文书
企业安全生产目标责任书
2014/07/23 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
爱的教育观后感
2015/06/17 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
Python 数据科学 Matplotlib图库详解
2021/07/07 Python