查看原文
其他

Vue.js轮播库热门精选

Dunizb翻译 前端全栈开发者 2022-07-09

来源:https://blog.logrocket.com,作者:John Au-Yeung

要创建一个轮播图,我们必须动态地创建显示图片,并添加导航按钮来在它们之间导航,我们可能还需要自动播放功能。

这些都需要时间来构建,而且极有可能我们可以更好地利用这些时间做其他事情。在这篇文章中,我们将看看Vue.js的一些轮播图库,让我们的生活变得更轻松,并让我们拿回一些宝贵的时间。

vue-easy-slider

vue-easy-slider[1] 是一个简单的Vue滑块组件,可与鼠标和触摸屏一起使用。它是可自定义的,并带有动画效果。

要使用它,我们通过运行以下命令进行安装:

npm i -S vue-easy-slider

然后我们可以通过编写以下代码来使用它:

//main.js

import Vue from "vue";
import App from "./App.vue";
import EasySlider from "vue-easy-slider";

Vue.use(EasySlider);
Vue.config.productionTip = false;

new Vue({
render: h => h(App)
}).$mount("#app");
//App.vue

<template>
<div id="app">
<slider animation="fade">
<slider-item v-for="(i, index) in list" :key="index">
<img :src="i">
</slider-item>
</slider>
</div>
</template>

<script>
export default {
name: "App",
data() {
return {
index: 0,
list: Array(5)
.fill()
.map((_, i) => `http://lorempixel.com/400/200/sports/${i}/`)
};
}
};
</script>

我们使用 slider 组件来添加轮播,animation 属性设置动画效果。顾名思义,slider-item 存放的是轮播项目。

我们还可以更改样式。例如,我们可以通过编写以下内容来更改宽度和高度:

<template>
<div id="app">
<slider animation="fade" width="400px" height="250px">
<slider-item v-for="(i, index) in list" :key="index">
<img :src="i">
</slider-item>
</slider>
</div>
</template>

<script>
export default {
name: "App",
data() {
return {
index: 0,
list: Array(5)
.fill()
.map((_, i) => `http://lorempixel.com/400/200/sports/${i}/`)
};
}
};
</script>

我们还可以启用或禁用触摸控制并更改幻灯片切换的速度。它还会发出一些事件,例如 change,在切换幻灯片时会触发。当显示下一张或上一张幻灯片时触发。

它还具有用于放置占位符的插槽,以便在加载幻灯片时显示某些内容。

vue-awesome-swiper

vue-awesome-swiper[2]是Vue应用程序的另一个易于使用的轮播组件。它基于Swiper,因此我们必须将其与软件包一起安装:

npm install swiper vue-awesome-swiper --save

然后我们可以通过编写以下代码来使用它:

//app.js

import Vue from "vue";
import App from "./App.vue";
import VueAwesomeSwiper from "vue-awesome-swiper";
import "swiper/css/swiper.css";

Vue.use(VueAwesomeSwiper);
Vue.config.productionTip = false;

new Vue({
render: h => h(App)
}).$mount("#app");
//App.vue

<template>
<div id="app">
<swiper ref="mySwiper" :options="swiperOptions">
<swiper-slide v-for="(i, index) in list" :key="index">
<img :src="i">
</swiper-slide>
<div class="swiper-pagination" slot="pagination"></div>
</swiper>
</div>
</template>

<script>
export default {
data() {
return {
list: Array(5)
.fill()
.map((_, i) => `http://lorempixel.com/400/200/sports/${i}/`),
swiperOptions: {
pagination: {
el: ".swiper-pagination"
}
}
};
}
};
</script>

在这里,我们使用带有某些选项的 swiper 组件。swiper-slide 组件可容纳幻灯片,因此我们将图像放入其中。我们还将swiperOptions 传递给 options 属性。

我们使用 pagination 槽填充内容,并为分页设置一个类,以便可以对其进行样式设置。

我们也可以通过编程方式转到幻灯片。这就是为什么我们将 ref 分配给滑块的原因之一——移至所需的幻灯片。例如,我们可以这样写:

//App.js

<template>
<div id="app">
<swiper ref="mySwiper" :options="swiperOptions">
<swiper-slide v-for="(i, index) in list" :key="index">
<img :src="i">
</swiper-slide>
<div class="swiper-pagination" slot="pagination"></div>
</swiper>
</div>
</template>

<script>
export default {
data() {
return {
list: Array(5)
.fill()
.map((_, i) => `http://lorempixel.com/400/200/sports/${i}/`),
swiperOptions: {
pagination: {
el: ".swiper-pagination"
}
}
};
},
computed: {
swiper() {
return this.$refs.mySwiper.$swiper;
}
},
mounted() {
this.swiper.slideTo(2, 1000, false);
}
};
</script>

我们使用分配给滑块的mySwiper ref创建了一个计算属性,然后调用 slideTo 方法来改变为具有给定索引的幻灯片。索引在第一个参数中,第二个参数是延迟,第三个参数指示我们是否要运行回调。如果将其设置为 true,它将在切换期间发出事件。

像vue-easy-slider一样,该轮播库也具有动画效果。

Slick for Vue.js

Slick for Vue.js[3]库为我们提供了另一个滑块。jQuery是一个依赖项,因此我们也必须安装它。要安装依赖项,请运行:

npm install jquery vue-slick --save

接下来,我们可以通过编写以下代码来使用它:

//main.js

import Vue from "vue";
import App from "./App.vue";
import "slick-carousel/slick/slick.css";

Vue.config.productionTip = false;

new Vue({
render: h => h(App)
}).$mount("#app");
//App.vue
//App.vue

<template>
<slick ref="slick" :options="slickOptions">
<div v-for="(i, index) in list" :key="index">
<img :src="i">
</div>
</slick>
</template>

<script>
import Slick from "vue-slick";

export default {
components: { Slick },
data() {
return {
slickOptions: {
slidesToShow: 1
},
list: Array(5)
.fill()
.map((_, i) => `http://lorempixel.com/400/200/sports/${i}/`)
};
},
methods: {}
};
</script>

我们在 main.js 中注册插件并导入CSS,然后使用 slick 组件来创建我们的轮播图。我们传入我们的 slickOptions 对象,并将slidesToShow 属性设置为 1 ,只显示一张幻灯片。幻灯片是通过使用 v-for 来渲染图片来创建的。

它发出许多事件:

  • 我们可以监听 afterChange 事件,该事件在幻灯片切换后发出
  • 在幻灯片切换之前发出 beforeChange
  • 卸载滑块时会发出 destroy
  • 执行滑动动作时会触发 swipe
  • 还有很多

我们也可以调用 this.$refs.slick.reSlick(); 来更新我们的幻灯片,如果我们改变了图片列表,就使用最新的图片。

vue-flickity

接下来是vue-flickity[4],它为我们提供了许多自定义选项。要安装它,我们可以运行:

npm install vue-flickity --save

让我们来看看如何使用它:

//App.vue

<template>
<div>
<flickity ref="flickity" :options="flickityOptions">
<div class="carousel-cell" v-for="(i, index) in list" :key="index">
<img :src="i">
</div>
</flickity>

<button @click="previous()">Previous</button>
<button @click="next()">Next</button>
</div>
</template>

<script>
import Flickity from "vue-flickity";

export default {
components: { Flickity},
data() {
return {
flickityOptions: {
initialIndex: 3,
prevNextButtons: false,
pageDots: false,
wrapAround: true
},
list: Array(5)
.fill()
.map((_, i) => `http://lorempixel.com/400/200/sports/${i}/`)
};
},
methods: {
next() {
this.$refs.flickity.next();
},

previous() {
this.$refs.flickity.previous();
}
}
};
</script>

我们使用 flickity 组件添加滑块,并且可以通过 options 属性对其进行自定义。我们使用它通过 initialIndex 属性设置初始幻灯片。

prevNextButton 可以让我们显示或隐藏内置的导航按钮,我们可以选择是否要用 pageDots 来显示导航点,wrapAround 表示当我们到达轮播图的结束或开始时,分别回到第一张或最后一张幻灯片。

我们还为导航添加了一些自定义的按钮,我们创建了一个用于导航到上一张幻灯片的按钮和一个用于导航到下一张幻灯片的按钮。ref获取ref,让我们分别调用下一张或上一张方法来移动到下一张或上一张幻灯片。

我们可以使用CSS设置轮播和幻灯片的样式。它将轮播添加到 carousel-cell 类中,以便我们对其进行样式设置。内置的导航按钮和圆点也有它们的类,这意味着我们可以轻松地设置样式。

Vue Carousel 3D

Vue Carousel 3D[5]是一个有趣的滑块。它以3D幻灯片而不是2D形式显示幻灯片。当我们浏览幻灯片时,正在显示的幻灯片是在其他幻灯片的前面创建的,并且当我们翻转幻灯片时,它会显示旋转效果。

要安装它,我们运行:

npm install -S vue-carousel-3d

要使用它,我们写:

//main.js

import Vue from "vue";
import App from "./App.vue";
import Carousel3d from "vue-carousel-3d";

Vue.use(Carousel3d);
Vue.config.productionTip = false;

new Vue({
render: h => h(App)
}).$mount("#app");
//App.vue

<template>
<div>
<carousel-3d>
<slide v-for="(i, index) in list" :key="index" :index="index">
<img :src="i">
</slide>
</carousel-3d>
</div>
</template>

<script>
export default {
data() {
return {
list: Array(5)
.fill()
.map((_, i) => `http://lorempixel.com/400/200/sports/${i}/`)
};
}
};
</script>

我们使用 carousel-3d 组件添加轮播,然后使用 slide 组件添加幻灯片。我们传入索引,以便正确放置幻灯片。内置3D样式。

除此之外,它还有一些自定义选项。我们可以:

  • 使用 autoplay prop启用或禁用自动播放
  • 更改偏差,即当幻灯片数量为偶数时,偏差更大
  • 设置轮播无限循环
  • 调整宽度和高度
  • 自定义滑动距离并控制宽度和高度

总结

大多数库都非常相似,而Vue Carousel 3D无疑是最独特的。其他都是二维的,具有类似的自定义选项。

它们的性能相似,并且都很容易使用。它们都可以在触摸屏上使用,并且都具有动画效果。

Slick for Vue.js会发出很多事件,因此,如果我们需要在幻灯片更改或类似情况发生时做一些事情,那我们就应该选择该库。如果我们希望每页显示多张幻灯片,则Slick for Vue.js也很有用。

代理通常与另一个称为Reflect的元编程功能一起使用。


前端大礼包新增课程了💯

新增课程《TypeScript系统入门到项目实战2020新版》,学习当下和未来大热技术!公众号中回复关键字:“前端大礼包”即可获取,不定期新增新课程,新增课程都会通知大家。



参考资料

[1]

vue-easy-slider: https://github.com/shhdgit/vue-easy-slider

[2]

vue-awesome-swiper: https://github.com/surmon-china/vue-awesome-swiper

[3]

Slick for Vue.js: https://github.com/staskjs/vue-slick

[4]

vue-flickity: https://github.com/drewjbartlett/vue-flickity

[5]

Vue Carousel 3D: https://github.com/wlada/vue-carousel-3d


近期文章
JavaScript ES6代理的实际用例

DOM API中append和appendChild的三个不同点

在JavaScript中使用Spread运算符的8种方法

你知道Object.entries(),但你还知道有Object.fromEntries()吗?

Vue技巧 | 在Vue3中使元素在滚动视图时淡入

实战|如何使用JavaScript访问设备前后摄像头

仅3行核心CSS代码的rate评分组件

使用JavaScript的padStart和padEnd格式化字符串

Vue 3教程(适用于Vue 2用户)

JavaScript vs Dart  两者之间的比较

不要过度使用React.useCallback()

HTML页面生成器:使用JavaScript和Node创建CLI

React.js和Vue.js的语法并列比较

从零开始使用JavaScript制作自己的命令行(CLI工具)

Vue.js中编写更好的v-for循环的6种技巧

如果对你有帮助,还可以在看、留言、转发,这是对作者最大的帮助。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存