实现异形(拱形)轮播图

项目需要实现如上图所示的轮播图。
实现思路:
1.项目引入使用普通轮播图。
2.根据轮播图个数,动态给可视范围的第一个轮播图和最后一个轮播图添加样式。
代码实现:
经调研,使用slick轮播图(官网地址  https://kenwheeler.github.io/slick/
1.点击下载插件包

将其放到staic文件夹下,在vue项目中,index.html文件中引入js和css。

注意:还需要额外引入jquery。
2.页面使用。
html:

<div id="autoplayClass1">
     <div :class="['slideItemWrapper', 'slideItemWrapper'+index , 'slideItemWrapperCenter']" v-for="(item,index) in lunbo1List"  :key="index"   :title="item.fileName"><img :src="hAction + item.filePath" class="inage  inagex" /></div>
 </div>

lunbo1List为后端返回的图片列表。
js:

 autoPlaySlide(){
 //slideItemWrapperFirst为第一个轮播图的样式,slideItemWrapperLast为最后一个轮播图的样式。
 //slideItemWrapperCenter为默认轮播图样式
      $(".slideItemWrapper0").addClass('slideItemWrapperFirst')
      $(".slideItemWrapper4").addClass('slideItemWrapperLast')
 //轮播设置
       $('#autoplayClass1').slick({
                slidesToShow: 5,    
                slidesToScroll: 1,  //每次轮播个数
                autoplay: true,
                autoplaySpeed: 2000,
      });
 //轮播change时,样式动态添加      
      $('#autoplayClass1').on('beforeChange', function (event, slick, currentSlide, nextSlide) {
                $('.slideItemWrapper' + nextSlide).removeClass('slideItemWrapperCenter')
                $('.slideItemWrapper' + nextSlide).addClass('slideItemWrapperFirst')
                let lastRotate = nextSlide + 4
                if (lastRotate > lunboList.length-1) {
                    lastRotate = lastRotate - lunboList.length
                }
                 $('.slideItemWrapper' + lastRotate).removeClass('slideItemWrapperCenter')
                $(".slideItemWrapper" + lastRotate).addClass('slideItemWrapperLast')


                $(".slideItemWrapper" + currentSlide).removeClass('slideItemWrapperFirst')
                 $('.slideItemWrapper' + currentSlide).addClass('slideItemWrapperCenter')
                let lastRotatel = currentSlide + 4
                if (lastRotatel > lunboList.length-1) {
                    lastRotatel = lastRotatel - lunboList.length
                }
                $(".slideItemWrapper" + lastRotatel).removeClass('slideItemWrapperLast')
                $('.slideItemWrapper' + lastRotatel).addClass('slideItemWrapperCenter')
           
            });
        },

css:实现异性样式

   //最左侧图片形状处理
        .slideItemWrapperFirst {
            position: relative;
            width: 17vw;
            /* 或你需要的宽度 */
            height: 20vh;
            /* 或你需要的高度 */
            display: inline-block;
        }

        .slideItemWrapperFirst::after {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            //   background: white; /* 这是图片背景色,根据实际情况调整 */
            z-index: 1;
        }

        .slideItemWrapperFirst img {
            width: 14.6;
            height: 15.5vh;
            position: relative;
            z-index: 2;
        }

        .slideItemWrapperFirst img {
            clip-path: polygon(0 0, calc(100%) 0, calc(100%) calc(100% - 3.5vh), 0 calc(100%));
            /* 10px 是缺失角的宽度,根据需求调整 */
        }

//最右侧图片形状处理
        .slideItemWrapperLast {
            position: relative;
            width: 17vw;
            height: 20vh;
            display: inline-block;
        }

        .slideItemWrapperLast::after {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            //   background: white; /* 这是图片背景色,根据实际情况调整 */
            z-index: 1;
        }

        .slideItemWrapperLast img {
            width: 14.6;
            height: 15.5vh;
            position: relative;
            z-index: 2;
        }
        //关键代码clip-path::
        .slideItemWrapperLast img {
            clip-path: polygon(0 0, 100% 0, 100% 100%, 0 calc(100% - 3.5vh));
            /* 10px 是缺失角的宽度,根据需求调整 */
        }

如何页面有多个轮播图同时使用,需要销毁的话:
 $('#autoplayClass1').slick('unslick')

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Vue3和Swiper实现异形轮播的示例代码: ```vue <template> <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide" v-for="(item, index) in list" :key="index"> <img :src="item.imgUrl" alt=""> </div> </div> <div class="swiper-pagination"></div> </div> </template> <script> import { Swiper, SwiperSlide } from 'swiper/vue'; import SwiperCore, { EffectCoverflow, Pagination } from 'swiper/core'; import 'swiper/swiper-bundle.css'; SwiperCore.use([EffectCoverflow, Pagination]); export default { name: 'CoverflowSwiper', components: { Swiper, SwiperSlide, }, props: { list: { type: Array, default: () => [], }, }, setup() { const coverflowEffect = { rotate: 0, stretch: -50, depth: 100, modifier: 1, slideShadows: false, }; return { coverflowEffect, }; }, }; </script> <style scoped> .swiper-container { width: 100%; height: 100%; } .swiper-slide { display: flex; justify-content: center; align-items: center; background-color: #f5f5f5; } .swiper-slide img { max-width: 100%; max-height: 100%; } </style> ``` 在上述代码中,我们使用了Swiper插件的EffectCoverflow效果来实现异形轮播。具体来说,我们在Swiper组件中设置了EffectCoverflow效果,并将其作为一个组件来使用。在setup函数中,我们定义了coverflowEffect对象,其中包含了旋转角度、拉伸值、位置深度等参数,用于控制轮播图的效果。最后,我们将coverflowEffect对象返回给模板,以便在Swiper组件中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值