Sky Swiper
微信小程序轮播组件,支持Skyline渲染模式,提供流畅的滑动体验。
特性
- 🚀 基于Skyline渲染引擎,性能优秀
- 📱 支持水平和垂直滑动
- 🎯 可配置弹性回弹效果
- ⚡ 支持动画过渡
- 🔧 丰富的配置选项
重要说明
⚠️ 此组件必须在Skyline渲染模式下使用才能正常工作!
安装
npm install @an1r0ny/sky-swiper
使用方法
1. 启用Skyline渲染模式
在 app.json
中启用Skyline渲染模式:
{
"renderer": "skyline",
"rendererOptions": {
"skyline": {
"disableABTest": true
}
},
"componentFramework": "glass-easel"
}
或者在页面的 page.json
中启用:
{
"renderer": "skyline",
"componentFramework": "glass-easel"
}
2. 安装依赖后构建npm
在微信开发者工具中:
- 点击菜单栏 "工具" → "构建npm"
- 确保构建成功
3. 在page.json中注册组件
{
"usingComponents": {
"sky-swiper": "@an1r0ny/sky-swiper/sky-swiper",
"sky-swiper-slide": "@an1r0ny/sky-swiper/sky-swiper-slide"
}
}
4. 在wxml中使用
<sky-swiper current="{{current}}" bind:change="onChange">
<sky-swiper-slide>
<view class="slide-content">slide 1</view>
</sky-swiper-slide>
<sky-swiper-slide>
<view class="slide-content">slide 2</view>
</sky-swiper-slide>
<sky-swiper-slide>
<view class="slide-content">slide 3</view>
</sky-swiper-slide>
</sky-swiper>
开启循环轮播:
<sky-swiper current="{{current}}" circular="{{true}}" bind:change="onChange">
<sky-swiper-slide>
<view class="slide-content">slide 1</view>
</sky-swiper-slide>
<sky-swiper-slide>
<view class="slide-content">slide 2</view>
</sky-swiper-slide>
<sky-swiper-slide>
<view class="slide-content">slide 3</view>
</sky-swiper-slide>
<sky-swiper-slide>
<view class="slide-content">slide 4</view>
</sky-swiper-slide>
</sky-swiper>
5. 在js中处理事件
Page({
data: {
current: 0
},
onChange(e) {
this.setData({
current: e.detail.current
});
}
});
自定义滑块变换
你可以通过 setSlideTransform
方法设置自定义的滑块变换效果,实现各种炫酷的动画效果。
基本用法
// 获取组件实例
const swiperComponent = this.selectComponent('#my-swiper');
// 设置自定义变换函数
swiperComponent.setSlideTransform((distance, slideSize, pxPerRpx) => {
'worklet';
// distance: 当前滑块与中心位置的距离(可为负数)
// slideSize: 滑块尺寸(水平模式为宽度,垂直模式为高度)
// pxPerRpx: px与rpx的转换比例
const offset = distance * slideSize;
const scale = 1 - Math.abs(distance) * 0.2; // 缩放效果
const opacity = 1 - Math.abs(distance) * 0.3; // 透明度效果
return {
transform: `translateX(${offset}px) scale(${scale})`,
opacity: Math.max(0.1, opacity),
transformOrigin: 'center'
};
});
// 清除自定义变换,恢复默认效果
swiperComponent.clearSlideTransform();
变换函数参数说明
distance: 当前滑块相对于中心位置的距离
0
: 当前显示的滑块1
: 右侧/下方第一个滑块-1
: 左侧/上方第一个滑块- 支持小数,表示滑动过程中的中间状态
slideSize: 滑块的尺寸(px)
- 水平模式:滑块宽度
- 垂直模式:滑块高度
pxPerRpx: px与rpx的转换比例
- 可用于将rpx单位转换为px:
rpxValue / pxPerRpx
- 可用于将rpx单位转换为px:
示例效果
卡片堆叠效果:
swiperComponent.setSlideTransform((distance, slideSize, pxPerRpx) => {
'worklet';
const offset = distance * slideSize;
const scale = 1 - Math.abs(distance) * 0.1;
const zIndex = 100 - Math.abs(distance);
return {
transform: `translateX(${offset}px) scale(${scale})`,
zIndex: zIndex,
transformOrigin: 'center'
};
});
3D旋转效果:
swiperComponent.setSlideTransform((distance, slideSize, pxPerRpx) => {
'worklet';
const offset = distance * slideSize;
const rotateY = distance * 45; // 旋转角度
return {
transform: `translateX(${offset}px) rotateY(${rotateY}deg)`,
transformOrigin: 'center',
transformStyle: 'preserve-3d'
};
});
淡入淡出效果:
swiperComponent.setSlideTransform((distance, slideSize, pxPerRpx) => {
'worklet';
const offset = distance * slideSize;
const opacity = Math.max(0, 1 - Math.abs(distance));
return {
transform: `translateX(${offset}px)`,
opacity: opacity
};
});
API
SkySwiper 属性
属性 | 类型 | 默认值 | 说明 |
---|---|---|---|
current | Number | 0 | 当前显示的滑块索引 |
bounce | Boolean | true | 是否开启回弹效果 |
vertical | Boolean | false | 是否为垂直滑动 |
withAnimation | Boolean | false | 切换时是否使用动画 |
cacheExtent | Number | 4 | 缓存范围 |
damping | Number | 20 | 阻尼系数 |
mass | Number | 2 | 质量 |
restDisplacementThreshold | Number | 0.01 | 静止位移阈值 |
restSpeedThreshold | Number | 2 | 静止速度阈值 |
disabled | Boolean | false | 是否禁用滑动 |
circular | Boolean | false | 是否开启循环轮播 |
minCircularSlides | Number | 4 | 启用循环轮播的最少滑块数量 |
SkySwiper 方法
方法名 | 参数 | 说明 |
---|---|---|
setSlideTransform | transformFunction | 设置自定义滑块变换函数 |
clearSlideTransform | - | 清除自定义滑块变换函数 |
SkySwiper 事件
事件名 | 说明 | 返回值 |
---|---|---|
change | 滑块切换时触发 | { current: Number } |
transitionend | 动画结束时触发 | { current: Number } |
故障排除
如果手势滑动不生效,请检查:
- ✅ 是否启用了Skyline渲染模式
- ✅ 是否正确构建了npm包
- ✅ 小程序基础库版本是否支持Skyline
开发
`
bash
安装依赖
npm install
构建
npm run build
清理构建
npm run clean
`
## 许可证
MIT