微信开发者

新能力很酷,用着很舒服

良好的交互体验能够满足用户的使用需求,增强用户对小程序的好感度,推动业务提升。交互体验丝滑流畅,让用户用起来舒服的小程序是怎样实现的呢?

Image

通过应用 Skyline 小程序渲染引擎,专注知识分享的 快书小程序 实现贴近原生的交互效果,提升用户浏览体验,获得广大用户的认可。一起来看看快书小程序如何应用酷炫新能力,让用户用着很舒服吧!

scroll-view:长列表滚动很丝滑

以往滚动元素较多容易造成滚动过程卡顿或空白,开发者需要通过虚拟 DOM 优化。现在直接调用 Skyline 的 scroll-view 组件,即可开箱即用地实现只渲染在屏节点的效果,大大提升滚动流畅度。

👉 点击查看代码

// 列表模式<scroll-view type="list" scroll-y>  <view class="item" wx:for="{{dataList}}" wx:key="id"></view></scroll-view>
// 自定义模式<scroll-view type="custom" scroll-y>  <list-view>    <view class="item" wx:for="{{dataList}}" wx:key="id"></view>  <list-view></scroll-view>

除了列表滚动优势,scroll-view 组件还能支持瀑布流布局的流畅显示,对于内容分享应用非常实用。

Image

瀑布流布局快速滚动不白屏

swiper:左右滑动不卡顿

左右滑动契合用户操作习惯,成为不少小程序切换列表、切换页面的常见交互形式。然而在 swiper-item 数量不断增加的情况下,左右滑动容易出现卡顿、渲染缓慢的情况。

现在 Skyline 的 swiper 组件 升级能力,不仅性能提升,同时提供缓存能力,让开发者自定义缓存区域大小,避免左右滑动出现渲染缓慢等情况。

Image

左右滑动卡片很丝滑

自定义路由:切换效果更丰富

以往默认的切换方式仅支持左右切换,用户体验较为单调。现在 Skyline 提供 自定义路由 能力,开发者简单调用即可实现淡入淡出、底部弹出等多种切换效果。

Image

底部弹出方式契合评论区场景

共享元素:切换过程更流畅

丰富的切换效果满足用户不同使用场景的需求,同时切换过程丝滑流畅能够提升用户体验。例如点击卡片的淡入淡出方式没有左右切换的阻滞感,最大限度地提供贴近原生的交互体验。

Image

点击阅读卡片丝滑切换到分享卡片

现在开发者可以结合 共享元素 与自定义路由,实现切换过程的丝滑原生效果。

👉 点击查看代码

// A页面:<share-element key="唯一key">    <image src="imagePath" mode="aspectFill" /></share-element>
// B页面:<share-element key="唯一key">  <image src="imagePath" mode="aspectFill" /></share-element>
// 有几个要注意的地方// 1、两个个页面的share-element组件必须使用相同的key。// 2、key是唯一的,即同一个页面中,不能出现重复的key。// 3、image不要写死宽高,应百分比100%,具体宽高数值写在share-element组件上。

worklet + 手势:体验更丝滑

Skyline 提供的 worklet 动画 功能提升性能表现,实现更好的动画效果。结合 手势操作,元素缩放、旋转等动画效果都可以通过拖拉拽等操作实现,用户体验更佳。

Image

通过手势拖拽,自动回到首页

👉 点击查看代码

// Wxml:// 第一步:绑定样式与参数<view id="#box">content</box>
// Pagethis.scale = shared(1); //这里是定义一个共享变量,即可在UI线程和JS线程间同步的变量。this.applyAnimatedStyle(`#box`, () => {  'worklet'; // 声明这是一个worklet函数  return {    transform: `scale(${this.scale.value})`,  };});// 1、这里使用共享变量是为了让后续改变这个变量时,worklet的函数能捕获到。// 2、#box你要动起来的元素// 3、当this.scale.value变化时,会自动触发函数体的执行,从而改变#box的样式
// 第二步:下拉时,根据下拉的偏移量,改变这个scale的值this.scale.value = (evt.deltaY / 100) * 0.15;// 这里的evt.deltaY是下拉时的位置偏移量,然后根据偏移量按比例计算缩放的值// 如何获取这个下拉偏移量?下一小节讲手势系统时会讲到
// 第三步:松手时,复原scale的值this.scale.value = timing(1, { duration: 300, easing: Easing.ease });// timing函数表示:在300毫秒内,scale.value会逐渐变成1// easing: Easing.ease 表示缓动的方式,具体可参考https://easings.net// 如何知道已经松手了?下一小节讲手势系统时会讲到// 结合手势操作<vertical-drag-gesture-handler worklet:ongesture="handlePan">  <view id="box"></view><vertical-drag-gesture-handler>
// pagehandlePan(evt) {  'worklet' if (evt.state === GestureState.ACTIVE) { // 拖拽时   if (evt.deltaY > 0) {  // 下拉    this.scale.value = Math.max(this.scale.value - (evt.deltaY / 100) * 0.15, 0.85);  } else {  // 上拉    this.scale.value = Math.min(this.scale.value - (evt.deltaY / 100) * 0.15, 1);  } } else if (evt.state === GestureState.END || evt.state === GestureState.CANCELLED) {  // 拖拽结束或取消   this.scale.value = timing(1, { duration: 300, easing: Easing.ease }); }},

snapshot:分享海报更方便

用户使用小程序并分享给其他用户,提升整体运营效率。然而用户使用不同的页面,分享的海报内容也会不同。例如用户在小程序分享不同的书籍内容,开发者应该如何实现呢?

Image

用户分享不同书籍内容的海报

以往开发者会使用 canvas 绘制或者服务端绘制的方式,但是难免遇到排版调试难、宽高限制等问题。现在 Skyline 提供 snapshot 组件,直接将分享内容包裹在组件里面,即可实现快速分享海报的效果。

👉 点击查看代码

// wxml: <snapshot id="target">  <view>content</view></snapshot>
// page:Page({  onReady() {    this.createSelectorQuery()      .select("#target")      .node()      .exec(res => {        const node = res[0].node        node.takeSnapshot({          type: 'arraybuffer',          format: 'png',          success: (res) => {            fs.writeFileSync(savePath,res.data,'binary'); //图片保存至本地            wx.showShareImageMenu({ //唤起分享图片的界面       path:savePath      })          },          fail(res) {}        })  }})

通过 Skyline 小程序渲染引擎,快书小程序 快速实现页面丝滑展示、元素无缝切换、手势灵活拖拽等能力,交互体验更好,赢得更多用户的认可。

如有 Skyline 渲染引擎相关问题,可在 Skyline 社区专区 发帖互动,技术专员将为大家解答及进行深度交流。

原创|快书小程序开发负责人 杨腾

Image