【css】使用Swiper

一、基本使用

示例:下载Swiper - Swiper中文网

html部分

引入css

<link rel="stylesheet" href="https://unpkg.com/swiper@8/swiper-bundle.css">
<link rel="stylesheet" href="https://unpkg.com/swiper@8/swiper-bundle.min.css">  

引入js

<script src="https://unpkg.com/swiper@8/swiper-bundle.js"> </script>  
<script src="https://unpkg.com/swiper@8/swiper-bundle.min.js"> </script>
<script src="https://unpkg.com/swiper@8/swiper-bundle.min.js.map"> </script>
ES 模块
<script type="module">
  import Swiper from 'https://unpkg.com/swiper@8/swiper-bundle.esm.browser.min.js'
  const swiper = new Swiper(...)
</script>

示例

<!DOCTYPE html>
<html>
<head>
    ...
    <link rel="stylesheet" href="dist/css/swiper-bundle.min.css">
</head>
<body>
    ...
    <script src="dist/js/swiper-bundle.min.js"></script>
    ...
</body>
</html>

挂载class

swiper默认容器

swiper-wrapper默认插件(装载swiper-slide),wrapper与其他插件是平级的(在html上)

swiper-slide轮播内容容器

swiper-pagination分页插件

swiper-scrollbar滚动条

swiper-button-prev、swiper-button-next导航按钮

示例

<!DOCTYPE html>
<html>

<head>
  <link rel="stylesheet" href="https://unpkg.com/swiper@8/swiper-bundle.css">
  <style>
    .swiper {
      width: 600px;
      height: 300px;
      border: 1px solid;
    }

    .swiper-slide {
      text-align: center;
      font-size: 18px;
      background: #fff;

      /* Center slide text vertically */
      display: -webkit-box;
      display: -ms-flexbox;
      display: -webkit-flex;
      display: flex;
      -webkit-box-pack: center;
      -ms-flex-pack: center;
      -webkit-justify-content: center;
      justify-content: center;
      -webkit-box-align: center;
      -ms-flex-align: center;
      -webkit-align-items: center;
      align-items: center;
    }

    .swiper-slide img {
      display: block;
      width: 600px;
      height: 300px;
      object-fit: cover;
    }
  </style>
</head>

<body>
  <script src="https://unpkg.com/swiper@8/swiper-bundle.js"> </script>
  <div class="swiper">
    <div class="swiper-wrapper">
      <div class="swiper-slide">Slide 1</div>
      <div class="swiper-slide">Slide 2</div>
      <div class="swiper-slide">Slide 3</div>
    </div>
    <!-- 如果需要分页器 -->
    <div class="swiper-pagination"></div>

    <!-- 如果需要导航按钮 -->
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>

    <!-- 如果需要滚动条 -->
    <div class="swiper-scrollbar"></div>

    <!-- 也可以放在options的modules里 -->
  </div>
  <!-- 导航等组件可以放在Swiper容器之外 -->
  
  <script>
    var mySwiper = new Swiper('.swiper', {
      // direction: 'vertical', // 垂直切换选项
      loop: true, // 循环模式选项

      // 如果需要分页器
      pagination: {
        el: '.swiper-pagination',
      },

      // 如果需要前进后退按钮
      navigation: {
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev',
      },

      // 如果需要滚动条
      scrollbar: {
        el: '.swiper-scrollbar',
      },
    })

  </script>

</body>

</html>

css部分

.swiper {
    width:600px;
    height:300px;
}
这里可以做unocss适配

JavaScript部分

new Swiper('.swiper', options)

返回一个可操作的dom对象。Swiper使用方法 > Swiper与DOM - Swiper中文网

插件可以放在modules里,而不用在html中显式声明?

示例

var mySwiper = new Swiper ('.swiper', {
    direction: 'vertical', // 垂直切换选项
    loop: true, // 循环模式选项

    // 如果需要分页器
    pagination: {
        el: '.swiper-pagination',
    },

    // 如果需要前进后退按钮
    navigation: {
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev',
    },

    // 如果需要滚动条
    scrollbar: {
        el: '.swiper-scrollbar',
    },
})   

二、过渡动画

Swiper Animate

在线演示:Swiper使用方法 > swiperAnimate 使用方法 - Swiper中文网

Swiper中文网提供的用于在Swiper内快速制作CSS3动画效果的小插件,适用于Swiper2.x、Swiper3.x、Swiper4.x和Swiper5.x 。
此插件不适用于loop模式

引入swiper.animate.min.jsanimate.min.css

<!DOCTYPE html>
<html>
<head>
    ...
    <link rel="stylesheet" href="path/to/swiper.min.css">
    <link rel="stylesheet" href="path/to/animate.min.css">
</head>
<body>
    ...
    <script src="path/to/swiper.min.js"></script>
    <script src="path/to/swiper.animate.min.js"></script>
</body>
</html>

使用

挂载
在需要运动的元素上面增加类名ani,和其他的类似插件相同,Swiper Animate需要指定几个参数:
swiper-animate-effect:切换效果,例如 fadeInUp 
swiper-animate-duration:可选,动画持续时间(单位秒),例如 0.5s
swiper-animate-delay:可选,动画延迟时间(单位秒),例如 0.3s

<div class="swiper-slide">
	<p class="ani" swiper-animate-effect="fadeInUp" swiper-animate-duration="0.5s" swiper-animate-delay="0.3s">内容</p>
</div>

设置
<script>
  //Swiper5
  var mySwiper = new Swiper('.swiper-container', {
    on: {
      init: function () {
        swiperAnimateCache(this); //隐藏动画元素 
        swiperAnimate(this); //初始化完成开始动画
      },
      slideChangeTransitionEnd: function () {
        swiperAnimate(this); //每个slide切换结束时也运行当前slide动画
        //this.slides.eq(this.activeIndex).find('.ani').removeClass('ani'); 动画只展现一次,去除ani类名
      }
    }
  }) 
</script>

Animate.css

如果以上这些效果不能满足你的需求,你可以仿照animate.css的格式制作一些其他效果,加到你自己的css文件。其他参数:transition-timing-function

另外,关于Animate.css【css】使用Animate.css_46590928的博客-CSDN博客

三、在原生js使用swiper

1.下载npm包npm i swiper

2.引入构造函数组件和样式 import Swiper, { Navigation, Pagination } from 'swiper';

或引入全部 import Swiper from 'swiper/bundle';

3.构造与类选择器绑定的swiper对象

const swiper = new Swiper('.swiper', {
    // configure Swiper to use modules
    modules: [Navigation, Pagination],
    ...
});

4.挂载类选择器

5.获取swiper对象

用于获取属性、调用方法和设置监听事件

const swiper = document.querySelector('.swiper').swiper;

// Now you can use all slider methods like
swiper.slideNext();

或者使用new Swiper返回的对象

四、在vue中使用swiper

下载npm包、引入组件和样式、使用标签、绑定属性。

样式

基本样式:import 'swiper/css'

全部组件样式:import 'swiper/css/bundle'

其他样式:Swiper API (swiperjs.com)(包括less、scss版本)

在此基础上自定义样式:根据组件名作为类选择器,如.swiper-slide

可以在swiper上挂载

组件

引入

基本组件:import { Swiper, SwiperSlide } from 'swiper/vue'

其他组件:import { Navigation, Pagination, Scrollar, A11y } from 'swiper'`

引入的组件将作为swiper的modules属性数组的元素。

更多组件:Swiper API (swiperjs.com)

组件本质就是以组件名为class的div。所以我们也可以自己定制类似的组件。

<swiper>渲染为<div class="swiper">
<swiper-slide>渲染为<div class="swiper-slide">

使用

<swiper>
    <swiper-slide></swiper-slide>
</swiper>

属性

Swiper属性:

1.两个下表列出的额外属性

2.链接中的所有属性。(Swiper Vue.js component receive all Swiper parameters as component props, plus some extra props)

3.swiper构造器options对象的第一层属性都可以作为属性

4.普通html标签的属性

PropTypeDefaultDescription
tagstring'div'Main Swiper container HTML element tag
wrapperTagstring'div'Swiper wrapper HTML element tag

SwiperSlide属性

PropTypeDefaultDescription
tagstring'div'Swiper Slide HTML element tag
zoombooleanfalseEnables additional wrapper required for zoom mode
virtualIndexnumberActual swiper slide index. Required to be set for virtual slides

事件

事件:@swiper事件和链接中的所有事件。(Swiper component supports all Swiper events, including additional swiper event that returns swiper instance as soon as possible.)

@swiper:调用一个函数,注入该实例,用于进行dom操作。

示例

<swiper @swiper="..." @slideChange="..." @reachEnd="..." ...></swiper>

插槽

swiper的插槽

  • container-start - element will be added to the beginning of swiper-container
  • container-end (default) - element will be added to the end of swiper-container
  • wrapper-start - element will be added to the beginning of swiper-wrapper
  • wrapper-end - element will be added to the end of swiper-wrapper

For example:

<swiper>
  <swiper-slide>Slide 1</swiper-slide>
  <swiper-slide>Slide 2</swiper-slide>
  <template v-slot:container-start><span>Container start</span></template>
  <template v-slot:container-end><span>Container end</span></template>
  <template v-slot:wrapper-start><span>Wrapper start</span></template>
  <template v-slot:wrapper-end><span>Wrapper end</span></template>
</swiper>

Will be rendered as:

<div class="swiper">
  <span>Container start</span>
  <div class="swiper-wrapper">
    <span>Wrapper start</span>
    <div class="swiper-slide">Slide 1</div>
    <div class="swiper-slide">Slide 2</div>
    <span>Wrapper wnd</span>
  </div>
  <span>Container end</span>
</div>

SwiperSlide插槽作用域属性:暴露向SwiperSlide子标签的属性。

  • isActive - true when current slide is active
  • isPrev - true when current slide is the previous from active
  • isNext - true when current slide is the next from active
  • isVisible - true when current slide is visible (watchSlidesProgress Swiper parameter must be enabled)
  • isDuplicate - true when current slide is a duplicate slide (when loop mode enabled)
<swiper>
  <swiper-slide v-slot="{ isActive }">
    <div>Current slide is {{ isActive ? 'active' : 'not active' }}</div>
  </swiper-slide>
</swiper>

其他

virtual slidesSwiper Vue.js Components (swiperjs.com)

controllerSwiper Vue.js Components (swiperjs.com)

thumbsSwiper Vue.js Components (swiperjs.com)

effectsSwiper Vue.js Components (swiperjs.com)

对象

获取swiper实例化对象

方法一:标签绑定事件

@swiper:调用一个函数,注入该实例,用于进行dom操作。事件一创建监听就触发该事件绑定的事件处理函数。

方法二:组合式api

方式一是马上获取,推荐方式一,因为保存在一个变量后,该变量也可以在你想要的时机进行操作的实际操作,方式二可能会出现空对象的情况(方法一也可能),方式一不需要引入hook,也是swiper官方有关vue文档中获取实例的方法。方式二可以在你想要的时机获取(反而容易导致错误),但语义性更强。

import { useSwiper, useSwiperSlide } from 'swiper/vue';
const swiper=useSwiper();
const swiperSlide=useSwiperSlide();
// swiperSlide对象用于获取slide数据(与插槽里的属性同名)

方法三:构造函数返回的实例

const swiper=new Swiper(seletor,options);

方法四:dom对象的swiper属性

After you initialize Swiper it is possible to access to Swiper’s instance on its HTMLElement. It is swiper property of Swiper’s HTML container element:

const swiper = document.querySelector('.swiper').swiper;

// Now you can use all slider methods like
swiper.slideNext();

属性和方法

获取swiper对象后,可以获取其状态以其对其进行操作。查看Swiper API (swiperjs.com)

示例

<template>
  <swiper v-bind="mySwiper">
    <swiper-slide><img src="/pic/a (1).png"></swiper-slide>
    <swiper-slide><img src="/pic/a (2).png"></swiper-slide>
    <swiper-slide><img src="/pic/a (3).png"></swiper-slide>
    <swiper-slide><img src="/pic/a (4).png"></swiper-slide>
    <swiper-slide><img src="/pic/a (5).png"></swiper-slide>
    <swiper-slide><img src="/pic/a (6).png"></swiper-slide>
  </swiper>
</template>
<script setup>
// Import Swiper Vue.js components
import { reactive } from "vue";
import { Swiper, SwiperSlide } from "swiper/vue";
import { Navigation, Pagination, Autoplay } from "swiper";
const modules = reactive([Navigation, Pagination, Autoplay]);

const mySwiper = reactive({
  modules,
  // 导航
  navigation: true,
  // 分页
  pagination: {
    dynamicBullets: true,
    clickable: true
  },
  // 循环
  loop: true,
  // 居中
  centeredSlides: true,
  // 自动播放
  autoplay: {
    delay: 2500,
    disableOnInteraction: false,
  }
  // slidesPerView: 3,
  // spaceBetween: 300,

})
</script>

<style>
:root {
  --swiper-theme-color: #fff !important;
}

.swiper {
  width: 1000px;
  height: 600px;
  border: 1px solid;
}

.swiper-slide {
  text-align: center;
  font-size: 18px;
  background: #fff;

  /* Center slide text vertically */
  display: -webkit-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  -webkit-justify-content: center;
  justify-content: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  -webkit-align-items: center;
  align-items: center;
}

.swiper-slide img {
  display: block;
  width: 1000px;
  height: 600px;
  object-fit: cover;
}

.swiper-pagination {
}

.swiper-pagination-bullet {
  font-size: 1px;
  color: white;
}
</style>
### 正确导入 Swiper CSS 文件的方法 对于不同版本的 `swiper` 和集成方式,CSS 的引入方法有所不同。 #### 对于较低版本 (低于 ^6.0.0) 可以直接通过如下方式引入: ```javascript import 'swiper/css/swiper.css'; ``` 这种方式适用于较早版本的 `vue-awesome-swiper` 插件[^1]。 #### 高于 ^6.0.0 版本的情况 随着版本更新,推荐使用更稳定的引入方式来确保样式正常加载: ```javascript // 引入组件库本身 import VueAwesomeSwiper from 'vue-awesome-swiper'; // 新版中的 CSS 路径有所变化 import 'swiper/swiper-bundle.css'; Vue.use(VueAwesomeSwiper); ``` 此做法可以有效解决高版本下样式无法正确应用的问题[^2]。 #### 处理特定环境下的路径问题 如果遇到类似 `Cannot resolve "swiper/dist/css/swiper.css"` 错误,则可能是由于安装过程中某些资源未被正确下载或配置不当引起。此时建议手动指定绝对路径指向本地已存在的 CSS 文件: ```javascript import "../node_modules/swiper/dist/css/swiper.css"; ``` 这种方法虽然直接但不够优雅,仅作为临时解决方案[^3]。 #### Nuxt.js 项目的特殊处理 针对基于Nuxt框架开发的应用程序,需特别注意插件注册位置以及服务端渲染(SSR)的支持情况: ```javascript import Vue from 'vue' import VueAwesomeSwiper from 'vue-awesome-swiper/dist/ssr' Vue.use(VueAwesomeSwiper) ``` 上述代码片段展示了如何在支持 SSR 场景中适配 `vue-awesome-swiper` 组件并自动加载所需样式表[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值