微信小程序开发 懒加载+瀑布流+排序功能

在小程序的开发过程中,遇到了这样的功能需求:在保持瀑布流布局的情况下,使用懒加载来渲染页面,并且要求对其中的属性添加排序功能。

单独拿出来都是很好实现的功能,但是当三个功能联系在一起时,问题就出现了。

最开始采用了CSS的方式来实现瀑布流,即通过属性column-count来控制列数,但很快发现,这样的瀑布流的顺序是从上到下后再从左到右,与原型图的要求并不符合,况且在加上懒加载后,由于整体的数据数量发生了变化,整个瀑布流相当于又重新加载了一次,不仅不能实现功能,还加大了加载的压力

所幸瀑布流还可以通过JS来进行实现,在查阅了相关的方法后,找到了符合要求的写法,具体如下:

采用左右两列布局,实时判断两侧的高度,当一侧大于另一侧时,就将对应的内容添加到少的一侧

js代码:

async isLeft(list, leftList, rightList) {
    let t = this;
    query = wx.createSelectorQuery();
    for (const item of list) {
      leftHeight <= rightHeight ? leftList.push(item) : rightList.push(item); //判断两边高度,来决定添加到那边
      await this.getBoxHeight(leftList, rightList);
    }
    console.log(leftList, rightList);
    setTimeout(() => {
      t.setData({
        show: "visible"
      })
    }, 1000)

  },
  getBoxHeight(leftList, rightList) { //获取左右两边高度
    return new Promise((resolve, reject) => {
      this.setData({
        leftList,
        rightList
      }, () => {
        query.select('#left').boundingClientRect();
        query.select('#right').boundingClientRect();
        query.exec((res) => {
          leftHeight = res[0].height; //获取左边列表的高度
          rightHeight = res[1].height; //获取右边列表的高度
          resolve();
        });
      });
    })
  }

 wxml:

<view id="left">
      <view class="store_item" wx:for="{{leftList}}" wx:key="indexs" bindtap="storeIndex" data-id="{{item.id}}">
        <view class="store_img">
          <image mode="widthFix" lazy-load="true" src="" />
        </view>
        <view class="store_text">
          <view class="text">测试用</view>
          <view class="view">
            <text>浏览量:{{item.show_view}}</text>
          </view>
        </view>
      </view>
    </view>
    <view id="right">
      <view class="store_item" wx:for="{{rightList}}" wx:key="indexs" bindtap="storeIndex" data-id="{{item.id}}">
        <view class="store_img">
          <image mode="widthFix" lazy-load="true" src="" />
        </view>
        <view class="store_text">
          <view class="text">测试用</view>
          <view class="view">
            <text>浏览量:{{item.show_view}}</text>
          </view>
        </view>
      </view>
    </view>
    <view style="clear: both;"></view>

注意需要为左右两个列表设置浮动

#left{
  width: 49%;
  float: left;
}
#right{
  width: 49%;
  float: left;
  margin-left: 2%;
}

这样我们的瀑布流布局就算实现了

懒加载:

onReachBottom: function () {
    let t = this
    const start = this.data.renderedGoodsList.length; // 计算当前已渲染数据的末尾索引
    const end = Math.min(start + this.data.pageSize, this.data.list.length); // 计算下一批数据的结束索引
    const nextBatch = this.data.list.slice(start, end); // 获取下一批数据
    const newRenderedGoodsList = this.data.renderedGoodsList.concat(nextBatch); // 合并新数据
    this.isLeft(nextBatch, t.data.leftList, t.data.rightList);
    this.setData({
      renderedGoodsList: newRenderedGoodsList
    });
  },

绑定在页面最外层的scroll-view滚动事件上即可,每当滚动到底部时都会触发

<scroll-view scroll-y style="height: 100vh" bindscrolltolower="onReachBottom">

最后需要注意的是,在触发切换事件导致排序发生变化时,应当手动将左右两侧的列表的高度清空,防止重新识别高度时产生的错判导致左右换位。

希望能为你带来帮助

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 微信小程序开发是一种基于微信平台的应用程序开发方式,可以在微信内直接运行的应用程序。它可以实现类似于APP的功能,但相比APP更加轻量、快速、易于开发和使用。 微信小程序开发主要分为前端和后端两部分。 前端开发是指通过使用小程序开发框架(如原生开发、wepy等)进行界面和交互的开发开发者可以使用HTML、CSS和Javascript等技术进行整体的页面布局设计和交互逻辑的编写。通过小程序开发框架提供的API和组件,可以实现丰富的界面效果和功能。在前端开发中,可以通过调用后端接口获取数据或进行页面跳转等操作。 后端开发是指通过使用Java等编程语言进行服务器端的开发。在微信小程序中,后端开发主要用于数据的处理和管理。开发者可以通过后端开发来搭建服务器、编写API接口,实现数据存储和处理、权限控制、业务逻辑等功能。后端开发需要结合小程序前端的需求,定义数据的格式和访问方式,并与前端进行交互。 微信小程序开发前端和后端的配合是整个开发过程中的重要环节。开发者需要根据产品需求和设计稿进行界面和交互的开发,并将数据以适当的格式传输给后端进行处理和管理。前后端的协作可以通过API接口进行,前端调用后端提供的接口,传递参数并获取数据。开发者可以根据具体需求和开发框架的限制进行功能开发和调试,最终实现微信小程序的各项功能需求。 总之,微信小程序开发需要前端和后端的配合,前端负责界面和交互的开发,后端负责数据的处理和管理,两者相互合作,共同实现微信小程序的功能和效果。 ### 回答2: 微信小程序开发包括前端和后端两个主要部分。 1. 前端开发微信小程序前端开发主要使用HTML、CSS和JavaScript等技术,通过编写小程序页面的HTML结构、样式和交互逻辑来实现小程序的界面和功能。开发者可以使用微信提供的开发者工具进行开发和调试,还可以利用第三方框架如Vue.js、React等来简化开发流程。 在前端开发中,开发者需要了解微信小程序的基本组件和API,以及小程序的生命周期、页面间的跳转和传递数据等。同时,还需要掌握微信小程序开发规范和设计原则,以保证用户体验和小程序的可靠性。 2. 后端开发微信小程序后端开发主要使用Java等编程语言进行实现。后端开发者需要负责处理小程序前端发送来的请求,验证用户身份,获取和处理数据,并将结果返回给前端。 在后端开发中,开发者需要使用Java开发框架如Spring Boot、Spring Cloud等,搭建服务器环境并实现业务逻辑。此外,还需要与数据库进行交互,操作和管理数据。同时,为了提高小程序的性能和可靠性,开发者还需要进行性能优化、错误处理和安全防护等工作。 综上所述,微信小程序开发需要前端和后端的配合合作。前端负责实现小程序的界面和用户交互,后端负责处理数据和业务逻辑。通过整合两者的能力,可以开发出功能完善、用户体验较好的微信小程序。 ### 回答3: 微信小程序是一种基于微信平台的应用程序开发模式,它具有轻量级、快速加载和便捷的特点。微信小程序开发涉及到前端和后端两方面的技术。 在前端开发中,我们需要掌握HTML、CSS和JavaScript等基础技术,同时需要熟悉微信小程序提供的开发框架和API。前端开发主要包括页面布局、样式设计、交互逻辑实现等工作。通过使用微信小程序的框架和API,我们可以快速地开发小程序,并且能够提供良好的用户体验。 在后端开发中,我们通常选择使用Java语言进行开发。Java是一种常用的编程语言,具有广泛的应用领域和稳定的性能。后端开发主要涉及到数据处理、业务逻辑编写、接口开发等方面的工作。我们可以使用Java的一些开发框架和工具,如Spring、SpringBoot等,来进行后端开发。这些框架和工具提供了丰富的功能模块,可以帮助我们快速地构建小程序所需的后端服务。 总而言之,微信小程序开发涉及到前端和后端两方面的技术。前端开发主要负责小程序的页面设计和交互逻辑实现,后端开发则负责提供数据处理和业务逻辑支持。通过前端和后端的协同工作,我们能够开发出功能完善、用户友好的微信小程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值