小程序scroll-view自适应高度(小程序瀑布流解决左右两边高度差距过大的问题)
小程序scroll-view自适应高度
小程序瀑布流解决左右两边高度差距过大的问题想要实现瀑布流的布局效果,并且是按照从左到右顺序显示的话,css布局方式暂时还不能满足我们的需求。参考小红书的瀑布流效果,小红书是分左右两栏的,按照奇数偶数来显示就可以。
<view class="waterfall"> <view class="waterfall-left"> <view wx:if="{{index%2 == 0}}" class="item"></view> </view> <view class="waterfall-right"> <view wx:if="{{index%2 == 1}}" class="item"></view> </view> </view>
但是问题来了,随着每个元素高度的不确定性,很大几率会出现左右两栏高度相差大的问题。
解决方法:
要解决这个问题,我们要找出导致每个元素的高度不同的原因,一般是图片的高度,也可能是根据条件显示的某些区域,建议只有图片的高度不同,其它部分的高度保持不变,这会使得我们的计算变得简单。
大概思路,取得左右两栏的高度,计算左右两栏的高请输入代码度差值,移动两栏差值threshold
的2分之1,如图:
上面是理想的状态,但是我们不可能切开元素,我们要知道高度高的一边的是否有符合移动的元素,如果高度高的那栏中高度最小的元素minH
小于 差值threshold
,那么我们可以移动,可以取长边某个与差值的二分之一高度最接近的一个元素minH
(一般是高度最小的那个,也可以取巧地移动高度最小的一个)。如果高度最小的元素比差值还大,则不需要移动。
那么怎么移动,默认给元素一个属性position,值为center,如果该元素要移动到左边,那么给该元素一个属性:position:left;优先根据position属性来显示,其次才根据奇数偶数来显示,如下:
<view class="waterfall"> <view class="waterfall-left"> <view wx:if="{{item.position=='left' || (index%2 == 0&&item.position=='center')}}" class="item"></view> </view> <view class="waterfall-right"> <view wx:if="{{item.position=='right' || (index%2 == 1&&item.position=='center')}}" class="item"></view> </view> </view>
至此,高度相差较大的问题就可以解决了。
我们如何计算两栏的高度呢?
重点是获取图片的宽高,我们就可以知道两栏的高度,这里分两种情况:
1. 接口返回图片的宽高
接口返回了图片的宽高,那么我们直接累加图片的高度,就可以比较两栏的高度,得出高度差。
如果较高的一边的minH
比两栏高度的差值threshold
小,即minH < threshold
,那么minH
就需要移动
这种方式在拿到数据的同时,我们就可以知道某个元素是否需要移动。处理完数据后马上渲染到视图层。
这种方法当然是最省心的,但是接口也有可能不返回图片的宽高,于是就要用第2种方法了。
2. 接口不返回图片的宽高,在图片load事件取得图片宽高
监听图片的load事件,获得图片的宽高,在最后一张图片load完之后,用boundingClientRect测量两栏的高度,得出高度差。
这种方法则必须在图片加载完,再测量某个元素是否需要移动,元素移动会比较明显。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
- 微信小程序通知验证签名方法(微信小程序实现电子签名)
- 微信小程序开发完整操作流程(微信小程序开发之组件设计规范)
- 微信小程序开发如何实现自动保存(微信小程序开发实用技巧之数据传递和存储)
- 小程序开发者代码工具(解析从小程序开发者工具源码看原理实现)
- 微信小程序js 抽奖概率(小程序实现筛子抽奖)
- 微信小程序canvas 动画(微信小程序使用canvas绘制钟表)
- html5按钮点击跳转(HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题)
- 能自动点赞的小程序(python实现QQ空间自动点赞功能)
- 聊天室python小程序(用Python写一个模拟qq聊天小程序的代码实例)
- 微信小程序存token(小程序开发实现access_token统一管理)
- 微信小程序scrollview 截图(微信小程序scroll-view不能左右滑动问题的解决方法)
- 微信小程序如何请求服务器数据(微信小程序学习笔记之页面配置与路由方式)
- 微信小程序接入第三方支付的方法(小程序通过小程序云实现微信支付功能实例)
- 微信小程序可以用h5开发不(微信小程序webView嵌入H5的方法实例)
- 微信小程序swiper大小调整(微信小程序swiper-dot中的点如何改成滑块详解)
- 微信小程序签名怎么操作(微信小程序实现简单手写签名组件的方法实例)
- 如何快速赚钱(如何快速赚钱方法真实有效)
- 这里输入关键词(如何输入关键词)
- 熊猫中国国宝(熊猫国宝酒53酱香)
- 春节会放假几天(春节会放假吗)
- 小浴室,大民生 缙云3200多户困难群众洗上免费热水澡(小浴室大民生缙云3200多户困难群众洗上免费热水澡)
- 元旦闲谭(元旦闲谭)
热门推荐
- mysql获取随机数(MySQL 生成随机数字、字符串、日期、验证码及 UUID的方法)
- pandas画布设置数据标签(pandas dataframe添加表格框线输出的方法)
- 怎么写存储过程sql server(SqlServer存储过程实现及拼接sql的注意点)
- css宫格布局(CSS实现页面九宫格布局的简单示范)
- sqlserver怎么调成混合登录(如何快速删掉SQL Server登录时登录名下拉列表框中的选项)
- 已授权和未授权(提示您未被授权查看该页怎么解决?)
- mysql默认的事务隔离级别是哪一种(MySql学习笔记之事务隔离级别详解)
- dedecms标签怎么调用(dedecms织梦系统内容页英文字母不换行的解决方法)
- laravel框架如何查询空的信息(Laravel中validation验证 返回中文提示 全局设置的方法)
- php中字符串反转的函数(php常用字符串查找函数strstr与strpos实例分析)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9