vue项目中swiper轮播active图片实现居中并放大

 更新时间:2023年05月18日 14:45:51   作者:叶子_o  
这篇文章主要介绍了vue项目中swiper轮播active图片实现居中并放大方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

swiper轮播active图片实现居中并放大

项目中用的是vue-awesome-swiper,vue-awesome-swiper是基于swiper 4.0的。所以参数参考swiper 4.0。

使用场景如下

要求左右切换时每次只移动一个图片,中间的图片始终放大,其他图片有不透明度。

解决思路

官方文档中,active slide默认是居左的,通过把centeredSlides设置为true可以使其居中,但是左边会空着。

解决思路就是,在第一张时候手动去设置位移的距离。

代码如下

template部分:

<div class="swiper-father swiper-hot">
   <swiper :options="swiperOption" ref="mySwiper" v-if="homeData[5]">
        <swiper-slide  
           v-for='(item,index) in homeData[5]'
           :key="index"> 
           <img @click="goInto(item.id)" :src="item.imgUrl">
       </swiper-slide>                              
   </swiper>
   <div class="swiper-button-prev btn-swiper swiper-button"  slot="button-prev"></div>
   <div class="swiper-button-next btn-swiper swiper-button" slot="button-next"></div>
</div>          

data部分:

data() {
	swiperOption: {
    slidesPerView: 3, // 显示数量
    centeredSlides:true,   // 重点:让active slide居中
    loop : true, //循环轮播    
    navigation: { // 左右按钮
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev'
    },
    on:{
        init(){
            this.setTranslate(0);
        },
        transitionStart(){ // 开始translate之前触发
            // 如果是第一张
            if(this.activeIndex == 0){
                this.setTranslate(0); // 因为左边会空出一张图的距离,所以设置位移为0
            }
        },
	}
}

swiper轮播—异形轮播

最近经常会碰到很多用swiper插件做各种各样轮播图的需求,没有做过3d异形轮播图,所以研究了一下,把经验给大家分享一下

上面图片就是轮播图所要达到的效果:焦点图片居中并向前突出,自动轮播。

代码介绍:

1.我的移动端屏幕尺寸640px,这个移动端屏幕适应是封装好的,如果需要引用,只需要改一下屏幕尺寸就好了。

2.我的图片大小是251*441。

3.swiper:指滑动、切换(整个滑动对象,有时特指滑块释放后仍然正向移动直到贴合边缘的过程(过渡))

  • container:指容器(swiper的容器里面包括滑动快(slide)的集合(wrapper)、分页器(pagination)、前进按钮等)
  • wrapper:指包含(触控的对象,可触摸区域,移动的块的集合,过渡时会随slide切换产生位移)
  • slider:指滑块(切换的块中的一个,可以包含文字、图片、html元素或另外一个swiper
  • pagination:指分页器(指示slide的数量和当前活动的slide)
  • active:指活动的,激活的(可视的(visible)slide是活动的,当可视slide不止一个时,默认最左边那个活动的)

4.详细参数配置参照swiper配置

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/css/swiper.css" rel="external nofollow" >
<script> 
    //屏幕适应 --移动端
    (function (win, doc) {
        if (!win.addEventListener) return;
        var html = document.documentElement;
        function setFont() {
            var html = document.documentElement;
            var k = 640;
            html.style.fontSize = html.clientWidth / k * 100 + "px";
        }
        setFont();
        setTimeout(function () {
            setFont();
        }, 300);
        doc.addEventListener('DOMContentLoaded', setFont, false);
        win.addEventListener('resize', setFont, false);
        win.addEventListener('load', setFont, false);
    })(window, document);
    </script>
<style>
.swiper-container{width:4.14rem;height:4.88rem;margin:0 auto;position:relative;}
        .swiper-container img{display:block;width:2.51rem;height:4.41rem;margin:0 auto;}
        .swiper-container-horizontal>.swiper-pagination-bullets, .swiper-pagination-custom, .swiper-pagination-fraction {bottom:0;left:0;width:100%;}
        .swiper-pagination-bullet-active {background-color:#ffd200;}
</style>
</head>
<body>
    <div class="swiper-container">
        <div class="swiper-wrapper">
            <div class="swiper-slide">
                <img src="ossweb-img/s-img1.png">
            </div>
            <div class="swiper-slide">
                <img src="ossweb-img/s-img2.png">
            </div>
            <div class="swiper-slide">
                <img src="ossweb-img/s-img3.png">
            </div>
            <div class="swiper-slide">
                <img src="ossweb-img/s-img4.png">
            </div>
            <div class="swiper-slide">
                <img src="ossweb-img/s-img5.png">
            </div>
        </div>
        <div class="swiper-pagination"></div>
    </div>
<!-- 轮播图 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.4.2/js/swiper.js"></script>
<script>
// 轮播图
 // 初始化swiper
 var mySwiper2 = new Swiper('.swiper-container', {
	autoplay:2000,//自动滑动
	speed:500,//自动滑动开始到结束的时间(单位ms)
	loop:true,//开启循环
	loopedSlides:5,//在loop模式下使用slidesPerview:'auto',还需使用该参数设置所要用到的loop个数。
	slidesPerView:'auto',//设置slider容器能够同时显示的slides数量(carousel模式)。另外,支持'auto'值,会根据容器container的宽度调整slides数目。
	effect:'coverflow',//可以实现3D效果的轮播,
	pagination:'.swiper-pagination',//分页器
	centeredSlides:true,//设定为true时,active slide会居中,而不是默认状态下的居左。
	coverflow:{
		rotate:0,//slide做3d旋转时Y轴的旋转角度。默认50。
		stretch:100,//每个slide之间的拉伸值,越大slide靠得越紧。 默认0。
		depth:150,//slide的位置深度。值越大z轴距离越远,看起来越小。 默认100。
		modifier:1,//depth和rotate和stretch的倍率,相当于depth*modifier、rotate*modifier、stretch*modifier,值越大这三个参数的效果越明显。默认1。
		slideShadows:false,//开启slide阴影。默认 true。
	},
});
// rotate :number,   //侧转角度(正值凹陷)、(负值凸出)
//      stretch : number,  //每个slide之间拉伸值(正值紧贴)、(负值远离)
//      depth :  number,   // 正值越大slide为远景图(可负值)
//      modifier :  number,  //depth和rotate和stretch的倍率,值越大这三个参数的效果越明显
//      shadows :  true     //是否使用阴影
</script>
</body>
</html>

这样一个异形轮播图就好啦!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue2与Vue3中Ref绑定元素方式

    Vue2与Vue3中Ref绑定元素方式

    这篇文章主要介绍了Vue2与Vue3中Ref绑定元素方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • vue3使用reactive赋值后页面不改变

    vue3使用reactive赋值后页面不改变

    本文主要介绍了vue3使用reactive赋值后页面不改变,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • VUE+jszip如何实现下载多个文件导出为一个zip格式

    VUE+jszip如何实现下载多个文件导出为一个zip格式

    这篇文章主要介绍了VUE+jszip如何实现下载多个文件导出为一个zip格式方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vue component 中引入less文件报错 Module build failed

    vue component 中引入less文件报错 Module build failed

    这篇文章主要介绍了vue component 中引入less文件报错 Module build failed的解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • 使用vue-router完成简单导航功能【推荐】

    使用vue-router完成简单导航功能【推荐】

    vue-router是Vue.js官方提供的一套专用的路由工具库。这篇文章主要介绍了使用vue-router完成简单导航功能,需要的朋友可以参考下
    2018-06-06
  • Vue中使用md5进行数据加密的实现方法

    Vue中使用md5进行数据加密的实现方法

    在现代Web开发中,数据安全是一个不可忽视的重要环节,Vue.js作为一个流行的前端框架,不仅提供了强大的数据绑定和组件化功能,还支持与各种后端服务的集成,本文将探讨如何在Vue应用中使用MD5算法来加密数据,从而提升应用的安全性,需要的朋友可以参考下
    2024-10-10
  • Vue3.x的版本中build后dist文件中出现legacy的js文件问题

    Vue3.x的版本中build后dist文件中出现legacy的js文件问题

    这篇文章主要介绍了Vue3.x的版本中build后dist文件中出现legacy的js文件问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • vue实现后台管理权限系统及顶栏三级菜单显示功能

    vue实现后台管理权限系统及顶栏三级菜单显示功能

    这篇文章主要介绍了vue实现后台管理权限系统及顶栏三级菜单显示功能,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • Vue 浏览器本地存储的问题小结

    Vue 浏览器本地存储的问题小结

    这篇文章主要介绍了Vue 浏览器本地存储,LocalStorage 和 SessionStorage 统称为 WebStorage,存储大小一般支持5mb左右,但是不同的浏览器也有区别,具体内容介绍跟随小编一起看看吧
    2022-04-04
  • vue项目优雅实现自动引入组件的方法详解

    vue项目优雅实现自动引入组件的方法详解

    在我们写vue项目的时候,都会引入一些组件库,有时候有可能还不止一个组件库,那么如何优雅的实现自动引入组件呢,下面小编就来和大家详细讲讲吧
    2023-09-09

最新评论