根据小程序的设定,swiper组件默认高度为150px,无法根据内容来撑高。如果里面的内容固定还好说,直接设置一个高度就可以了。要是里面内容是动态变化的,这个特性使得我们使用这个组件的时候感到诸多不便。

举个例子:

如下这种情况,如果我们不给它设置一个高度,那么它只会在那个150px局部进行滚动了。

那么我们如何动态改变它的高度呢?

情况1:数据每条高度都是一样

原理:获取1条数据的高度*数据的条数。

js代码如下:

const query = wx.createSelectorQuery()
query.select('.class-item').boundingClientRect()
query.exec(function (res) {
console.log(res)
console.log(res[0].height)
console.log(res[0].height * data.t.length)
let sumHeigth = res[0].height * data.t.length;
_this.setData({
swiperHeight: sumHeigth
})
})
对于wx..createSelectorQuery() 不太了解的可看下官方文档说明。
 
data.t是ajax请求返回的结果。
 
class-item为单条数据的class,如下图:

返回结果如下:

wxml中赋值:

情况2:数据每条高度不一致

原理:给每条数据一个不同的class,再通过微信的selectAll返回每条的数据的高度,把这些高度相加就是整个swiper的高度了。

wxml代码截图如下:

class-item{{index}}里面的{{index}}是为了给每条数据不同的class

定义一个返回高度的方法:

get_wxml(className, callback) {
wx.createSelectorQuery().selectAll(className).boundingClientRect().exec(callback)
},

js代码如下: 

let planItemSelect = '';
for(let i=0;i<data.t.length;i++){ //data.t是ajax请求返回的数据
planItemSelect += `.class-list-block${_this.data.status} .class-item${i},` //_this.data.status表示当前是第几个swiper-item
} let sumHeigth = 0
_this.get_wxml(planItemSelect, (res) => {
for (let i = 0; i < res[0].length; i++) {
sumHeigth += res[0][i].height //获取每条数据的高度并相加
}
_this.setData({
swiperHeight: sumHeigth
})
})

最后赋值跟情况1最后一步是一样的了。

以上就是我动态获取swiper高度的方法了。如果您有更好的处理方法,望不吝赐教哈~~~

微信小程序——动态设置swiper的高度的更多相关文章

  1. 微信小程序-动态设置背景色navigationBarBackgroundColor的值

    查看API: wx.setNavigationBarColor(OBJECT) 代码: wx.setNavigationBarColor({ frontColor: '#ffffff', // 必写项 ...

  2. 微信小程序wxss设置样式

    微信小程序wxss设置样式 对于以前搞客户端开发的来说,有着客户端的逻辑,就是不知道怎么设置样式,把对应的控件显示出来 一.wxml 界面结构wxmL比较容易理解,主要是由八大类基础组件构成: 一.视 ...

  3. 微信小程序动态生成保存二维码

    起源:最近小程序需要涉及到一些推广方面的功能,所以要写一个动态生成二维码用户进行下载分享,写完之后受益良多,特此来分享一下: 一.微信小程序动态生成保存二维码 wxml: <view class ...

  4. 微信小程序警告设置 enable-flex 属性以使 flexbox 布局生效的解决办法

    微信小程序警告设置 enable-flex 属性以使 flexbox 布局生效的解决办法 具体情况: scroll-view 滚动,设置 display:flex 不生效并警告设置 enable-fl ...

  5. 微信小程序----wxss设置样式

    一.wxml 界面结构wxmL比较容易理解,主要是由八大类基础组件构成: 一.视图容器(View Container): 二.基础内容(Basic Content) 组件名 说明 组件名 说明 vie ...

  6. 微信小程序字体设置

    微信小程序css篇----字体(Font) 一.字体:font.属性在一个声明中设置所有字体属性. 可设置的属性是(按顺序): "font-style font-variant font-w ...

  7. 微信小程序如何设置服务器配置

    最近微信小程序在it界火了起来,公司也要求我们开始接触微信小程序,废话不多说直接从配置微信小程序开始 1,首先,登录 https://mp.weixin.qq.com,(这里默认你已经获取到微信小程序 ...

  8. 微信小程序tabbar设置样式在哪里改

    微信小程序tabbar通俗点说就是底部导航,我们一般会配置相关的菜单,方便读者快速导航.tabbar是在项目根目录中的配置文件 app.json 中进行设置:如果小程序是一个多 tab 应用(客户端窗 ...

  9. 微信小程序:设置启动页面

    一.功能描述 微信小程序启动时,首先运行app.js,然后才跳转到第一个页面,也就是启动界面. 设置启动界面,只需要调整app.json的pages信息的位置,放在第一条的page记录便是启动界面

随机推荐

  1. [CF536D]Tavas in Kansas

    [CF536D]Tavas in Kansas 题目大意: 一张\(n(n\le2000)\)个点,\(m(m\le10^5)\)条边的无向带权连通图(权值可以为负).A.B两人分别在\(s,t\)点 ...

  2. No mapping found for HTTP request with URI [/webapp/] in DispatcherServlet with name 'SpringMVC'

    可能有如下几个原因: 1.是否设置了web目录,在IDEA中,web目录是这样的 如果没有设置,按照下面的方法设置: 选中要设置的模块,点击file.project structure,设置web.x ...

  3. Debian stretch更换国内源

    在debian图形化安装过程中就可以选择网络镜像的位置 据说电信用清华的源快,移动的用网易源快 备份源配置文件: cp /etc/apt/sources.list /etc/apt/sources.l ...

  4. BZOJ3499 : PA2009 Quasi-template

    建立后缀树,用线段树合并求出每个节点子树内部最靠前和最靠后的后缀位置以及相邻后缀距离的最大值,同时求出每个子串能完整匹配的最长后缀的长度. 对于一个子串,如果其长度不小于相邻后缀距离的最大值,且最靠后 ...

  5. Code signing is required for product type 'Application' in SDK 'iOS 11.4'

    查看链接: https://blog.csdn.net/Fantasy_Jun/article/details/78082359 处理方法: 将code signing identity设置为iOS ...

  6. sublime Text3 插件

    sublime  Text3 插件大全以及使用方法 参考网址: https://www.cnblogs.com/qqing/p/6872195.html

  7. innerHTML innerText与outerHTML间的区别

    innerHTML与innerText及outerHTML间的区别最容易使初学者搞混淆,为了更好的使读者区分开.下面我就通过一个demo来解释: 代码: <!DOCTYPE html>&l ...

  8. Sklearn线性回归

    Sklearn线性回归 原理 线性回归是最为简单而经典的回归模型,用了最小二乘法的思想,用一个n-1维的超平面拟合n维数据 数学形式 \[y(w,x)=w_0+w_1x_1+w_2x_2+-+w_nx ...

  9. Vue(二十)项目初始化步骤

    提:需要安装 node.js / npm淘宝镜像 / webpack / vue-cli脚手架构建工具 1.创建项目 - vue init webpack framework https://gith ...

  10. es6学习笔记一:迭代器和for-of循环

    我们如何遍历一个数组呢?在20年前,我们是这样遍历一个数组的: var myArr = []; for (var i = 0; i < arr.length; i++) { console.lo ...