如何最初将幻灯片容器设置为距左边距 10%,当到达末尾时,距右边距 10%?(vue-awesome-swiper)

Aly*_*lex 5 javascript css vue.js vuejs2 swiper.js

这可能是一个简单的问题,但我似乎找不到解决方案。

我正在使用 vue-awesome-swiper( https://github.surmon.me/vue-awesome-swiper/ )。我想要这样的东西:

左侧初始边距为 10%: 过渡开始

当内部幻灯片可见时,它们左右接触(全宽拉伸): 在此输入图像描述

当到达最后一张幻灯片时,右边距为 10%: 过渡结束

示例可以在这里找到: https: //github.surmon.me/vue-awesome-swiper/

我添加margin-left:10%;到了swiper-wrapper适合我的类作为初始边距,但这涵盖了我的最后一张幻灯片,因为内容移动了 10%。我希望在到达最后一张幻灯片时删除 margin-left,反之亦然。

我尝试查看事件(https://swiperjs.com/api/#events):reachEndreachBeginning。这两个,我尝试像这样申请:

<template>
<div>
      <swiper
        class="swiper"
        :options="swiperOption"
        :reach-beginning="handleTransitionStart"
        :reach-end="handleTransitionEnd"
        :style="transitionStarted ? { margin: '0 0 0 10%' } : { margin: '0 10% 0 0' }"

      >
.....
</swiper>
</div>
</template>

<script lang="ts">
import { Component, Prop, Vue } from 'vue-property-decorator';

@Component
export default class InformationSection extends Vue {
  @Prop() 'reachEnd'!: any;
  @Prop() 'reachBeginning'!: any;

  swiperOption = {
    slidesPerView: 4,
    spaceBetween: 30,
    pagination: {
      el: '.swiper-pagination',
      clickable: true,
    },
  };

  transitionStarted: boolean = true;

  handleTransitionStart(): any {
    // eslint-disable-next-line no-console
    console.log('Started');
    this.transitionStarted = true;
  }

  handleTransitionEnd(): any {
    // eslint-disable-next-line no-console
    console.log('Ended');
    this.transitionStarted = false;
  }
}
</script>

<style scoped>

  .swiper-slide {
    width: 60%;
  }
  .swiper-slide:nth-child(2n) {
      width: 40%;
  }
  .swiper-slide:nth-child(3n) {
      width: 20%;
  }

</style>
Run Code Online (Sandbox Code Playgroud)

以上并没有在末尾添加右侧边距。我怎样才能实现这个目标?

Imr*_*med 8

幻灯片偏移后

幻灯片偏移之前

参考:https: //swiperjs.com/swiper-api#param-slidesOffsetAfter

if($('.swiper').length !== 0){
const swiper = new Swiper('.swiper', {
    loop: false,
    slidesOffsetBefore: 5, // This is 5px slide offset 
    slidesPerView: 1.3,  // second slide partial show (In this question it was probably 3.5)
    centeredSlides: true // centering slides
    spaceBetween: 10,
  }
});}
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 6

我记得需要类似的东西,最终构建了我自己的滚动器组件。但这并不适合所有人。

有一种很奇怪的方法可以做到这一点,我希望你能找到更干净的方法。

第一张幻灯片有边距 <swiper-slide style="margin-left:10%;">I'm Slide 1</swiper-slide>

最后一张幻灯片是不可见的 <swiper-slide style="opacity:0;"></swiper-slide>

Vue.use(VueAwesomeSwiper)
new Vue({
  el: '#vueapp',
  components: {
    LocalSwiper: VueAwesomeSwiper.swiper,
    LocalSlide: VueAwesomeSwiper.swiperSlide,
  },
  data: {
    swiperOptionA: {

      slidesPerView: 4,
      spaceBetween: 30,
      pagination: {
        el: '.swiper-pagination',
        clickable: true,
      },
      navigation: {
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev'
      }
    },
  },
  computed: {
    swiperA() {
      return this.$refs.awesomeSwiperA.swiper
    },
  },
})
Run Code Online (Sandbox Code Playgroud)
.swiper-container {
  height: 300px;
  width: 100%;
}

.swiper-slide {
  text-align: center;
  font-size: 38px;
  font-weight: 700;
  background-color: #eee;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}
Run Code Online (Sandbox Code Playgroud)
<link href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.0.7/css/swiper.min.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.0.7/js/swiper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-awesome-swiper@3.0.4/dist/vue-awesome-swiper.js"></script>

<div id="vueapp">
    <swiper ref="awesomeSwiperA" :options="swiperOptionA">
      <!-- slides -->
      <swiper-slide style="margin-left:10%;">I'm Slide 1</swiper-slide>
      <swiper-slide>I'm Slide 2</swiper-slide>
      <swiper-slide>I'm Slide 3</swiper-slide>
      <swiper-slide>I'm Slide 4</swiper-slide>
      <swiper-slide>I'm Slide 5</swiper-slide>
      <swiper-slide>I'm Slide 6</swiper-slide>
      <swiper-slide>I'm Slide 7</swiper-slide>
      <swiper-slide style="opacity:0;"></swiper-slide>
      <!-- Optional controls -->
      <div class="swiper-pagination"  slot="pagination"></div>
      <div class="swiper-button-prev" slot="button-prev"></div>
      <div class="swiper-button-next" slot="button-next"></div>
    </swiper>
    <br>
</div>
Run Code Online (Sandbox Code Playgroud)