动态加载上下滚动数据列表(小程序开发)

实现如上图所示的内容,利用微信小程序自带的swiper标签,设置垂直滚动,原理就是这么简单,但是,如果需要动态加载数据呢?

<view class=‘flex news‘>
  <view class=‘news-left‘>头条</view>
  <swiper class=‘news-right‘ vertical="true" autoplay="true" interval="3000" circular="true">
    <swiper-item>
      <navigator url=‘../news/news‘ class=‘news-content‘ wx:for="{{2}}">新闻标题</navigator>
    </swiper-item>
  </swiper>
</view>

比如:我有n条数据,但现在是每次加载的是两条数据,那么需要创建多少个swiper-item呢?

通过一个小小的计算方式来实现,相信大家动一下脑筋就明白。

var swiperItem=function(length,item){
  if(length%item==0){
    return length / item;
  }else{
    return (length /item)+1;
  }
}

module.exports = {
  swiperItem:swiperItem //暴露该返回值
};

 

这个方法我是用在一个工具类中,我觉得在开发小程序的过程中,也可以尽量的做到封装和继承。比如:写一个工具类,将所有属于数据转化这类的方法可以封装在这个js文件中,然后通过引用,直接调用这个方法,免去了在page页面js中代码过多,不便于后面维护。由于接手的是已完成的项目,所以用的是js语法,没有用ts语法,学过Java或其他面向对象编程思想的同学,可以尝试用ts语法来开发小程序,好处就不多说了。

在index.js文件中引用该方

var util=require("../../../../utils/util.js");//引用Page({  data{    barNum:0  }  onLoad: function(options) {    that.setData({
        barNum:util.swiperItem(res.length,2) //res数据为向后台请求的数据,2是在每个swiper-item中显示的条数
      })
  }
})

这样就可以知道可以分多少个swiper-item展示了,(wx:for="{{barNum}}")但是,在每个swi-item中要显示两条数据,那n条数据中,怎么一一对应插入到navigator中呢?

这里写一下总体思路吧:假如有10条数据,那肯定是分为5页显示了,那10条数据如何放入到navigator中呢?可以利用数组下标来表示:

newsList表示json数组,每条新闻标题可以表示为:newsList[0],newsList[1].....这样表示下去一直到newsList[9];

这个时候定义的barNum这个变量肯定是5,也就是说wx:for="{{5}}",下标index1为,0,1,2,3,4可以从这个下标入手,

还有另一个下标,那就是在navigator中的,wx:for="{{2}}",因为每次两条都是写死的,所以,每次的index2下标都是0,1

我的计算思路是这样的:下标=(index1*2)+index2,这样循环newsList数组的下标都是遵循0,1,2,3...的

具体代码入下;

<view class=‘flex news‘>
  <view class=‘news-left‘>头条</view>
  <swiper class=‘news-right‘ vertical="true" autoplay="true" interval="3000" circular="true">
    <swiper-item wx:for="{{barNum}}" wx:for-index="idx1">
      <navigator url=‘../news/news‘ class=‘news-content‘ wx:for="{{2}}" wx:for-index="idx2">{{topicList[(idx1*2)+idx2].title}}</navigator>
    </swiper-item>
  </swiper>
</view>    

当然,肯定会有 更好的计算分页方法,推算不易,不喜勿喷。。。。

原文地址:https://www.cnblogs.com/liao123/p/11012963.html

时间: 2024-11-12 22:19:25

动态加载上下滚动数据列表(小程序开发)的相关文章

通过页面预加载(preload)提升小程序的响应速度

GitHub: https://github.com/WozHuang/mp-extend 主要目标 如果小程序在打开新页面时需要通过网络请求从接口中获取所用的数据,在请求完成之前页面都会因为没有数据而呈现一片空白,解决这个问题常见的解决方案有: 先使用从缓存中取出上一次的数据,等到请求结束后再使用请求得到的数据(这个对于变动不大的数据是完全可行的,但是对于变动大或者以内容为主的功能并不合适) 在加载时显示骨架屏(知乎和饿了么的移动端有的地方是这么做的) 前一个页面预加载下一个页面的数据,达到秒

动态加载下拉框列表并添加onclick事件

1.  js动态加载元素并设置属性 摘自(http://www.liangshunet.com/ca/201408/336848696.htm) <div id="parent"></div> function addElementDiv(obj) { var parent = document.getElementById(obj); //添加 div var div = document.createElement("div"); //设

vue:使用不同参数跳转同一组件,实现动态加载图片和数据,以及利用localStorage和vuex持久化数据

需求:通过不同的参数复用同一组件,实现动态加载数据和图片,同时,在页面刷新时,图片依旧可以加载成功. 过程出现的bug和问题: 1.使用params传参后,再次刷新页面,参数丢失导致数据无法再次加载 2.改用query进行传参后,页面刷新后图片无法加载,这是由于图片的url是在created钩子函数调用查询数据api后才进行赋值,而赋值之后页面已经渲染完成,导致图片无法加载成功 解决方案: 1.通过localStorage将数据持久化,在跳转到当前路由时,先使用localStorage将数据持久

根据JSON对象动态加载表格--大数据量

EasyUI的DataGrid加载数据的时候,如果列数过多(300列以上),数据渲染及其缓慢. JSON对象格式: 1:rowno 2:title 3:colspan 4:rowspan 5:backgroundcolor 五项属性必须设置 ar json={total:3,rows:[{'rowno':1,'title':'ceshi','colspan':1,rowspan:1,'backgroundcolor':'red'},{'rowno':1,'title':'ceshi1','col

在页面中使用拼接字符串的方式显示动态加载的数据

在做页面的时候为了使页面美化,我们经常会用拼接字符串的方式,动态加载后台的数据,这里我们使用的前台框架是bootstrap,但是很多效果还是要用jquery来实现 (1)方法传参与字符串的拼接  (拼接用的replace) 先声明一个展示数据的页面模型(使用过的模型1) var userModel = "<div class=\"itemdiv commentdiv\" style=\"margin-left: 7%;\">"+ &q

005 动态加载实例

from selenium import webdriver from selenium.webdriver.chrome.options import Options from time import sleep # 创建一个对象,用来控制chorme以无界面模式打开 chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu')

项目总结—jQuery EasyUI-DataGrid动态加载表头

http://blog.csdn.net/zwk626542417/article/details/19248747 概要 在前面两篇文章中,我们已经介绍了在jQuery EasyUI-DataGrid中有参数和无参数的情况下将数据库中数据显示到前台,但是对于前面两篇文章显示的数据表头是固定的,如果我们显示到前台的数据来自数据库不同的表,那么表头也需要动态的加载,这篇文章我们就来看下在EasyUI-DataGrid中动态加载表头和数据. 实现 我们要实现的功能是根据我们的需要,让DataGrid

Android 插件开发,做成动态加载

为什么需要插件开发: 相信你对Android方法数不能超过65K的限制应该有所耳闻,随着应用程序功能不断的丰富,总有一天你会遇到一个异常: Conversion to Dalvik format failed:Unable toexecute dex: method ID not in [0, 0xffff]: 65536 可能有些同学会说,解决这个问题很简单,我们只需要在Project.proterty中配置一句话就Ok啦, dex.force.jumbo=true 是的,加入了这句话,确实可

如何用easyui动态加载表格标题

在最近做的项目中涉及到了需要加载大量表格的功能,采用了easyui的datagrid,但是发现datdagrid表格标题需要手动写,这在表格多的情况是一件很麻烦的事情.经过了long long time 终于研究出来了动态加载表格标题的方法. 首先给下效果图. 刚开始本人用easyui最原始的方式将表格放入我需要它放置的位置.整体页面因为某些原因呢就不展示给大家看了. 首先大家可以去网上下载easyui的包以及easyui的中文文档.easyui包友情链接:http://www.jeasyui.