微信小程序 scroll-view 填满剩余可用高度
根据微信小程序 scroll-view 文档所述,scroll-view必须给定一个固定高度。那么如果我们想要让它自动填充剩余高度,该怎么办呢?
前言
在说出我的解决方案之前,先来看一下我的页面设计,以便于理解。
我将这个页面分成了三部分:最顶部的导航栏navbar,用于显示概要信息的header,以及本文的主角scroll-view。可见,scroll-view位于页面的最下方,如果我直接给它设定一个固定的高度,那么在不同尺寸的屏幕上,就可能会有高度过小而在下方留白,或者高度过大超出屏幕下边界的可能。那么,自动计算scroll-view的高度,看起来是一个可行的办法。
思路有了,接下来就开始挑趁手的工具吧!
需要的 API
首先,在计算过程中,整个页面的高度是必须要有的。而小程序的 wx.getSystemInfo API 正好可以提供这样的功能。
其次,我们还得想办法拿到scroll-view上面各个组件的高度。小程序虽然没有 DOM 操作,但也提供 WXML 节点信息的 API。
简洁起见,我只会写出相关的代码,其余的代码我将直接略掉。
Page({
data: {
// 页面总高度将会放在这里
windowHeight: 0,
// navbar的高度
navbarHeight: 0,
// header的高度
headerHeight: 0,
// scroll-view的高度
scrollViewHeight: 0
},
onLoad: function(option) {
// 先取出页面高度 windowHeight
wx.getSystemInfo({
success: function(res) {
that.setData({
windowHeight: res.windowHeight
});
}
});
// 然后取出navbar和header的高度
// 根据文档,先创建一个SelectorQuery对象实例
let query = wx.createSelectorQuery().in(this);
// 然后逐个取出navbar和header的节点信息
// 选择器的语法与jQuery语法相同
query.select('#navbar').boundingClientRect();
query.select('#header').boundingClientRect();
// 执行上面所指定的请求,结果会按照顺序存放于一个数组中,在callback的第一个参数中返回
query.exec((res) => {
// 分别取出navbar和header的高度
let navbarHeight = res[0].height;
let headerHeight = res[1].height;
// 然后就是做个减法
let scrollViewHeight = this.data.windowHeight - navbarHeight - headerHeight;
// 算出来之后存到data对象里面
this.setData({
scrollViewHeight: scrollViewHeight
});
});
}
})
至于 WXML 里面,就还是使用双大括号来将data部分的scrollViewHeight的值绑定到height属性上面就是了。
需要注意的是,上面计算出来的值,单位是px而不是rpx。
<scroll-view style="height: {{scrollViewHeight}}px" scroll-y="true">
<!-- scroll-view里面的内容 -->
</scroll-view>
转:https://blog.csdn.net/QFire/article/details/84558515
微信小程序 scroll-view 填满剩余可用高度的更多相关文章
- 微信小程序 -- scroll view
效果图:横向滚动和纵向滚动 scroll view使用方法文档,前面已经介绍查找文档方法,此处不再赘述 一.横向滚动 创建一个页面scroll-nav 然后,在.wxml文件中排版 <!--水平 ...
- 关于微信小程序获取view的动态高度填坑
wx.createSelectorQuery().select('#box').boundingClientRect(function (rect) { width = rect.width heig ...
- 微信小程序 image图片组件实现宽度固定 高度自适应
给img的mode设置值 注1:image组件默认宽度300px.高度225px 注2:image组件中二维码/小程序码图片不支持长按识别.仅在wx.previewImage中支持长按识别. mode ...
- 微信小程序将view动态填满全屏
一.在app.js利用官方方法获取设备信息,将获取到的screenHeight.windowHeight度量单位统一由rpx换算为px 注:官方文档给出 [rpx换算px (屏幕宽度/750) ][ ...
- 微信小程序scroll标签的测试
一:testscroll.wxml的代码如下.testview.js自动生成示例代码 //testscroll.wxml <view class="section__title&quo ...
- 【微信小程序】view顶部固定或底部固定 + scroll-view中的元素view也可以使用position:fixed;固定选中元素位置
1.顶端固定核心代码如下: <view class="page__hd" style="position:fixed; top:0;width: 750rpx;&q ...
- 微信小程序设置背景铺满全屏
参考方法: 新版本升级取消了默认page的100%的特性 需要在app.wxss文件中加入如下代码: page{ height:100%; }
- 微信小程序 Image 图片实现宽度100%,高度自适应
做法如下: 样式设置宽度100%, .img{ width:100%;} 添加属性 mode="widthFix", <image class="img" ...
- 一个小时快速搭建微信小程序教程
「小程序」这个划时代的产品发布快一周了,互联网技术人都在摩拳擦掌,跃跃欲试.可是小程序目前还在内测,首批只发放了 200 个内测资格(泪流满面).本以为没有 AppID 这个月就与小程序无缘了,庆幸的 ...
随机推荐
- python之csv操作
在使用python爬虫时或者其他情况,都会用到csv存储与读取的相关操作,我们在这里就浅谈一下: CSV(Comma-Separated Values)逗号分隔符,也就是每条记录中的值与值之间是用分号 ...
- await在forEach不起作用解决【await is a reserved word】
原文链接:https://blog.csdn.net/ssbb1995/article/details/82084800 1.await 只能在 async中使用,如: async function ...
- MySQL进阶16 - 视图的创建/修改/删除/更新--可更新性的不适用条件
#进阶16 : 视图 /* 含义: 虚拟表,和普通表一样使用;(从5.1开始使用的:)是通过表动态生成的数据 创建语法: create view 视图名 as 查询语句; ---------- 作用: ...
- C++读取中文或英文文件空格分割
// show file content - sbumpc() example #include <iostream> // std::cout, std::streambuf #incl ...
- 1127 模型层orm表操作
目录 昨日回顾 模型层 1.配置测试脚本 1.1 应用下tests文件 1.2 新建任意名称文件 2. 数据的增删改查 2.1 创建数据 2.2 修改数据 2.3 删除数据 2.4查询数据 十三门徒 ...
- WCF之MSMQ消息队列
一.MSMQ简介 MSMQ(微软消息队列)是Windows操作系统中消息应用程序的基础,是用于创建分布式.松散连接的消息通讯应用程序的开发工具. MSMQ与XML Web Services和.Net ...
- QPainter 提高绘制效率的方法
原文: https://my.oschina.net/u/3919756/blog/1944747 如果我们用painter一个一个的绘制直线,圆等在控件上,绘制效率会不高.为了提高效率,我们可以设置 ...
- [CSS] Conditionally Assign Style to a Parent Element with Focus-Within Pseudo-class
Use the focus-within pseudo-class to conditionally assign styling to a parent element when its child ...
- 使用JSP/Servalet技术开发新闻发布系统------JSP数据交互一
什么是内置对象 JSP内置对象是 Web 容器创建的一组对象,不用通过手动new就可以使用 JSP中的九大内存对象 request 请求对象 response 响应对象 out 输出对象 ...
- leetcode解题报告(14):Max Consecutive Ones
描述 Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: ...