热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信小程序实现列表分页功能

这篇文章主要为大家详细介绍了微信小程序实现列表分页功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

微信小程序列表分页功能(未使用API),供大家参考,具体内容如下

概述

主要实现功能:

1.列表展示
2.上下页点击

效果图:

知识点:wx:for、bindtap、生命周期函数–监听页面加载、.filter、取余( % )取整(parseInt(x/y) )函数

js

data: {
    frontPage: false,//上一页 存在true,不存在false
    nextPage: false,//下一页 存在true,不存在false
    pages: 0,//所有页
    thisPages: 0,//当前页
    rows: 6,//每页条数
    total: 0,//总条数
    pageData: [],//本页显示的列表数据
    prizeListItem:[
      {name: "张三", pic: "../../images/1.png", gift:"小蛋糕"}, 
      {name: "李四", pic: "../../images/2.png", gift:"冰淇淋"}, 
      {name: "陈工", pic: "../../images/3.png", gift:"按摩椅"}, 
      {name: "孙悟空", pic: "../../images/3.png", gift:"桃子"}, 
      {name: "猪八戒", pic: "../../images/2.png", gift:"红烧肉"}, 
      {name: "萨赫尚", pic: "../../images/1.png", gift:"新衣服"}, 
      {name: "程序员", pic: "../../images/2.png", gift:"电脑"}, 
      {name: "甄姬", pic: "../../images/3.png", gift:"口红"},
      {name: "孙悟空", pic: "../../images/3.png", gift:"桃子"}, 
      {name: "猪八戒", pic: "../../images/2.png", gift:"红烧肉"}, 
      {name: "萨赫尚", pic: "../../images/1.png", gift:"新衣服"}, 
      {name: "程序员", pic: "../../images/1.png", gift:"电脑"}, 
      {name: "甄姬", pic: "../../images/2.png", gift:"口红"}
    ],
    myPrize: false,
    tab1: '',
    tab2: 'selected',
  },
/**
   * 生命周期函数--监听页面加载
   */
  onLoad: function () {
    this.setList();
  },
  // 初始化列表分页
  setList() {
    let that = this;
    let thisPages = that.data.thisPages;
    let rows = that.data.rows;
    let prizeListItem = that.data.prizeListItem;
    let pageData = that.data.pageData;
    let pages = that.data.pages;
    if (pageData !== []){
      pageData = prizeListItem.filter(function (item, index, prizeListItem) {
        //元素值,元素的索引,原数组。
        return index >= rows*thisPages && index <= rows*(thisPages+1)-1;  //初始为0,0  1){
        that.setData({
          nextPage: true,
        })
      }
      that.setData({
        thisPages: thisPages,
        pageData: pageData,
        pages: pages,
        rows: rows,
      })
    }
  },
//点击下一页
  clickNext() {
    let that = this;
    let thisPages = that.data.thisPages;
    let prizeListItem = that.data.prizeListItem;
    let pageData = that.data.pageData;
    let pages = that.data.pages;
    let rows = that.data.rows;
    pageData = prizeListItem.filter(function (item, index, prizeListItem) {
      //元素值,元素的索引,原数组。
      return index >= rows*thisPages && index <= rows*(thisPages+1)-1;  
    });
    thisPages = thisPages + 1;
    if ( pages === thisPages){
      that.setData({
        nextPage: false,
      })
    }
    that.setData({
      thisPages: thisPages,
      pageData: pageData,
      frontPage: true,
    })
  },
//点击上一页
  clickFront() {
    let that = this;
    let thisPages = that.data.thisPages;
    let prizeListItem = that.data.prizeListItem;
    let pageData = that.data.pageData;
    let rows = that.data.rows;
    pageData = prizeListItem.filter(function (item, index, prizeListItem) {
      //元素值,元素的索引,原数组。
      return index >= rows*(thisPages-2) && index <= rows*(thisPages-1)-1;  
    });
    thisPages = thisPages - 1;
    if ( thisPages === 1){
      that.setData({
        frontPage: false,
      })
    }
    that.setData({
      thisPages: thisPages,
      pageData: pageData,
      nextPage: true,
    })
  },

wxml


      
        
          
          
            
            {{item.name}}
          
          {{item.gift}}
        
         
      
        
          上一页
        
        第{{thisPages}}页 共{{pages}}页
        
          下一页
        
      
    

wxss

【外框

.con .prizelist{
  width: 100%;
  height: max-content;
  margin-top: 38rpx;
}
.con .prizelist .info_con{
  width: 639rpx;
  height: 787rpx;
  display: inline-block;
}

【list的样式

.con .prizelist .info_con .list{
  width: 639rpx;
  height: 108rpx;
  position: relative;
  margin: 20rpx 0;
}
.list .wi_prize{
  width: 186rpx;
  height: 69rpx;
  margin: 20rpx 0 0 60rpx;
}
.list .prizeinfo{
  width: 350rpx;
  height: 108rpx;
  float: right;
}
.list .prizeinfo .prize_name{
  font-size: 28rpx;
  color: #87562e;
  line-height: 42rpx;
  margin-top: 20rpx;
}
.list .prizeinfo .prize_state{
  font-size: 20rpx;
  color: #ff2d2d;
  line-height: 25rpx;
}
.list .list_bg{
  width: 639rpx;
  height: 108rpx;
  position: absolute;
  left: 56rpx;
  z-index: -1;
}
.list .list_head{
  height: 100%;
  width: max-content;
  margin-left: 100rpx;
  float: left;
}
.list .list_head .list_headpic{
  border-radius: 50%;
  background-color: rgb(43, 93, 216);
  width: 46rpx;
  height: 46rpx;
  margin: 31rpx 0rpx;
  float: left;
}
.list .list_head .list_name{
  color: #000;
  line-height: 108rpx;
  font-size: 28rpx;
  float: left;
  margin-left: 31rpx;
}
.list .list_prize{
  height: 100%;
  line-height: 108rpx;
  font-size: 28rpx;
  color: #87562e;
  float: right;
}

【上下页样式

.con .prizelist .paging{
  width: 580rpx;
  height: 108rpx;
  margin: 30rpx auto;
}
.con .prizelist .paging .page_btn{
  width: 96rpx;
  height: 32rpx;
  font-size: 32rpx;
  font-family: "PingFangSC";
  color: #ffffff;
  line-height: 36rpx;
  float: left;
  margin: auto 23rpx;
}
.con .prizelist .page_num{
  font-size: 24rpx;
  font-family: "PingFangSC";
  color: #ffffff;
  line-height: 36rpx;
  float: left;
  margin: auto 75rpx;
}

结语

有一个可有可无的警告:

Now you can provide attr wx:key for a wx:for to improve performance.

解决办法:添加wx:key属性,

①使用循环的 array 中 item 的某个property,比如 wx:key=“item.id”
此时数组的格式应为:

 {id: "1", name: "张三", pic: "../../images/1.png", gift:"小蛋糕"}, 

②使用数组的下标,即 wx:key=“index”

③ wx:key="*this" 我没太看懂,是

官方文档说的有一个经历过的低级错误:
错误:

onLoad: function () {
    setList();
  },

改正:

onLoad: function () {
    this.setList();
  },

(我都没眼看了,马虎或则脑子不清楚的错误总是次次能碰到——2021年3月9日)

后续

1.被指出 “第 X 页 共 X 页”的margin固定,当页数增加到双位数后,下一页被挤到下一行了。
方法1(同事脑力成果,担待了):修改class为page_name的margin为百分比。

.con .prizelist .page_num{
  margin: auto 75rpx;
}

改为:

.con .prizelist .page_num{
  margin: auto 10%;
}

方法2(我自己的老办法):给“上一页”“共 页”“下一个”分别定义class:


        {{current_page > 1 ? '上一页' : ''}}
        {{current_page 
        第{{current_page}}页 共{{last_page}}页

样式:

.con .prizelist .paging{
  width: 100%;
  height: 108rpx;
  font-size: 32rpx;
  font-family: "PingFangSC";
  color: #ffffff;
  line-height: 36rpx;
  text-align: center;
}
.con .prizelist .paging .up_page{
  width: 96rpx;
  height: 32rpx;
  float: left;
  margin-left: 72rpx;
}
.con .prizelist .paging .down_page{
  width: 96rpx;
  height: 32rpx;
  float: right;
  margin-right: 72rpx;
}
.con .prizelist .page_num{
  width: 500rpx;
  font-size: 24rpx;
  font-family: "PingFangSC";
  color: #ffffff;
  line-height: 36rpx;
  margin: auto;
}

(时间:2021年3月22日)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 深入解析微信小程序开发中的全局配置文件设置与优化技巧
    本文深入探讨了微信小程序开发中全局配置文件的设置与优化技巧,详细解析了 `app.js`、`app.json`、`app.wxss` 和 `project.config.json` 的功能与最佳实践。通过合理配置这些文件,开发者可以显著提升小程序的性能和用户体验。文章还介绍了如何利用这些配置文件进行模块化开发和调试,帮助开发者更好地管理和维护小程序项目。 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 优化后的标题:Apache Cassandra数据写入操作详解
    本文详细解析了 Apache Cassandra 中的数据写入操作,重点介绍了 INSERT 命令的使用方法。该命令主要用于将数据插入到指定表的列中,其基本语法为 `INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...)`。通过具体的示例和应用场景,文章深入探讨了如何高效地执行数据写入操作,以提升系统的性能和可靠性。 ... [详细]
  • 在什么情况下MySQL的可重复读隔离级别会导致幻读现象? ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 如何优化MySQL数据库性能以提升查询效率和系统稳定性 ... [详细]
  • 在Android开发中,BroadcastReceiver(广播接收器)是一个重要的组件,广泛应用于多种场景。本文将深入解析BroadcastReceiver的工作原理、应用场景及其具体实现方法,帮助开发者更好地理解和使用这一组件。通过实例分析,文章详细探讨了静态广播的注册方式、生命周期管理以及常见问题的解决策略,为开发者提供全面的技术指导。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
author-avatar
万源佳威5
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有