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 相关文章推荐
关于使用runtimeStyle属性问题讨论文章
Mar 08 Javascript
JavaScript this调用规则说明
Mar 08 Javascript
JavaScript中的this关键字介绍与使用实例
Jun 21 Javascript
javascript full screen 全屏显示页面元素的方法
Sep 27 Javascript
jQuery实现自定义checkbox和radio样式
Jul 13 Javascript
在Ubuntu系统上安装Node.JS的教程
Oct 15 Javascript
JavaScript 最佳实践:帮你提升代码质量
Dec 03 Javascript
使用jQuery,Angular实现登录界面验证码详解
Apr 27 jQuery
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
Feb 05 Javascript
JavaScript callback回调函数用法实例分析
May 08 Javascript
JS简单判断是否在微信浏览器打开的方法示例
Jan 08 Javascript
javascript 原型与原型链的理解及实例分析
Nov 23 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常用Output和ptions/Info函数集介绍
2013/06/19 PHP
php中session定期自动清理的方法
2015/11/12 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
php 函数中静态变量使用的问题实例分析
2020/03/05 PHP
数组方法解决JS字符串连接性能问题有争议
2011/01/12 Javascript
jQuery中的.bind()、.live()和.delegate()之间区别分析
2011/06/08 Javascript
JavaScript中的作用域链和闭包
2012/06/30 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
2017/02/28 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
2018/08/31 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
Python入门_条件控制(详解)
2017/05/16 Python
python绘制条形图方法代码详解
2017/12/19 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
Keras搭建自编码器操作
2020/07/03 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
数据库的约束含义
2012/09/09 面试题
Ajax主要包含了哪些技术
2014/06/12 面试题
自主招生自荐信指南
2014/02/04 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
怎么用Python识别手势数字
2021/06/07 Python
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript