美文网首页
小程序swiper结合swiper-item实现banner轮播

小程序swiper结合swiper-item实现banner轮播

作者: Sarah_Y | 来源:发表于2023-08-03 14:48 被阅读0次

    swiper

    基础库 1.0.0 开始支持,低版本需做兼容处理

    微信 Windows 版:支持

    微信 Mac 版:支持

    渲染框架支持情况:Skyline (使用最新 Nighly 工具调试)、WebView

    功能描述

    滑块视图容器。其中只可放置swiper-item组件,否则会导致未定义的行为。

    通用属性

    属性 类型 默认值 必填 说明 最低版本
    indicator-dots boolean false 是否显示面板指示点 1.0.0
    indicator-color color rgba(0, 0, 0, .3) 指示点颜色 1.1.0
    indicator-active-color color #000000 当前选中的指示点颜色 1.1.0
    autoplay boolean false 是否自动切换 1.0.0
    current number 0 当前所在滑块的 index 1.0.0
    interval number 5000 自动切换时间间隔 1.0.0
    duration number 500 滑动动画时长 1.0.0
    circular boolean false 是否采用衔接滑动 1.0.0
    vertical boolean false 滑动方向是否为纵向 1.0.0
    display-multiple-items number 1 同时显示的滑块数量 1.9.0
    easing-function string "default" 指定 swiper 切换缓动动画类型 2.6.5
    bindchange eventhandle current 改变时会触发 change 事件,event.detail = {current, source} 1.0.0
    bindtransition eventhandle swiper-item 的位置发生改变时会触发 transition 事件,event.detail = {dx: dx, dy: dy}。Skyline 仅支持非 worklet 的组件方法作为回调。 2.4.3
    bindanimationfinish eventhandle 动画结束时会触发 animationfinish 事件,event.detail 同上。Skyline 仅支持非 worklet 的组件方法作为回调。 1.9.0

    Skyline 特有属性

    属性 类型 默认值 必填 说明 最低版本
    scroll-with-animation boolean true 改变 current 时使用动画过渡 2.29.0
    cache-extent number 0 缓存区域大小,值为 1 表示提前渲染上下各一屏区域(swiper 容器大小) 2.29.0
    worklet:onscrollstart worklet 滑动开始时触发,仅支持 worklet 作为回调。event.detail = {dx: dx, dy: dy}
    worklet:onscrollupdate worklet 滑动位置更新时触发,仅支持 worklet 作为回调。event.detail = {dx: dx, dy: dy}
    worklet:onscrollend worklet 滑动结束时触发,仅支持 worklet 作为回调。event.detail = {dx: dx, dy: dy}

    WebView 特有属性

    属性 类型 默认值 必填 说明 最低版本
    previous-margin string "0px" 前边距,可用于露出前一项的一小部分,接受 px 和 rpx 值 1.9.0
    next-margin string "0px" 后边距,可用于露出后一项的一小部分,接受 px 和 rpx 值 1.9.0
    snap-to-edge boolean false 当 swiper-item 的个数大于等于 2,关闭 circular 并且开启 previous-margin 或 next-margin 的时候,可以指定这个边距是否应用到第一个、最后一个元素 2.12.1

    change事件 source 返回值

    1.4.0 开始,change事件增加 source字段,表示导致变更的原因,可能值如下:

    1. autoplay 自动播放导致swiper变化;
    2. touch 用户划动引起swiper变化;
    3. 其它原因将用空字符串表示。

    Bug & Tip

    1. tip: 如果在 bindchange 的事件回调函数中使用 setData 改变 current 值,则有可能导致 setData 被不停地调用,因而通常情况下请在改变 current 值前检测 source 字段来判断是否是由于用户触摸引起。
    2. tip: 在 mac 小程序上,若当前组件所在的页面或全局开启了 enablePassiveEvent 配置项,该内置组件可能会出现非预期表现(详情参考 enablePassiveEvent 文档

    示例代码

    <view class="banner" wx:if="{{bannerItems.length>0}}">
                        <swiper autoplay="true" interval="3000" duration="500" circular="true">
                            <swiper-item wx:for-items="{{bannerItems}}" data-index="{{index}}" wx:key="bannerId">
                                <view class="banner-card" catchtap='bannerClick' id="{{index}}">
                                    <image bindtap='statistics' class='banner-img' id="{{index}}" src="{{item.imgURL}}"></image>
                                    <view class="ad-icon">广告</view>
                                </view>
                            </swiper-item>
                        </swiper>
                    </view>
    

    PS:swiper-item标签内可以根据自己需求,自定义view元素的数据显示等。

    banner点击监听

    // banner跳转
    bannerClick(e) {
        let _self = this;
        // 根据swiper-item中的data-index="{{index}}",取出banner索引
        let index = e.currentTarget.id;
        // 拿到索引,获取banner数据进行跳转等操作
        ...
    },
    

    相关文章

      网友评论

          本文标题:小程序swiper结合swiper-item实现banner轮播

          本文链接:https://www.haomeiwen.com/subject/fuumpdtx.html