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 相关文章推荐
解决jquery .ajax 在IE下卡死问题的解决方法
Oct 26 Javascript
网页中可关闭的漂浮窗口实现可自行调节
Aug 20 Javascript
alert出数组中的随即值代码
Sep 25 Javascript
jQuery中click事件用法实例
Dec 26 Javascript
Javascript连接Access数据库完整实例
Aug 03 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
Nov 19 Javascript
JavaScript阻止回车提交表单的方法
Dec 30 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
May 25 Javascript
jQuery中map函数的两种方式
Apr 07 jQuery
vue学习笔记之v-if和v-show的区别
Sep 20 Javascript
vue 运用mock数据的示例代码
Nov 07 Javascript
简单了解JS打开url的方法
Feb 21 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
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
在PHP中使用redis
2013/11/04 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
2017/02/16 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
javascript 正则表达式相关应介绍
2012/11/27 Javascript
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
Angular5中调用第三方库及jQuery的添加的方法
2018/06/07 jQuery
微信小程序实现3D轮播图效果(非swiper组件)
2019/09/21 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
python生成指定尺寸缩略图的示例
2014/05/07 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
python实现图片九宫格分割
2021/03/07 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
Python中list的交、并、差集获取方法示例
2019/08/01 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
老海军美国官网:Old Navy
2016/09/05 全球购物
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
物理系毕业生自荐信
2013/11/01 职场文书
大学生未来职业生涯规划书
2014/02/15 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
玄武湖导游词
2015/02/05 职场文书
校友回访母校寄语
2015/02/26 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
python数据处理之Pandas类型转换
2022/04/28 Python