背景
有个移动端的Vue项目,新的需求需要加上如下图这种左/右滑,加载前/后项的,毫无疑问swiper走起,vue-awesome-swiper。
实践
异步获取数据:
<template><swiper :options="swiperOption"><swiper-slide v-for="(slide, index) in swiperSlides" :key="index">I'm Slide {{ slide }}</swiper-slide><div class="swiper-pagination" slot="pagination"></div></swiper></template><script>import { swiper, swiperSlide } from 'vue-awesome-swiper'import 'swiper/dist/css/swiper.css'export default {name: 'carrousel',components: {swiper,swiperSlide},data() {return {swiperOption: {effect: "coverflow",grabCursor: true,centeredSlides: true,slidesPerView: "auto", // virtual时不能为"auto"observer: true,observeParents: true,coverflowEffect: {rotate: 0,stretch: -20,depth: 70,slideShadows: false}},swiperSlides: [1, 2, 3, 4, 5]}},mounted() {setInterval(() => {console.log('simulate async data')if (this.swiperSlides.length < 10) {this.swiperSlides.push(this.swiperSlides.length + 1)}}, 3000)}}</script>
但是列表数据比较多,不可能全部渲染呀,怎么办呢?
虚拟列表你值得拥有~查了下swiper的文档,virtual属性支持虚拟列表,perfect!
<div class="swiper-container"><div class="swiper-wrapper"></div></div><script>var mySwiper = new Swiper('.swiper-container', {virtual: {slides: (function () {var slides = [];for (var i = 0; i < 600; i += 1) {slides.push('Slide ' + (i + 1));}return slides;}()),},//或者 virtual: true,});</script>
等等,上面这段virtual属性的代码是swiper的,vue上咋使用呢?
去vue-awesome-swiper issues上查查。
swiper英文文档上有提供例子(React也有),自行参考:https://swiperjs.com/api/#virtual
Note that according to Virtual Slides realization it doesn’t work with
loopmode,slidesPerColumnmore than 1 andslidesPerView: 'auto'
virtual 和 slidesPerView: ‘auto’ 不能一起使用,那怎样让页面中出现前后slide的一部分呢?
英文文档中 slidesPerView取值Number or “auto”,最开始没想到可取小数(&%¥#),参考 slidesPerView,可以设置为数字(可为*小数,小数不可loop),或者 ‘auto’则自动根据slides的宽度来设定数量。
中英文文档混着看的我。。
上面的例子里异步数据怎么处理呢?
可以参考我下面的例子,例子中还有点疑问,知道的可以帮忙解决下哦~

