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 相关文章推荐
javscript对象原型的一些看法
Sep 19 Javascript
一些老手都不一定知道的JavaScript技巧
May 06 Javascript
JS获取各种宽度、高度的简单介绍
Dec 19 Javascript
js获取元素外链样式的方法
Jan 27 Javascript
第九章之路径分页标签与徽章组件
Apr 25 Javascript
JS实现的相册图片左右滚动完整实例
Nov 23 Javascript
完美解决IE不支持Data.parse()的问题
Nov 24 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
Sep 08 Javascript
详解angularjs4部署文件过大解决过程
Dec 05 Javascript
JavaScript Array对象基本方法详解
Sep 03 Javascript
Vue将props值实时传递 并可修改的操作
Aug 09 Javascript
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
Apr 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中使用Oracle数据库(3)
2006/10/09 PHP
cache_lite试用
2007/02/14 PHP
php下封装较好的数字分页方法
2010/11/23 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
jquery 问答知识整理
2010/02/11 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
js一维数组、多维数组和对象的混合使用方法
2016/04/03 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
Bootstrap按钮组简单实现代码
2017/03/06 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
vue 权限认证token的实现方法
2018/07/17 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
Python中time模块和datetime模块的用法示例
2016/02/28 Python
Python探索之创建二叉树
2017/10/25 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
python命令行工具Click快速掌握
2019/07/04 Python
python中@property和property函数常见使用方法示例
2019/10/21 Python
python Plotly绘图工具的简单使用
2020/03/03 Python
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
绘儿乐产品官方在线商店:Crayola.com
2019/09/07 全球购物
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
JAVA程序员自荐书
2014/01/30 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
教你利用python实现企业微信发送消息
2021/05/23 Python
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python