当前位置: 首页 > 乐活 > 内容页

卡片转场,优雅流畅

2023-05-11 00:05:31 来源:微信开发者

随着小程序生态的蓬勃发展,小程序承载更多的功能,意味着更多的信息展示需求。其中卡片式设计便于对不同信息内容进行有序整理,非常适合电商交易、攻略分享等涉及多信息的场景。

当用户点击卡片时,默认的左右转场方式容易产生视觉失焦,切换感比较明显。相对而言,通过自定义路由与共享元素结合的卡片转场方式让用户的视觉关联性更强,原生效果更好。


(资料图片仅供参考)

实现上述丝滑流畅的卡片转场效果主要涉及到 3 个过程:

原卡片:照片按比例放大、文字渐隐

新页面:页面按比例放大、页面渐显

手势操作返回

为便于发现具体转场效果,上述展示为慢速展示

原卡片转场过程

首先,开发者可以通过实现原卡片的瀑布流方式,搭建页面框架。

点击查看代码

// list.wxml     

然后,开发者可以使用 实现原生般丝滑的转场效果。与 的转场方式类似,开发者只需要将 grid-view 定义为卡片 card。

点击查看代码

// card.wxml    ...  

虽然原卡片与新页面图片元素一致,但是它们的文字内容不同。为了实现更丝滑的转场效果,原卡片在飞跃过程需要进行内容渐隐。开发者先用 this.applyAnimatedStyle 绑定 worklet 驱动动画到对应的 2 个节点,实现对应的效果:

.card__wrap 图片节点:照片按比例放大

.card_desc 文本节点:内容描述渐隐

点击查看代码

  ...// worklet 驱动动画:整个卡片按比例放大// this.applyAnimatedStyle 绑定 .card_wrap 节点this.applyAnimatedStyle(".card_wrap‘, () => {"worklet‘return {width: this.srcWidth.value,transform: `scale(${this.scale.value})`}},// 动画执行时机配置项{// 是否立即执行驱动动画,这里设置 false 不立即执行// 默认卡片 100% 宽度,不需要再改变,card 多个立即执行会执行很多次immediate: false, // sharedValue 更新时执行时机,sync:当前时间片,async:下一时间片// 当前场景下需要保证共享元素与自定义路由宽度实时贴合,避免出现错位flush: ‘sync’})// worklet 驱动动画:内容描述渐隐// this.applyAnimatedStyle 绑定 .card_desc 节点return {opacity: this.opacity.value}

同时,开发者需要通过配置项修改动画执行的时机:

immediate:设置是否立即执行驱动动画

flush:shareValue 更新时,设置 applyAnimatedStyle 的 updater 函数刷新时机

例如在当前示例中,为了保证原卡片与新页面的照片位置重叠,flush 设置 sync 在当前时间片刷新。

最后,为了避免飞跃过程造成的第一帧或者最后一帧跳变,开发者需要给共享元素绑定帧回调事件。

点击查看代码

handleFrame(data) { "worklet’// 飞跃过程中,改变共享元素的值来驱动动画this.srcWidth.value = `${data.begin.width}px` this.scale.value = data.current.width / data.begin.widththis.opacity.value = 1 - data.progress}

新页面转场过程

在转场过程中,新页面可以通过 实现按比例放大、文字渐显的效果。

开发者只需要通过共享元素的帧回调获取 begin 、end 值,然后结合转场进度 t 计算新页面的位置、缩放比例,即可实现新页面的丝滑转场效果。

点击查看代码

// 自定义路由页面进入动画const handlePrimaryAnimation = () => {"worklet’let t = primaryAnimation.valueconst shareEleX = lerp(begin.left, end.left, t)const shareEleY = lerp(begin.top, end.top, t)const shareEleW = lerp(begin.width, end.width, t)// 根据当前、开始、结束位置值,计算出动画过程中的值 transX = shareEleXscale = shareEleW / end.widthtransY = shareEleY - end.top * scalereturn {transform: `translate(${transX}px, ${transY}px) scale(${scale})`,transformOrigin: "0 0‘,opacity: PrimaryAnimation.value,}}

手势返回操作

当用户完成内容浏览后,使用手势灵活拖拉即可返回瀑布流界面,交互体验更好。

首先,开发者需要在新页面的最外层嵌套手势组件。当手势位置变动时,新页面(通过 #fake-host 控制)的位置和大小也跟随手势灵活拖动。

点击查看代码

// detail.wxml...

随后,开发者绑定页面驱动动画,通过 applyAnimatedStyle 给 #fake-host 绑定驱动动画。当共享变量 transX、transY 等变化时,自动改变 transform 来驱动 #fake-host 缩小。

点击查看代码

// 绑定页面驱动动画 #fake-host 为最外层节点this.applyAnimatedStyle("#fake-host", () => {"worklet‘// pan 手势释放后,触发返回动画...// pan 手势移动阶段const transX = this.transX.valueconst transY = this.transY.value// 根据横坐标位移比例缩放const scale = clamp(1 - transX / screenWidth * 0.5, 0, 1)return {transform: `translateX(${transX}px) translateY(${transY}px) scale(${scale})`,transformOrigin: "50% 50%‘}})

紧接着开发者需要绑定手势事件,根据手势拖动时拿到位置信息改变共享变量 transX、transY 的值。

点击查看代码

// 绑定手势事件handlePanGesture(e) {"worklet’// 手势开始...// 往右滑时if (e.state === GestureState.ACTIVE) {const transX = e.absoluteX - this.startX.valuethis.transX.value = clamp(transX, transLowerBound, transUpperBound)this.transY.value = e.absoluteY - this.startY.value}// 手势结束、取消...}

最后,开发者需要设置透明的背景颜色,避免页面切换过程的白屏。由于 涉及 3 层页面,所以每一层的背景色均需要设置成透明,否则将无法实现透明效果。

点击查看代码

// detail.wxss 设置 page 背景色page {background-color: transparent; // 透明}// detail.json 设置 页面容器 背景色{“backgroundColorContent”: “#00000000” // 透明}// route.js 自定义路由容器背景色const ScaleTransitionRouteBuilder = (routeContext) => {return {opaque: false, // 下一个页面推入时,显示前一个页面barrierColor: “rgba(0, 0, 0, 0.3)”, // 黑色半透明...}}

通过 、、、的巧妙配合,开发者即可实现完整卡片转场所需的新旧内容无缝切换效果。

持续支持开发者的渲染需求,实现在多个终端稳定、贴近原生的交互体验,赋能业务发展。欢迎各位开发者关注 了解更多动态或者访问 发现更多最佳实践。

最后,小程序渲染框架征文活动火热进行中!即日起至 6 月 1 日,开发者前往 分享标题含「小程序渲染框架」的文章内容,精选文章作者将获得微信周边礼品一套!我们一起创造更好的小程序开发生态吧!

一套礼品包括:1 个气泡狗零钱包、1 个红包背包、1 个红包吸管杯。获奖名单将会在精选文章下方评论区公布。

标签:

潮流

更多

猜你喜欢

更多
本川智能:5月9日公司高管江东城减持公司股份合计1.47万股 看热讯:太龙股份:5月9日公司高管苏芳减持公司股份合计31.18万股 琴努里_关于琴努里介绍|天天百事通 世界球精选!亦师亦友!老大哥费莱尼鼓励陈蒲:海纳百川,从善如流 2023年宁波曾轶可演唱会时间是多久(曾轶可个人演唱会) 天天观点:全新外观设计 新款别克君威申报信息曝光 环球实时:贝克汉姆力挺索尔斯克亚称后者不会畏惧批评。 天天热门:大盘全天震荡分化,新能源汽车概念股掀涨停潮 博物馆之城建设高端国际论坛——北京文博发展智库2023国际研讨活动-天天信息 泉州城市信用监测排名进入全国前十 《安娜的爱人》结局是什么?《安娜的爱人》讲的什么? 你的老怀表还在转吗什么歌?教堂的白鸽不会亲吻乌鸦是什么歌? 《魔女宝鉴》大结局是什么?《魔女宝鉴》红珠为什么变坏? 全球通讯!北京拟规定:不得在地下二层及以下开展青少年体育培训 《漫长的季节》讲的什么?《漫长的季节》王阳怎么了? 《锦心似玉》秦姨娘的真实身份是什么?《锦心似玉》琥珀是好人还是坏人? 天天关注:关停近一成营业部又面临股东减持,红塔证券业绩剧烈波动难题何解?| 券商 我能走九十九步去爱你是什么歌?清风白昼翻过了九州是什么歌? 《夏目友人帐》是动漫吗?《夏目友人帐》猫咪老师和夏目什么关系? 《感动她77次》结局在一起了吗?《原谅他77次》讲的是什么? 《天目危机》讲的是什么故事?《天目危机》的结局是什么? 《机智的上半场》夏朗朗官配是谁?《机智的上半场》讲的什么故事? 视焦点讯!智绘天津 | 更智慧、更节能!来看看天津的零能耗小屋 《萌探探探案》第二季有哪些嘉宾?《萌探探探案》张若昀哪一期? “如果云层是天空的一封信”是哪首歌?《解药》原唱是谁? 《你迟到的许多年》莫莉结局是怎样的?《你迟到的许多年》结局是什么? 《逢君正当时》小说龙大结局是什么?《逢君正当时》多少集? 《萌探探探案》是什么节目?《萌探探探案》家有儿女哪一期? 《聊斋之花姑子》结局是什么?《聊斋奇女子之辛十四娘》大结局是什么? 【全球播资讯】VR全景直播+H5!天舟六号物资收集还差一份你的助力! 《且听凤鸣》原著是什么?《且听凤鸣》凤舞真实身份是什么? 《你好神枪手》原著小说是什么?《你好神枪手》男主为什么失忆? 《少年派2》邓小琪的结局是什么?《少年派》林大为为什么进监狱? 《半个喜剧》莫默和谁在一起了?《半个喜剧》讲的什么故事? 《不会恋爱的我们》钱晶晶结局怎么样?《不会恋爱的我们》讲了什么? 《再婚进行时》沈心结局是什么?《再婚进行时》讲的什么内容? 环球快看点丨石英股份:目前公司矿源充足 不存在原材料短缺和成本大幅上涨的情况 《亲爱的生命》讲的什么?《亲爱的生命》李骏骁结局是什么? 《她们的名字》一共多少集?《她们的名字》雷粒和谁在一起了? 《漂亮的李慧珍》里的林一木是什么身份?《漂亮的李慧珍》里夏乔的扮演者是谁? 《流光之城》冯世真身世是什么?《流光之城》冯世真弟弟是谁? 《我知道你的秘密》主要讲了什么?《我知道你的秘密》结局怎么样? 《流浪猫鲍勃》讲的什么?《流浪猫鲍勃2》结局好吗? 为什么这届年轻人基本不走亲戚了?具体详细内容是什么 穆婷婷在《步步惊心》里饰演的角色是谁?穆婷婷演过什么电视剧? 《无名之辈》每个人的结局是什么?《无名之辈》讲述了一个什么故事? 《回来的女儿》程威结局是什么?《回来的女儿》戴猴子面具的人是谁? 《棋魂》原著时光跟谁在一起了?《棋魂》褚嬴为什么会消失? 环球通讯!终结的炽天使第二季出了吗 终结的炽天使第二季为什么和第一季一样 孤身冒险 毕业季,那时我们一无所有 又怀抱所有的长河日落——校园诗人陈诚 因员工行为管理不到位、违规返利吸存 浙江磐安农商行被罚120万元 爱奇艺CEO龚宇谈AI 称影视行业最后才会被AI取代_信息 学为贵成立11周年1100个A-Level智能组卷特权免费送|每日速读 A股小幅低开,教育、传媒股开盘拉升,中字头、大金融板块跌幅靠前 天天观焦点 天天视点!刷屏期货圈!文华财经两次冲击A股IPO无果后,金证股份拟收购其90.97%股权 谷歌将用新的AI功能增强搜索引擎 相关股_环球实时 环球实时:《龙腾世纪4》不会在2024年4月之前发售 玩家还需等待 统联精密:5月9日融资买入103.03万元,融资融券余额7793.02万元_世界简讯 《银河护卫队2》讲的什么内容?《银河护卫队》是科幻片吗? 2023年最美职工请回答丨温伟:我从年轻的时候就是个上进青年 全球快看 又红又专是褒义还是贬义_又红又专是什么意思 mac我的世界怎么加mod 我的世界怎么加mod 胡一天事件胡一天回应_胡一天事件 “出海”需求倒逼国内创新药企加快源头创新 【天天速看料】向日葵花语是什么_向日葵的花语 2022年平均工资出炉:IT业最高,金融业第二,房地产业下降 当前速读:立方风控鸟·晚报(5月9日) 今日看点:金证股份拟收购文华财经90.97%股权!公告速递→ 东芯股份(688110):召开2022年度暨2023年第一季度业绩说明会 环球资讯 天天热门:心动51特惠最后两天 《部落与弯刀》仅需19.2元 九星连珠是哪九星_什么是九星连珠 天天热消息 大补血,两房企拟发债融资!4月房企融资总量同环比回落-焦点速递 鸡汤火锅怎么做好吃? 108国道全程线路图高清 108国道地图 世界热议 全红婵世界杯夺双冠后,曝周继红做正式决定,陈芋汐心服口服 可跨校兼职、教育教学成果互认!云南支持高校开展教师互聘 天天微资讯 狼蛛键盘灯开关是哪个键_狼蛛键盘灯怎么开关 爱之深责之切什么意思还有别的说法吗_爱之深责之切什么意思-世界即时 全球观速讯丨AI助力全民健身 华为运动健康推动科学运动大众化 14年抗战起止时间_环球即时看 当前观点:十巫高速南段最新消息_十巫 吕秀莲轰蔡把台湾带到战争边缘 内忧外患 环球今亮点!东安大庙口镇:开展“马路市场”交通安全专项整治 【时快讯】ETF观察丨国新文化三连板,教育ETF(513360)成交活跃 机构:教育领域有望成为AI重要落地场景 《烈火军校》曲曼婷最后和谁在一起了?《烈火军校》主要讲了什么? 给制氢产业留一片蓝天 《锦绣未央》李未央的原型是谁?《锦绣未央》人物结局是什么? 《都挺好》苏明成最后复婚了吗?《都挺好》苏明成为什么要打苏明玉? 《心灵法医》凶手到底是谁?《心灵法医》讲的什么? 《月上重火》宇文穆远真实身世是什么?《月上重火》是什么小说改编? 要闻速递:智能汽车驶入大模型时代,新一轮产业巨变即将发生 《唐砖》结局是什么?《唐砖》是穿越剧吗? 《漂亮书生》讲述了什么故事?《漂亮书生》的原著小说叫什么? 《从前有座灵剑山》海云帆是好人吗?《从前有座灵剑山》结局是什么? 《我只喜欢你》小说原著叫什么?《我只喜欢你》赵观潮和谁在一起了? 全球要闻:餐饮消费“再添一把火” 中国经济“再上新台阶” 《外星女生柴小七》讲的什么?《外星女生柴小七》结局怎么样? 《以吾之名》的结局是什么?《以吾之名》女主和谁在一起了? 《龙门飞甲》的结局是什么?《龙门飞甲》讲的是什么?

时尚

  1. 中国星空网简介

    中国星空网简介

  2. 王鹤棣的品牌是什么?白敬亭衣服品牌叫什么?

    王鹤棣的品牌是什么?白敬亭衣服品牌叫什么?

  3. 全球播报:iglidur H5系列轴承,满足汽车应用的更高需求

    全球播报:iglidur H5系列轴承,满足汽车应用的更高需求

  4. 当前动态:吸引ABB、发那科等多个全球领军企业,上海的机器人产业是如何迈向腾飞的?

    当前动态:吸引ABB、发那科等多个全球领军企业,上海的机器人产业是如何迈向腾飞的?

  5. 环球资讯:工业机器人拉动需求 国产减速机空间打开产销放量

    环球资讯:工业机器人拉动需求 国产减速机空间打开产销放量

  6. 全球讯息:2座换流平台+2座换流站,西门子拿下超大订单!

    全球讯息:2座换流平台+2座换流站,西门子拿下超大订单!

  7. 世界速递!必看!工业机器人领域的最新动向

    世界速递!必看!工业机器人领域的最新动向

  8. 世界微速讯:新5G规范有助于支持要求苛刻的应用

    世界微速讯:新5G规范有助于支持要求苛刻的应用

  9. 全球速读:风机抢装几时休

    全球速读:风机抢装几时休

  10. 世界播报:中国齿轮行业市场现状分析及行业未来发展趋势预测2022

    世界播报:中国齿轮行业市场现状分析及行业未来发展趋势预测2022