小程序制作平滑滚动展开效果,并且不需要写死flex布局的固定高度.提高小程序逼格的动画.类似Ant Design的Collapse折叠面板

本文主要是介绍小程序制作平滑滚动展开效果,并且不需要写死flex布局的固定高度.提高小程序逼格的动画.类似Ant Design的Collapse折叠面板,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

传统的小程序,展开和折叠其实很简单,小程序本身是以数据驱动的理念渲染的,控制数据即可.但是为了用户体验,那种点一下页面就弹开没有任何效果过度的,简直不忍直视.

页面结构:

card-box //列表容器card //一行一个元素line1默认展示的内容line2默认隐藏的内容,可以展开,可以被折叠line3展开和隐藏的按钮

也就是说,card-box中有很多的card

card是默认就展示一些信息,当展开的时候会显示更多的信息,然后scroll-view中的其他的card自动排列位置

当展开和关闭的时候,整个card会有动画效果,其他的元素老老实实呆着,该往下移或者往上走的时候,自动排列.

效果如下,实际比这个流畅,转换到gif以后就变味道了. 如果需要源码的,请联系我发给你

 


先说一下需要注意的问题.

1.前期写界面的时候为了看到效果.我们可能用到min-height的css,但是如果是做可展开可折叠的选项卡的时候,这个参数要慎用.不然会导致flex布局的错乱.

2.卡片元素要设置flex布局的两个参数   

style="overflow: hidden; white-space: normal"

以保证通过animation的height函数设置卡片的总高度的时候,超出的部分不显示,不过不用担心,等待动画结束后,该高度就是最终正确的高度.只是为了在动画过程中隐藏不要显示的内容.如果不设置这两个参数,点击展开以后,所有的子元素行都会显示出来,然后外边框的card元素一个幽灵一样的卡片边框在那傻愣愣的变换高度.

3.如果多个卡片在scroll-view中,卡片是使用wx:for来遍历展示的,那么这个card的animation属性设置的时候一定要做判断,只有当前点击的card才展示动画效果,不然动画效果其实就是在改变元素的高度,所有wx:for符合遍历条件的元素的高度都会跟着一起变化

所以这里设置了

animation='{{currentCardIndex==itemIndex?animation:null}}'

currentCardIndex是在js文件中定义的一个记录当前点击的展开合并的元素是哪个,然后itemIndex是wx:for-index定义的名字为itemIndex的变量.当他们两个一样的时候,渲染的时候就会用到animation,不符合这个条件的就不渲染动画.当然也不会改变高度.

4.技术的关键是在scroll-view中,创建js文件中的元素以外,再加了一个card.这个card就是用于计算高度的.要把他的position属性设置为fixed,一定.然后再把他进行变换移动到屏幕外,这样就能保证我们虽然看不到他,但是利用他计算了我们点击展开关闭的那个card的各个css样式信息.所以,这个card也要跟scroll-view正常遍历循环的card的wxml写的样式信息一样,不然算出来的信息不会一样的.


再来说一下做他的目的:

如果你有一个标签卡的集合容器  scroll-view,他是可以滚动的,里面是一些card,你可以理解为你的数据的一行.这个一行默认的时候就展示一些标准的信息.然后你点击展开详情的时候,不想跳转到别的页面,就在这个页面中展开他的详细信息,然后其他的元素跟着往后排.

也就是说类似于 可扩展行.或者你想象一下,微信朋友圈,有的信息就会被折叠,当你点击展开的时候,下面的一条朋友圈的开始位置就自动往下移动,但是你会发现微信朋友圈并没有这个展开和折叠的动画.如何让他的打开方式更美观一点呢?这就是我做这个的目的.

 

再来说一下实现思路和踩的坑.

最开始的思路,我是想通过wxml中,view元素(我定义的card,也就是你可以理解的一行,未来可以扩展显示的一行)中的style设置他的height信息.但是,这不符合css和wxml完全独立的干净利落的规矩.如果到时候你这个card的样式发生了改变,你会在改了css以后还要改一下wxml的这个特殊的style,那么这个项目维护起来就乱套了.

css中,我们通常遇到各个子元素才会设置高度,至于他外层的都不会设置的,都是让子元素自动的撑开父窗口.

如果用这个方式的话,js中要"灵活"的计算这个height的高度,css中要设置一些默认的高度,wxml中还要再设置height为js中产生的数据.虽然这么做,只有js和css中会有高度信息,但是js中如果这种写死的代码用来控制样式信息,显然搞的很乱.

 

坑是:你设置了这个card的高度,animation才会生效,不然,animation使用height的方法,没有动画效果.这个在小程序社区中有很多人反映,那最初你要设置这个card的高度是多少? 100? 120? 什么单位? rpx, px % ? 这些信息应该由card内的子元素决定才对.所以如果你当时写好了height,看起来没问题,animation你要设置到目标高度是多高? 这些都是我遇到的问题,后来总结也是不可取的.要想灵活,多用变量,不要写死太多东西.

而且你设置了wxml里面这个card的高度的话,在你点击展开关闭按钮的时候,通过获取这个card的方法获取他的高度的话,获取到的高度是死的. 本来你100px高度(设置在wxml中),你认为你点击了展开后,他会是300吗? 错了.你获取到的是100px,因为这个你写死了,除非你去掉

              style="overflow: hidden; white-space: normal"

但是如果你去掉了,你点了展开后,当执行完了setdata的话,高度变成300了,这时候你再设置动画已经没有用了.人家都已经从100变成300了,你中间100--->300的动画效果就没地方加了.

 

 

然后又一次,我想到,我就是想要用你展开的高度和合并后的高度,我获取到了以后,就可以动画设置了,但是你不展开我又不知道你有多高,你展开了我又加不了动画,怎么办? 我展开你的时候,我先让你的双胞胎展开,你双胞胎展开了以后,我就知道你应该是多高,

知道你有多高,我再让你慢慢展开.


思路来了.

 

我当前点击的card,我先让他模拟展开一下,当然不是让他自己本身展开,我在scroll-view中,排在所有元素的最后,并且在<已加载全部>这样的字样前面,放置一个card的模板,他里面是没有数据的,当点击要展开的元素的时候,把这个card的模板通过setdata设置数据,

设置完了数据他的高度自然就更新了.这时候通过setdata的回调函数 使用wx.createSelectorQuery创建的query来查找那个card的模板元素,我看他多高,我就让我点击的这个元素多高.

 

所以核心代码就在这里了.

//当用户点击收起或者是展开的按钮的时候onClickShowHidBtn :function (e)

这篇关于小程序制作平滑滚动展开效果,并且不需要写死flex布局的固定高度.提高小程序逼格的动画.类似Ant Design的Collapse折叠面板的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/179419

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

键盘快捷键:提高工作效率与电脑操作的利器

键盘快捷键:提高工作效率与电脑操作的利器 在数字化时代,键盘快捷键成为了提高工作效率和优化电脑操作的重要工具。无论是日常办公、图像编辑、编程开发,还是游戏娱乐,掌握键盘快捷键都能带来极大的便利。本文将详细介绍键盘快捷键的概念、重要性、以及在不同应用场景中的具体应用。 什么是键盘快捷键? 键盘快捷键,也称为热键或快捷键,是指通过按下键盘上的一组键来完成特定命令或操作的方式。这些快捷键通常涉及同