• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > Uniapp中怎么使用scrpll-view组件实现下拉刷新

Uniapp中怎么使用scrpll-view组件实现下拉刷新

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了Uniapp下拉刷新,scrpll-view组件等相关知识,希望对您有所帮助

uniapp中怎么使用scrpll-view组件实现下拉刷新?下面本篇文章给大家介绍一下uniapp使用scroll-view自定义下拉刷新的方法,希望对大家有所帮助!


Uniapp中怎么使用scrpll-view组件实现下拉刷新


uniapp下拉刷新

uniapp的下拉刷新有两个方法, 一种是整体的下拉刷新, 使用页面生命周期函数onPullDownRefresh; 另外一种是局部的下拉刷新也叫自定义下拉刷新, 使用scrpll-view组件中的自定义下拉刷新事件。


一、整个页面的刷新(onPullDownRefresh)

在 js 中定义 onPullDownRefresh 处理函数(和onLoad等生命周期函数同级),监听该页面用户下拉刷新事件。


二、自定义页面刷新(scroll-view)

组件中遇到的问题

触发不了下拉(原因排查)

1、scroll-view组件外部没有用view包裹. 官网虽然没有说这个问题, 但是如果外部没有一个view单独包裹着这个组件, 就没有办法触发scroll-view组件中的事件。

2、scroll-view没有设置固定高, 在css中设置height, 设置多高就在多高的区域展现. 比如设置高为50vh(100vh为满屏), 则组件里边的内容只会在半屏内上下滚动,不会触发page的滚动条只会触发scroll-view的滚动条. 如果高度不好给确定值, 可以使用scss(lang='scss')中的calc计算, 例子中有体现.(注意使用calc计算时, -左右一定要有空格)。

3、设置高为百分比的话也不能触发下拉. 高可以使用max-hight, 不能使用min-hight。

4、没有设置scroll-y


没有滚动到顶部触发下拉, 而是在可视页面中触发下拉

官方默认无论page的滚动条在哪个位置, 只要在scroll-view页面上下拉都会触发下拉函数, 这样用户体验非常差. 可以使用@scroll滚动时触发的函数来获取scroll-view滚动条的位置, 进而来控制refresher-enabled开启和关闭自定义下拉刷新. 当scroll-view的滚动条滚动到顶部时, 使refresher-enabled为true, 其他条件为false。


直接上代码看: 

html:

<template><view>  <scroll-view    show-scrollbar="true"    style="height: 300px"    scroll-y="true"    :refresher-enabled="isOpenRefresh"    :refresher-triggered="triggered"    :refresher-threshold="100"    refresher-background="gray"    @refresherpulling="onPulling"    @refresherrefresh="onRefresh"    @refresherrestore="onRestore"    @refresherabort="onAbort"    @scroll="onScroll"  >  <view v-if="!isOpenRefresh">别拉了,没有更多了~</view>  <view class="item" v-for="(item, index) in dataList" :key="index">{{ item }}</view>  </scroll-view></view></template>

基本上下拉刷新用到的属性方法也就这几个了!


js:

export default {  data() {    return {      triggered: false,      dataList: [],      arr: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30],      page: 0,      isOpenRefresh: true // 是否开启下拉    };  },  onLoad() {    this._freshing = false;    this.getData()  },  methods: {    dealArray(array, groupNum) {      let temp = [];      for (let i = 0, len = array.length; i < len; i += groupNum) {        temp.push(array.slice(i, i + groupNum));      }      return temp;    },    // 自定义下拉刷新控件被下拉    onPulling(e) {      console.log("onpulling", e);      if (e.detail.deltaY < 0) return  // 防止上滑页面也触发下拉      this.triggered = true;    },    // 自定义下拉刷新被触发    onRefresh() {      if (this._freshing) return;      this._freshing = true;      this.page++;      setTimeout(() => {        this.triggered = false;        this._freshing = false;        this.getData();      }, 500);    },    // 自定义下拉刷新被复位    onRestore() {      this.triggered = 'restore'; // 需要重置      console.error("onRestore");    },    // 自定义下拉刷新被中止    onAbort() {      console.error("onAbort");    },    getData() {      // 前端模拟分页      let temp = this.dealArray(this.arr, 3)       if (this.page > temp.length - 1) {        this.isOpenRefresh = false        return       }      this.dataList.push(...temp[this.page])    }  },};


style:

<style>view {  text-align: center;}.item:nth-child(odd) {  background-color: antiquewhite;}.item:nth-child(even) {  background-color: aquamarine;}</style>

【注意】scroll-view 下拉刷新会出现上滑页面也触发下拉,可以在 @refresherpulling="onPulling"这个方法,如下 if (e.detail.deltaY < 0) return // 防止上滑页面也触发下拉


演示:


Uniapp中怎么使用scrpll-view组件实现下拉刷新


出现,在页面上任意位置只要下滑动页面就会触发下拉,这类问题。可以使用@scrolltoupper="scrolltoupper"触顶函数,在这里面做一个准入可以解决!


// 触顶操作-准入scrolltoupper() {    this.isAllowRefresh = true} // 自定义下拉刷新控件被下拉 onPulling(e) {    if (e.detail.deltaY < 0) return    if (!this.isAllowRefresh) return;    this.isRefresh = true;    console.log("onpulling", e);}

也可以使用@scroll="onScroll"监听 scroll-top的值,让其 ===0时触发,也就是到达顶部!再触发!但是遇到其必须滑动一下页面出现滚动条,他才会监听!我们可以init的时候初始化一下,令其变量初始为0!

export default class Index extends mixins(uiMixin) {    scrollTop: number = 0    // 监听页面是否滚动     onScroll(e) {        this.scrollTop = e.detail.scrollTop    }    // 自定义下拉刷新被触发  onRefresh() {    if (this.scrollTop === 0) {        if (this._freshing) return;        this._freshing = true;        this.page++;        setTimeout(() => {          this.triggered = false;          this._freshing = false;          this.getData();       }, 500);    }  }})


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Uniapp中怎么使用scrpll-view组件实现下拉刷新

相关文章

  • 2022-04-29PHP实现获取url地址中顶级域名的方法示例
  • 2022-04-29Photoshop制作石纹背景效果的立体字
  • 2022-04-29MySQL的where查询的重新认识
  • 2022-04-29一键开启网页夜间模式代码
  • 2022-04-29Dedecms怎么实现键盘翻页的功能
  • 2022-04-29WordPress文章列表 添加文章内图片数量展示!
  • 2022-04-29Photoshop图层样式制作质感光盘包装
  • 2022-04-29PhotoShop制作window7移动导航网页界面设计教程
  • 2022-04-29MySQL学习总结之触发器详解
  • 2022-04-29vue.js如何实现移入移出效果

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • Photoshop设计超酷的连体艺术字教程
    • 你值得了解的一种CSS获取图片主题色的小技巧(分享)
    • uniapp上如何实现安卓app微信登录功能(操作流程总结)
    • 怎么提高百度搜索引擎关键词的排名
    • wordpress错误提示”抱歉,由于安全原因,这个文件类型不受支持。”解决方法
    • PS绘制可爱的熊猫头像
    • MySQL8.0版本和PHP7不兼容问题?
    • 解决uni-app入坑集合的一种方案
    • 聊聊Nodejs获取参数的四种方法
    • Photoshop设计立体质感的标签式按钮

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有