微信小程序 - scroll-view组件之上拉加载下拉刷新(解决上拉加载不触发)

这篇具有很好参考价值的文章主要介绍了微信小程序 - scroll-view组件之上拉加载下拉刷新(解决上拉加载不触发)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近在做微信小程序项目中,有一个功能就是做一个商品列表分页限流然后实现上拉加载下拉刷新功能,遇到了一个使用scroll-viwe组件下拉刷新事件始终不触发问题,网上很多说给scroll-view设置一个高度啥的就可以解决,有些人设置了高度也不触发,所以在下就研究了一波这个scroll-view的触发机制。

一、scroll-view

可滚动视图区域。使用竖向滚动时,需要给scroll-view一个固定高度,通过 WXSS 设置 height。组件属性的长度单位默认为px,2.4.0起支持传入单位(rpx/px)。

两个属性是作为上拉加载下拉刷新触发事件
scroll-view属性bindrefresherrefresh:自定义下拉刷新被触发

scroll-view属性bindscrolltolower:滚动到底部/右边时触发

官网文档:https://developers.weixin.qq.com/miniprogram/dev/component/scroll-view.html

二、上拉加载下拉刷新

提示:以下是本篇文章正文内容,下面案例可供参考

1. wxml代码

<scroll-view 
      id="scrollView"  scroll-y="true" style="height: {{windowHeight}}px;"
      refresher-enabled="{{true}}" 
      refresher-threshold="{{100}}"
      refresher-default-style="white"
      refresher-background="rgb(211, 234, 248)"
      refresher-triggered="{{triggered}}"
      bindrefresherrefresh="onRefresh"  
      bindscrolltolower="loadMore"
    >
      <view class="fruit-list" wx:for="{{fruits}}" wx:key="id">
        <view class="fruit-item">
          <image src="{{requestUrl}}{{item.imageUrl}}"></image>
          <view class="mid">
            <text style="font-weight: bold;">{{item.name}}</text>
            <text style="color: rgb(146, 146, 146);">库存{{item.stock}}</text>
            <text style="font-weight: bold;">¥{{item.price}}</text>
          </view>
          <button>选择</button>
        </view>
      </view>
</scroll-view>

2. wxcc代码

.fruit-item {
  display: flex;
  justify-content: center;
  align-items: center;
}

.fruit-item view {
  display: flex;
  flex-direction: column;
  font-size: 9px;
  flex: 2;
  align-items: flex-start;
  justify-content: center;
  line-height: 30px;
}

.fruit-item image {
  height: 100px;
  width: 100px;
  border-radius: 5px;
  margin:10px;
  flex: 3;
}
.fruit-item button {
  background-color: rgb(219, 207, 137);
  width: 40px; 
  height: 20px;
  font-size: 8px;
  flex: 1;
  line-height: 5px;
}

.mid :first-child{
  width: 70px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

3. 下拉刷新bindrefresherrefresh : onRefresh下拉刷新事件定义

 onRefresh() {
        // 自己定义刷新事件
        var self = this;
        // 自己定义刷新事件
        self.setData({
          triggered: true, // 将triggered属性设置为true,表示下拉刷新已经被触发
        })
        wx.showToast({
          title: "刷新成功"
        })
        setTimeout(function () {
          self.setData({
            triggered: false, // 将triggered属性设置为false,表示下拉刷新已完成
            
          })
          console.log('下拉刷新已完成');
        }, 3000);
  }

4. 上拉加载

scroll-view触发的条件

微信小程序 - scroll-view组件之上拉加载下拉刷新(解决上拉加载不触发),微信小程序,微信小程序,notepad++,小程序

触底事件不触发有以下情况:

  1. scroll-view没有设置高度或者高度设置太高导致 item总高度 < scroll-view高度下拉过程中触不到底
  2. scroll-view容器中的item没有设置高度导致 item总高度<scollview高度

注意:如果scroll-view高度 < item总高度且值小于1~4px也是不触发的要大于5px这样才会触发,
例如:scroll-view高度为480px,item总高度为480-484px不会触发

解决方案

  1. scroll-view设置高度100vh;
  2. item设置一个适合的高度

100vh

是一个在网页开发中常用的单位,表示相对于视窗(viewport)高度的百分比。具体来说,它等于视窗高度的百分之一百。在大多数情况下,该单位用于设置元素的高度或最小高度,以便使其充满整个视窗高度。
例如,如果视窗高度为600像素,那么使用"100vh"将会等于600像素。这样,你可以通过将元素的高度设置为"100vh",使其完全填充整个视窗高度。这在创建全屏幻灯片、背景图像或需要完全占据视窗的元素时非常有用。

下拉刷新bindrefresherrefresh : onRefresh下拉刷新事件定义

// 下拉刷新
  onRefresh() {
    var self = this;

    this.setData({
      triggered: true, // 将triggered属性设置为true,表示下拉刷新已经被触发
    })
    this.requestFruitList(this.data.flag, 1, function (data) {
      // 处理响应数据,并将新的数据覆盖原有数据
      this.setData({
        fruits: data.fruits,
        allPage: data.totalPages,
        curPage: 1,
        triggered: false, // 将triggered属性设置为false,表示下拉刷新已完成
      })
      wx.showToast({
        title: "刷新成功"
      })
    }.bind(this), function (err) {
      // 处理请求失败情况
      console.error(err);
      wx.showToast({
        title: "刷新失败,请重试"
      })
    }.bind(this));
  }

源码:

const app = getApp()

Page({
  data: {
    requestUrl: app.globalData.baseUrl,
    types: [{
        id: 1,
        title: "鲜果现切"
      }, {
        id: 2,
        title: "国产零食"
      }, {
        id: 3,
        title: "特产零食"
      },
      {
        id: 4,
        title: "肉类蛋食"
      }, {
        id: 5,
        title: "特色小吃"
      }, {
        id: 6,
        title: "牛奶乳品"
      },
      {
        id: 7,
        title: "水果捞吧"
      }, {
        id: 8,
        title: "当即热销"
      }, {
        id: 9,
        title: "蔬菜鲜卖"
      }
    ],
    fruits: [{
        id: 1,
        name: "哈密瓜",
        price: 29,
        stock: 100,
        imageUrl: "/images/ls.jpg"
      }, {
        id: 2,
        name: "哈密瓜",
        price: 29,
        stock: 100,
        imageUrl: "/images/ls.jpg"
      },
      {
        id: 3,
        name: "哈密瓜",
        price: 29,
        stock: 100,
        imageUrl: "/images/ls.jpg"
      }, {
        id: 4,
        name: "哈密瓜",
        price: 29,
        stock: 100,
        imageUrl: "/images/ls.jpg"
      }
    ],
    flag: 1,
    triggered: false, // 设置当前下拉刷新状态,true 表示下拉刷新已经被触发,false 表示下拉刷新未被触发
    allPage: 1, // 总页数
    curPage: 1, // 当前页数
    windowHeight: null
  },

  // 上拉到底部触发
  loadMore: function () {
    console.log("加载更多");
    var self = this;
    // 为最后一页
    if (self.data.curPage == self.data.allPage) {
      wx.showToast({
        title: '没有更多了',
      })
    } else {
      setTimeout(function () {
        console.log("加载更多");
        var tempCurPage = self.data.curPage;
        tempCurPage++;
        self.setData({
          curPage: tempCurPage
        })
        self.requestFruitList(self.data.flag, self.data.curPage, function (data) {
          // 处理响应数据,并将新的数据添加到原有数据之后
          var newFruits = self.data.fruits.concat(data.fruits);
          self.setData({
            fruits: newFruits,
            allPage: data.totalPages
          });
        }, function (err) {
          // 处理请求失败情况
          console.error(err);
        });
      }, 300)
    }
  },

  // 下拉刷新
  onRefresh() {
    var self = this;

    this.setData({
      triggered: true, // 将triggered属性设置为true,表示下拉刷新已经被触发
    })
    this.requestFruitList(this.data.flag, 1, function (data) {
      // 处理响应数据,并将新的数据覆盖原有数据
      this.setData({
        fruits: data.fruits,
        allPage: data.totalPages,
        curPage: 1,
        triggered: false, // 将triggered属性设置为false,表示下拉刷新已完成
      })
      wx.showToast({
        title: "刷新成功"
      })
    }.bind(this), function (err) {
      // 处理请求失败情况
      console.error(err);
      wx.showToast({
        title: "刷新失败,请重试"
      })
    }.bind(this));
  },

  switchNav: function (e) {
    var page = this;
    var id = e.target.id;
    if (this.data.currentTab == id) {
      return false;
    } else {
      page.setData({
        currentTab: id
      });
    }
    page.setData({
      flag: id,
      curPage: 1
    });
    this.requestFruitList(id, page.data.curPage, function (data) {
      // 处理响应数据
      page.setData({
        fruits: data.fruits,
        allPage: data.totalPages
      });
    }, function (err) {
      // 处理请求失败情况
      console.error(err);
    });
  },
  requestFruitList: function (typeId, curPage, successCallback, failCallback) {
    wx.request({
      url: this.data.requestUrl + '/fruit?typeId=' + typeId + '&pageNum=' + curPage,
      method: 'GET',
      success(res) {
        console.log(res.data);
        // 调用成功回调函数,并将响应数据作为参数传递
        successCallback(res.data);
      },
      fail(err) {
        console.error(err);
        // 调用失败回调函数,并将错误信息作为参数传递
        failCallback(err);
      }
    })
  },
  onLoad: function (options) {
    var id = options.id; // 获取传递的参数
    console.log('接收到的id参数为:' + id);
    var page = this;
    page.setData({
      flag: id
    })
    this.requestFruitList(id, page.data.curPage, function (data) {
      // 处理响应数据
      page.setData({
        fruits: data.fruits,
        allPage: data.totalPages
      });
    }, function (err) {
      // 处理请求失败情况
      console.error(err);
    });

    // 获取屏幕高度
    wx.getSystemInfo({
      success: function (res) {
        page.setData({
          windowHeight: res.windowHeight
        })
        console.log('屏幕高度:', res.windowHeight);
      }
    })
  }
})

微信小程序 - scroll-view组件之上拉加载下拉刷新(解决上拉加载不触发),微信小程序,微信小程序,notepad++,小程序文章来源地址https://www.toymoban.com/news/detail-631190.html

到了这里,关于微信小程序 - scroll-view组件之上拉加载下拉刷新(解决上拉加载不触发)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序 scroll-view 组件的 bindscroll 不触发不生效

    使用微信小程序基础组件中的scroll-view,但是滑动的时候 bindscroll 一直不生效。 在网上查了资料,发现了几类不生效的原因,总结如下: 1、没有设置高度,根据小程序文档,在使用 scroll-view 组件用于竖向滚动时一定要设置高度。 2、没有设定scroll-y 3、组件属性的长度单位默

    2024年02月11日
    浏览(32)
  • 【微信小程序】-- 常用视图容器类组件介绍 -- view、scroll-view和swiper(六)

    💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘   大家好,又见面了,

    2024年01月18日
    浏览(38)
  • 微信小程序组件scroll-view滚动到底部多次触发加载如何解决?

    在 iOS 真机上,scroll-view 滚动时会多次触发 scrolltolower 事件的问题,可以设置一个“加载标识”(如 DisableTrigger)来避免重复请求下一页数据。具体做法为: 在 data 中新增一个 DisableTrigger 变量,用于标识当前是否可以执行下一页数据的加载操作。 在 init()方法中,在请求数据

    2024年02月13日
    浏览(35)
  • 【微信小程序】动态修改page的wxss样式/scroll-view使用/监听子组件

    静态写法 直接使用下面的写法,是静态的。 动态写法 在wxml最外层套一个自己定义的page的class。 如果想修改.page的样式,再用普通的动态class判断改变就可以了。 例如:改变背景颜色 参考:微信小程序如何动态修改page标签的css样式 设置id时需要注意下:id 的设置要求是字母

    2024年02月05日
    浏览(36)
  • 关于uniapp微信小程序scroll-view组件使用show-scrollbar隐藏不了滚动条

    这里关于使用  scroll-view组件  时候有滚动条 想要隐藏滚动条但是使用show-scrollbar没有效果 这时候又使用类名隐藏滚动条 使用id隐藏滚动条都不行 解决方法:在使用  scroll-view组件 的页面或者app 页面加上以下代码就可以了         

    2024年02月12日
    浏览(30)
  • 微信小程序 scroll-view

    微信官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/component/scroll-view.html 微信小程序 scroll-view 提示:以下是本篇文章正文内容,下面案例可供参考 可滚动视图区域 。 代码如下(示例): 提示:css 提示:scroll-view 属性 提示:设置自定义下拉刷新区域背景颜色

    2024年02月11日
    浏览(34)
  • 【微信小程序】scroll-view滚动

    wxml文件 wxss文件       wxml文件 wxss文件     注意事项: 1、在scroll-view标签上加上样式属性: display:flex; white-space:nowrap; 2、scroll-view标签下的一级栏目标签需要加上样式属性: display: inline-block; 只有结合上面两步,才能实现横向滚动。

    2024年02月13日
    浏览(32)
  • 微信小程序常用组件的简单使用 view,scroll-view,swiper,swiper-item,text,rich-text,button,image

    view组件就类似于html中的div标签 list.wxml list.wxss scroll-view组件就是滚动的视窗,使用scroll-view组件时,要想横向滚动或者纵向滚动时,需要在scroll-view组件上添加对应的属性 scroll-x 或 scroll-y,然后需要注意的是,纵向滚动需要给scroll-view组件限定高度,横向滚动则需要给scroll-vi

    2024年02月15日
    浏览(31)
  • 微信小程序scroll-view去掉滚动条

    微信小程序scroll-view去掉滚动条 微信官方文档上面给出了显示和隐藏滚动条的属性 show-scrollbar ,把该属性设置为false,文档要求使用该属性要开启 enhanced 属性,把这个属性设置为true即可; 通过CSS设置滚动条隐藏: 值得注意的是: ::-webkit-scrollbar前要有 scroll-view 的标签名 或

    2024年02月11日
    浏览(38)
  • 【微信小程序】scroll-view的基本使用

    |  scss里面的 .item:nth-child(1) index.wxml index.scss

    2024年02月07日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包