uni-app 通过 swiper 实现卡片滑动背景同步切换效果

本文介绍了如何在uni-app中利用swiper组件创建一个类似飞猪或携程的卡片滑动时背景同步切换的效果。代码示例展示了如何设置样式和事件监听,以及在js中处理滑动切换时的逻辑。关键点包括动态设置滑动间距、卡片背景图的渐变效果以及卡片的缩放动画。
摘要由CSDN通过智能技术生成

我们在开发旅游专题前端时,经常会遇到需要实现飞猪或携程里面的卡片滑动背景同步切换效果。uni-app 通过 swiper 组件也可以实现类似效果

<view class="swiper-box">
    <image class="swiper-bg" :src="cardList[selectedCardIndex]" mode="aspectFill"></image>
    <swiper class="swiper"
        :previous-margin="cardList.length === 1 ? '20%' : selectedCardIndex === 0 ? '10%' : selectedCardIndex === cardList.length -1 ? '30%' : '20%'"
        :next-margin="cardList.length === 1 ? '20%' : selectedCardIndex === cardList.length -1 ? '10%' : selectedCardIndex === 0 ? '30%' : '20%'"
        @change="swiperChange">
        <swiper-item v-for="(swiperItem,swiperIndex) in cardList" :key="swiperIndex" style="position: relative;">
            <image :src='swiperItem' :class="{'swiper-active':selectedCardIndex == swiperIndex}"></image>
        </swiper-item>
    </swiper> 
</view>

 css样式:

page {
    background-color: #FAFAFA;
}
.swiper-box {
    .swiper-bg {
        width: 100%;
        position: absolute;
        height: 500rpx;
        &::after { // 背景图从上往下渐变效果,慢慢渐变到网页背景色
            content: '';
            position: absolute;
            z-index: 1;
            top: 0;
            bottom: 0;
            left: 0;
            right: 0;
            background-image: linear-gradient(to bottom ,transparent, #FAFAFA);
        }
    }
    .swiper {
        padding-top: 64rpx;
        height: 728rpx; // 考虑到卡片对应图片大小以及手机分辨率不同,大家可以根据实际情况设置
        image {
            width: 100%;
            height: 100%;
            transform: scale(0.78); // 通过缩放实现待选卡片缩小效果
            transition: transform 0.3s ease-in-out 0s;
            border-radius: 26rpx;
            box-shadow: 0px 2rpx 12rpx rgba(0, 0, 0, 0.1);
            &.swiper-active {
                transform: scale(1);
            }
        }
    }
}

 js:

export default {
    data() {
        return {
            selectedCardIndex: 0,
            cardList: [
                "/static/images/lervor/travel/1.jpg",
                "/static/images/lervor/travel/2.jpg"
            ]
        }
    },
    methods: {
        swiperChange(e) {
            this.selectedCardIndex = e.detail.current
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑆箫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值