【问题标题】:How init Swiper in VueJS?如何在 VueJS 中初始化 Swiper?
【发布时间】:2019-05-07 10:54:28
【问题描述】:

首先感谢您抽出宝贵时间,因为我整个上午都在讨论这个问题。如何在 vue.JS 上使用 https://idangero.us/swiper 模块?确实 Swiper 在页面上,但参数似乎没有计算在内。

我也尝试过 vue awesome swiper,但我更喜欢使用没有 bug 的官方版本。在导入之后,我也尝试在 const 中初始化 swiper。

<template>
  <div class="swiper-container">
    <div class="swiper-wrapper">
      <v-touch
         @tap="navigateTo(item)"
         v-for="item in subList"
         :key="item._id"
         class="swiper-slide"
      >
        {{t(item.sentence)}}
      </v-touch>
    </div>
  </div>
</template>

<script>
  import Swiper from 'swiper'
  import 'swiper/dist/css/swiper.css'
  import 'swiper/dist/js/swiper.js'
  export default {
    name: 'category',
    data () {
      return {
        subList: [{some data}],
      }
    },
    mounted () {
      this.initSwiper()
    },
    methods: {
      initSwiper () {
        const mySwiper = new Swiper('.swiper-container', {
          slidesPerView: 3,
          slidesPerColumn: 2,
          spaceBetween: 50
        })
        mySwiper.init()
      }
    }
  }
</script>

<style scoped>
.swiper-slide {
  display: flex;
  justify-content: center;
  align-items: center;
  border: solid 2px white;
  width: 200px;
  height: 200px;
}
</style>

例如,对于这段代码,我需要在每个 div 之间留一个空格或只有 2 行,但我没有空格和 3 行...谢谢您的帮助。

【问题讨论】:

    标签: vue.js swiper


    【解决方案1】:

    您现在可以使用这个Vue Awesome Swiper 它拥有您需要的一切

    您可以使用以下命令安装它

    npm install swiper vue-awesome-swiper --save
    

    免责声明:我与此软件包没有隶属关系,也没有贡献者,我只是在使用它。所以我推荐它

    【讨论】:

    • 我知道已经晚了。但重要的是保留答案以供参考
    • 这似乎更像是一种认可而不是一个答案。
    【解决方案2】:

    您可以像这样简单地使用ref 来初始化滑块:

    <template>
      <div>
        <div ref="mySlider" class="swiper-container">
         …
        </div>
        <button @click="next">Next Slide</div>
      </div>
    </template>
    
    import Swiper from 'swiper'
    import 'swiper/swiper-bundle.css'
    
    export default {
      data () {
        return {
          slider: null,
          mySliderOptions: {
            loop: true
          }
        }
       },
       methods: {
         next() {
          this.slider.slideNext()
        }
      }
      mounted () {
        this.slider = new Swiper(this.$refs.mySlider, this.mySliderOptions)
      }
    }
    

    更新

    他们刚刚发布了一个official vue.js swiper component(仅 vue.js 3)

    【讨论】:

      【解决方案3】:

      这似乎有效,不确定是否是一个好方法

      父母

      <Swiper
        :options="carouselOptions"
      />
      

      孩子(Swiper.vue)

        <div v-if="options" ref="swiper" class="carousel-hero carousel-hero--is-hidden swiper-container">...
      
      <script>
          import Swiper, { Navigation, Pagination } from 'swiper';
          Swiper.use([Navigation, Pagination]);
          import 'swiper/swiper-bundle.css';
          
          export default {
            name: 'Swiper',
            props: {
              options: {
                type: Object,
                default: () => {
                  return {
                    slidesPerView: 1
                  }
                }
              }
            },
            data() {
              return {
                swiper: null,
              }
            },
            mounted() {
              let vm = this;
          
              if (this.options && vm.$refs.swiper !== 'undefined') {    
                vm.$refs.swiper.classList.remove('carousel-hero--is-hidden');
          
                this.swiper = new Swiper(vm.$refs.swiper, {    
                  slidesPerView: this.options.slidesPerView,
                  navigation: {
                    nextEl: '.swiper-button-next',
                    prevEl: '.swiper-button-prev',
                  },
          
                  on: {
                    init: function () {
                      console.log('swiper initialized');
                    },
                    resize: function () {
                      console.log('resize');
                    }
                  }
                });
              }
            },
            methods: {
          
            }
          };
          </script>
      

      【讨论】:

        【解决方案4】:

        很久以前我也遇到过同样的问题。 最后,我从cdn 添加了 Swiper,它对我来说效果很好。 我为您(使用 Swiper)做了一个简单的示例,希望对您有所帮助。

        我从here 获取了所有 CSS 道具 + swiper 配置,所以请随意使用它。 如果您有任何问题,请告诉我:) 你也可以查看these docs,里面有关于如何使用 Vue & React 等配置的说明。

        new Vue({
          el: '#app',
          data: {
            swiper: null
          },
          mounted() {
            this.swiper = new window.Swiper('.swiper-container', {
              cssMode: true,
              navigation: {
                nextEl: '.swiper-button-next',
                prevEl: '.swiper-button-prev',
              },
              pagination: {
                el: '.swiper-pagination'
              },
              mousewheel: true,
              keyboard: true,
            })
          }
        })
        html, body {
              position: relative;
              height: 100%;
            }
            body {
              background: #eee;
              font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
              font-size: 14px;
              color:#000;
              margin: 0;
              padding: 0;
            }
            .swiper-container {
              width: 100%;
              height: 100%;
            }
            .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;
              height: 200px !important;
              background: pink;
              border: 1px solid #888;
            }
        <link href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.2.2/css/swiper.min.css" rel="stylesheet" />
        <script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.1/js/swiper.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
        <div id="app">
          <div class="swiper-container">
            <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 class="swiper-slide">Slide 4</div>
            </div>
             <!-- Add Arrows -->
            <div class="swiper-button-next"></div>
            <div class="swiper-button-prev"></div>
            <!-- Add Pagination -->
            <div class="swiper-pagination"></div>
          </div>
        </div>

        【讨论】:

          【解决方案5】:
          mounted : function(){
                  var swiper = new Swiper('.swiper-container', {
                                slidesPerView: 7,
                                spaceBetween: 0,
                                slidesPerGroup: 7
                              });
          
          },
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-06-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-01
            • 1970-01-01
            相关资源
            最近更新 更多