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 相关文章推荐
js实现select选择框效果及美化
Aug 19 Javascript
JavaScript递归操作实例浅析
Oct 31 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
Dec 08 Javascript
JS中用try catch对代码运行的性能影响分析
Dec 26 Javascript
JavaScript实现经纬度转换成地址功能
Mar 28 Javascript
Vue.js常用指令之循环使用v-for指令教程
Jun 27 Javascript
JavaScript中使用参数个数实现重载功能
Sep 01 Javascript
vue裁切预览组件功能的实现步骤
May 04 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
Mar 28 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
May 06 Javascript
Vue中util的工具函数实例详解
Jul 08 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
Sep 27 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
《魔兽争霸3:重制版》翻车了?你想要的我们都没有
2019/11/07 魔兽争霸
用PHP的超级变量$_GET获取HTML表单(Form) 数据
2011/05/07 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
经典PHP加密解密函数Authcode()修复版代码
2015/04/05 PHP
Use Word to Search for Files
2007/06/15 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
Node.js编码规范
2014/07/14 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
利用Python爬取可用的代理IP
2016/08/18 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
浅谈Python 列表字典赋值的陷阱
2019/01/20 Python
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
实习求职信
2013/12/01 职场文书
学习十八大精神心得体会
2013/12/31 职场文书
酒鬼酒广告词
2014/03/21 职场文书
公司捐款倡议书
2014/05/14 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
信息技术教研组工作总结
2015/08/13 职场文书
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技