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参数的小问题
Mar 02 Javascript
event对象的方法 兼容多浏览器
Jun 27 Javascript
初学js插入节点appendChild insertBefore使用方法
Jul 04 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
Feb 17 Javascript
在Mac OS下使用Node.js的简单教程
Jun 24 Javascript
jQuery实现摸拟alert提示框
May 22 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
Sep 29 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
Jan 17 Javascript
create-react-app构建项目慢的解决方法
Mar 14 Javascript
jQuery中内容过滤器简单用法示例
Mar 31 jQuery
React key值的作用和使用详解
Aug 23 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
Sep 25 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分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
numpy 声明空数组详解
2019/12/05 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
办公室副主任岗位职责
2013/11/25 职场文书
写给女朋友的道歉信
2014/01/12 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
公证委托书标准格式
2014/09/11 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
资产移交协议书
2016/03/24 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技