vue 实现 web端滚动刷新

想实现web端的滚动刷新,我们需要判断滚动已经到达最低部,利用addEventListener监听滚动高度,触发相应的回调函数,激发加载更多数据,那么我们该怎样计算滚动已经到达底部了呢?

首先我们需要获取到整个可视区域高度clientHeight
clientHeight
内容可视区域的高度,也就是说页面浏览器可以看到内容的这个区域的高度,但要注意padding是算在内的。

获取整个文档的高度scrollHeight
scrollHeight 文档内容实际高度

获取滚动的距离scrollTop
scrollTop 获取滚动的垂直距离

思路:

整个文档的高度 -  可视区域高度 - 滚动的距离 为 0 时候 说明 到底部了

代码部分:l

<!--            底部加载图片--><div class="hidden_img" v-customShow="imgShow"><img  width="15%" src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1594203057728&di=b98734df67bbe297b4ac80154751a3a3&imgtype=0&src=http%3A%2F%2Fhbimg.b0.upaiyun.com%2F73d00f8e9b5e91aaf8ca7f8fc8c1746b33acb0d563c3d-2lSOZj_fw658"></div>

js代码:

 data(){return{imgShow:false,  //自定义指令i:2,  // 下拉加载的下标}},
   mounted() {axios.get('./media/data.json').then(res=>{//保存一个原始数组this.courselist = res.data.result.list;// 展示商品的数组this.list = res.data.result.list;//左边价格的选项this.options = res.data.result.slider;}).catch(err=>{console.log(err)});// 实时获取 滚动的距离window.addEventListener('scroll',()=>{/* 计算滑动到底部 整个文档的高度  = 可视区域高度 + 滚动的距离*///获取滚动的距离let scrollHeight = document.documentElement.scrollTop;//获取整个文档的高度let docHeight = document.documentElement.scrollHeight;//可视区域高度let seeHeight = document.documentElement.clientHeight;// 整个文档的高度 -  可视区域高度 - 滚动的距离 === 0 时候 说明 到底部了if(docHeight - seeHeight - scrollHeight  < 1) {//loading加载出现this.imgShow = true;//计时器  3秒后loading隐藏 数据请求回来加入数组window.setTimeout(()=>{//我们的json数据只到 3  所以在这里判断一下if(this.i === 4 ) {this.imgShow = false;return;}//loading 隐藏this.imgShow = false;//axios请求 jsonaxios.get(`./media/data${this.i}.json`).then(res=>{//扩展运算符 赋值给listthis.list = [...this.list,...res.data.result.list];}).catch(err=>{console.log(err)});this.i++;},3000)}/*      console.log(scrollHeight + '滚动距离')console.log(docHeight + '文档高度')console.log(seeHeight + '可视') */})},

自定义指令

在上面用的imgShow 是自定义指令 来控制加载图标的显示和隐藏

不用v-ifv-show 的原因:
v-if判断该元素是否存在 v-show是通过display:none/block来实现对元素的显示和隐藏
当我们滚动到底部的时候,虽然加载的图标会出现,3秒后会隐藏,但是会隔3秒触发一次请求,bug出现了。

bug演示:

所以我们用自定义指令,通过改变元素的visibility属性
小贴士:visibility 即使不可见的元素也会占据页面上的空间
底部会留白,但是不影响哈

自定义指令:
inserted:只有在插入时候触发 只用一次 更新不会触发,接收了两个参数 – 1. el 是获取到当前的元素
2. binging是当前元素的所有信息

update:更新的时触发

代码:

  // 自定义指令directives:{customShow:{   //自定义指令的名字bind(){},// 只有在插入时候触发 只用一次  更新不会触发  我们每次会改变ture false 所以要在更新时写一遍inserted(el,binding){if(binding.value) {el.style.visibility = 'visible';}else {el.style.visibility = 'hidden';}},// true  false  更新的时触发update(el,binging){// el 是获取到当前的元素   binging是当前元素的所有信息if(binging.value) {el.style.visibility = 'visible';}else {el.style.visibility = 'hidden';}}}}

这里只是阐述了滚动刷新和自定义指令,点击查看源码

https://blog.csdn.net/weixin_46034375/article/details/107210633

vue 实现 web端滚动刷新 自定义指令相关推荐

  1. vue 实现 web端滚动刷新 排序 筛选 响应式布局 (源码)

    vue 实现 web端滚动刷新 排序 筛选 响应式布局 先展示效果图 源码: <template><div> <!-- 头部--><div class=&qu ...

  2. vue 全局动态修改title、keywords、description;vue常用挂载的方法,自定义指令;

    vue 全局动态修改title.keywords.description 路由: {path: "xxx",name: "xxx",component: () ...

  3. vue从入门到进阶:自定义指令directive,插件的封装以及混合mixins(七)

    一.自定义指令directive 除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令.注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件.然而,有的 ...

  4. vue点击改变data_vue 中自定义指令改变data中的值

    通过局部自定义指令实现了一个拖动的指令 html: script: methods:{ set(x,y){ this.data.x=x; this.data.y=y; } }, directives: ...

  5. VUE实现Web端多人语音视频聊天

    1 多人语音聊天功能介绍 本文展示了如何使用 ZEGO Express SDK 构造多人音视频通话场景,即实现多对多实时音视频聊天互动.用户可在房间内与其余用户进行实时音视频通话,互相推拉流.该场景可 ...

  6. 使用vue-mugen-scroll组件实现pc端滚动刷新

    由于工作的原因,现在需要实现一个滚动加载(PC端)的效果,之前使用的是vue+element,但是element没有类似的组件,所以去github上找了一个名叫vue-mugen-scroll,使用起 ...

  7. vue实现web端飘窗组件

    项目中需要实现飘窗效果 效果如下:  一.封装飘窗组件FloatWidow.vue,放在目录/components下 <template><!--悬浮窗口样式的提示信息-->& ...

  8. Flutter web 滚动循环 title(Flutter Web端 滚动显示浏览器标签页名)

    应用场景:一般用于页面收到新消息通知时,或者正在播放音视频时浏览器标签页会循环显示标签名称,以达到提醒或表示正在进行的效果. Flutter 代码 /*** 修改html的title {repeat ...

  9. vue开发web端实现列表左右联动效果

    先谈需求:左侧为分类列表,点击分类名右侧商品列表会滑动对应分类到顶部:右侧商品列表滑动到某一分类时左侧分类列表对应分类会滑动到顶部高亮显示. 再来说说思路:1,引用swiper插件,这种方法冲突和不适 ...

最新文章

  1. 关于局域网共享访问问题总结
  2. UA PHYS515A 电磁理论V 电磁波与辐射1 电磁波的方程
  3. u盘安装linux 提示no such device_IGH EtherCAT 开源主站安装及测试
  4. 文章页网址有.html,Phpcms V9文章内容页自定义HTML网址技巧
  5. windows中开启snmp
  6. Java-Collections的sort方法对 list 进行排序
  7. iOS开发中view controller设置问题
  8. wince6.0添加组件_WINCE6.0添加对viewrs(PDF,Word,Execel和PowerPoint)支持
  9. Raki的nlp-begginer 提问
  10. idea 如何查看jdk源码
  11. HTML5 浏览器检测
  12. uniapp 权限判断 判断位置,摄像头,相册,通讯录是否开启,如果没有开启弹窗提示并且进入设置打开权限
  13. 一世人中,最黑仔嘅一日
  14. how to get SoCs and devices information in QEMU
  15. 放眼看政策!2022年武汉市光谷招贤令奖励补贴政策以及申报条件!
  16. 前端学习day 10--小米商城首页的制作
  17. 喷墨打印机如何批量制作二维码标签
  18. java对接海康威视SDk实现红外DL/T抓图
  19. java创造新世界下载_创造新世界3D
  20. 使用htmlunit采集网页+点击网页按钮

热门文章

  1. 朴素贝叶斯算法详解及python代码实现
  2. STIMULUS(二) —— Hello, Stimulus
  3. 初探ES6中的Map和WeakMap
  4. Druid使用ConfigFilter
  5. mysqladmin flush-hosts 解决方法
  6. Sencha 自定义组件函数回调
  7. IPSEC非单播流量处理
  8. 一起讨论系统架构设计师考试大纲中样题参考答案
  9. ACCESS MDB数据库记录误删除恢复
  10. 27/100. Intersection of Two Linked Lists