半屏拖拽,实现超快!
现在不少小程序在点餐、购物、支付等环节应用半屏页面,替代原有的左右切换交互。这种方式不仅减弱页面切换带来的流程割裂感,而且减弱页面加载造成用户等待时间长的体验感。
然而通过点按操作来开关半屏,用户体验不够流畅,能否借助手势操作灵活控制半屏页面,甚至调整新页面的显示范围?
Skyline 渲染引擎全新推出 draggable-sheet 组件,自带拖拽交互。无论是半屏一次拖拽,还是分段多次拖拽,开发者无需复杂代码,简单配置即可快速应用。一起来看看如何应用吧!
更简单的接入过程
不同于以往编写大量的手势协商代码,现在应用一个 draggable-sheet 组件快速实现半屏拖拽功能,代码量大大减少。
在 wxml 页面中,开发者仅需配置组件即可应用。
引入 draggable-sheet 组件并配置容器大小等组件参数
在 draggable-sheet 组件内嵌套 scroll-view 组件,声明 associative-container="draggable-sheet",将 2 个组件进行关联
👉 点击查看代码
<!-- page.wxml --><draggable-sheetclass="sheet"initial-child-size="0.5"min-child-size="0.2"max-child-size="0.8"snap="{{true}}"snap-sizes="{{[0.4, 0.6]}}"><scroll-viewscroll-y="{{true}}"type="list"associative-container="draggable-sheet"bounces="{{true}}"><!-- 这里放置半屏内容 --></scroll-view></draggable-sheet>
在 js 页面中,开发者应用 DraggableSheetContext 接口,实现更丰富、更灵活的滚动控制效果。
使用 createSelectorQuery 方法获取 draggable-sheet 组件的节点
通过 node 方法获取 DraggableSheetContext 实例,调用 DraggableSheetContext.scrollTo 即可将 draggable-sheet 组件滚动到指定位置
👉 点击查看代码
// page.jsPage({onReady() {this.createSelectorQuery().select('.sheet').node().exec(res => {// 使用 sheetContext 控制 draggable-sheet 组件的滚动const sheetContext = res[0].nodesheetContext.scrollTo({size: 0.7,animated: true,duration: 300,easingFunction: 'ease'})});},});
更丰富的交互效果
除了基础的页面拖拽操作,draggable-sheet 组件支持更多组件融合,实现更贴近原生、更丰富的交互效果。
例如开发者可以结合 draggable-sheet 组件与worklet 动画,实现手势拖动半屏至全屏,完美融合到顶部搜索框。整个交互仅需手势操作即可丝滑融合,体验更流畅,设计效果更美观。
实现上述效果并不复杂,仅需 2 个步骤即可:
给 draggable-sheet 组件配置监听函数 worklet:onsizeupdate="onSizeUpdate"
在 onSizeUpdate 发生变化时,通过 worklet 函数改变共享变量值
👉 点击查看代码
<!-- page.wxml --><view class="search-wrp">...</view><draggable-sheetclass="sheet"...worklet:onsizeupdate="onSizeUpdate">Page({// 监听 draggable-sheet 尺寸变化去改变 progressonSizeUpdate(e) {'worklet'const distance = sheetHeight - e.pixelsthis.progress.value = distance >= 20 ? 1 : distance / 20},onLoad(options) {const progress = wx.worklet.shared(1)// 绑定 worklet 动画,progress 变化时改变搜索的背景来显示/隐藏 mapthis.applyAnimatedStyle('.search-wrp', () => {'worklet'const t = progress.valuereturn {backgroundColor: `rgb(245, 242, 241, ${1 - t})`}})...this.progress = progress},})
相比点按操作,拖拉拽的手势操作更符合使用习惯。应用在半屏 / 分段式的页面设计让用户体验更丝滑,对业务流程更有帮助。现在直接使用 draggable-sheet 组件 实现开箱即用,页面拖拽更好用。
现在点击 代码片段 (请使用 PC 端浏览器打开),快速应用到你的小程序项目吧!如果你还想实现更多手势交互,欢迎在下方评论区分享。官方团队将优先上线或分享能力的最佳实践,更好地满足你的开发需求。
同时 Donut 多端框架 也支持接入 Skyline 渲染引擎,多端应用同步实现更流畅的交互效果,欢迎各位开发者接入!