在小组件半屏场景下,当组件自身的手势(如滑动、拖拽、缩放)与半屏容器的手势(如整体拖动、收起、展开)叠加时,容易出现冲突。本文档介绍如何实现组件手势与容器手势的协调,提供流畅的交互体验。
<scroll-view scroll-y="{{true}}">
<view xhs:for="{{list}}" xhs:key="index">
{{item}}
</view>
</scroll-view>
在小组件场景下,系统会自动实现滚动与容器手势的平滑衔接:
<swiper
indicator-dots="{{true}}"
autoplay="{{true}}"
interval="{{3000}}">
<swiper-item xhs:for="{{bannerList}}" xhs:key="index">
<image src="{{item.url}}" mode="aspectFill"></image>
</swiper-item>
</swiper>
系统会自动识别轮播区域,在轮播区域内优先响应轮播手势,避免与容器手势冲突。
<picker-view
value="{{pickerValue}}"
bindchange="onPickerChange">
<picker-view-column>
<view xhs:for="{{years}}" xhs:key="index">{{item}}</view>
</picker-view-column>
<picker-view-column>
<view xhs:for="{{months}}" xhs:key="index">{{item}}</view>
</picker-view-column>
</picker-view>
系统会自动识别选择器区域,在选择器区域内优先响应滚轮滑动,避免误触发容器手势。
<movable-area>
<movable-view
x="{{x}}"
y="{{y}}"
direction="all"
bindchange="onMovableChange">
<view class="movable-content">可拖拽元素</view>
</movable-view>
</movable-area>
系统会自动识别可移动区域,在区域内优先响应拖拽手势,避免与容器手势冲突。
<canvas type="2d" canvas-id="myCanvas" bindtouchstart="onCanvasTouchStart" bindtouchmove="onCanvasTouchMove" bindtouchend="onCanvasTouchEnd"> </canvas>
系统会自动识别画布区域,在画布区域内优先响应触摸事件,确保绘图和交互的流畅性。
<map
longitude="{{longitude}}"
latitude="{{latitude}}"
scale="{{scale}}"
markers="{{markers}}"
bindtap="onMapTap">
</map>
系统会自动识别地图区域,在地图区域内优先响应地图手势(缩放、拖拽、旋转),避免误触发容器手势。
<xhs-touch-interceptor-container-view class="interceptor-area">
<!-- 需要优先消费手势的内容 -->
<view class="custom-gesture-handler">
<!-- 自定义手势处理逻辑 -->
</view>
</xhs-touch-interceptor-container-view>
组件库通过感知组件的位置和滚动状态,在合适的时机协调手势分发:
以下组件在小组件场景下会自动支持手势协调,无需额外配置:
在小组件场景下,
当存在嵌套滚动时,系统会自动识别每个滚动区域,在各自区域内优先响应相应组件的手势:
使用
通过手势协调机制,我们可以实现组件手势与容器手势的智能协调,提供流畅的交互体验。
遵循本文档的最佳实践,可以轻松实现流畅的半屏交互体验。