社区首页 >问答首页 >我在Vue 2中的Swiper.js做错了什么?

我在Vue 2中的Swiper.js做错了什么?
EN

Stack Overflow用户
提问于 2021-06-11 22:31:24
回答 1查看 1.6K关注 0票数 0

正如标题所说,我正在尝试在Vue 2中使用swiperjs。我已经使用了swiper和另一个库“vue-swiper swiper”的API来尝试让它工作。我用这两种方法都达到了这一点,一切看起来都正常,但只是导航按钮不起作用,触摸滑动也不起作用。

在下面的每一种方法中,我都得到了一个看似完美的导航器,但在这两种方法中,导航都不起作用。我使用的是vue 2.6和swiper 6.7。

下面是我使用vue-awesome swiper的方法:

代码语言:javascript
代码运行次数:0
复制
<template>
  <div>
    <h2 class="swiper-container__title">{{ sliderHeading }}</h2>
    <swiper :options="swiperOption" class="swiper">
      <!-- Loops through item data and creates a carousel item -->
      <div v-for="item in mediaItems" :key="item.id">
        <swiper-slide>
          <item :mediaItem="item"></item>
        </swiper-slide>
      </div>

      <div class="swiper-button-prev" slot="button-prev"></div>
      <div class="swiper-button-next" slot="button-next"></div>
    </swiper>
    <hr class="carousel-container__separator" />
  </div>
</template>

<script>
import Item from "./Item.vue";
import { Swiper, SwiperSlide } from "vue-awesome-swiper";
import "swiper/swiper-bundle.min.css";

export default {
  name: "swiper-example-pagination-progress",
  title: "Progress pagination",
  components: {
    Item,
    Swiper,
    SwiperSlide
  },
  data() {
    return {
      swiperOption: {
        slidesPerView: 7,
        spaceBetween: 30,
        loop: true,
        navigation: {
          nextEl: ".swiper-button-next",
          prevEl: ".swiper-button-prev"
        }
      }
    };
  },
  props: {
    mediaItems: {
      type: Array,
      default: () => []
    },
    sliderHeading: String
  }
};
</script>

我自己尝试使用swiper.js应用程序接口也得到了同样的结果:

代码语言:javascript
代码运行次数:0
复制
<template>
  <div class="carousel-container wow fadeIn" data-wow-duration="3s">
    <div ref="slider" class="swiper-container">
      <h2 class="swiper-container__title">{{ sliderHeading }}</h2>

      <!-- Loops through item data and creates a carousel item -->
      <div class="swiper-wrapper">
        <div v-for="item in mediaItems" :key="item.id">
          <item class="swiper-slide" :mediaItem="item"></item>
        </div>
      </div>

      <div ref="nextEl" class="swiper-button-prev"></div>
      <div ref="prevEl" class="swiper-button-next"></div>
    </div>

    <hr class="carousel-container__separator" />
  </div>
</template>

<script>
import Item from "./Item.vue";
import Swiper from "swiper";

export default {
  components: {
    Item
  },
  props: {
    mediaItems: {
      type: Array,
      default: () => []
    },
    sliderHeading: String
  },
  mounted() {
    this.slider = new Swiper(this.$refs.slider, {
      init: true,
      slidesPerView: 7,
      loop: true,
      spaceBetween: 14,
      observer: true,
      breakpoints: {
        1145: {
          slidesPerView: 5
        },
        699: {
          slidesPerView: 3
        }
      },
      navigation: {
        nextEl: this.$refs.nextEl,
        prevEl: this.$refs.prevEl
      }
    });
  },
  computed: {},
  methods: {},
  data: function() {
    return {
      slider: null
    };
  }
};
</script>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-11 23:40:54

不必要的div包装器

vue-aweomse-swiper希望swiper-slide是直接的后代,因此删除div包装器;并将v-forkey属性转移到swiper-slide

代码语言:javascript
代码运行次数:0
复制
<!-- BEFORE -->
<swiper>
  <div v-for="item in mediaItems" :key="item.id">
    <swiper-slide>
      ...
    </swiper-slide>
  </div>
</swiper>
代码语言:javascript
代码运行次数:0
复制
<!-- AFTER -->
<swiper>
  <swiper-slide v-for="item in mediaItems" :key="item.id">
    ...
  </swiper-slide>
</swiper>

过时的插槽语法

在Vue 2.6.0中,slot syntax已更改,因此slot="slotName"现在是v-slot:slotName,必须将其应用于<template>

代码语言:javascript
代码运行次数:0
复制
<!-- BEFORE -->
<div class="swiper-button-prev" slot="button-prev"></div>
<div class="swiper-button-next" slot="button-next"></div>
代码语言:javascript
代码运行次数:0
复制
<!-- AFTER -->
<template v-slot:button-prev>
  <div class="swiper-button-prev"></div>
</template>
<template v-slot:button-next>
  <div class="swiper-button-next"></div>
</template>

缺少下一步/上一步按钮处理程序

next/prev按钮没有click-event处理程序,因此它们什么也不做。您可以向vue-awesome-swiper元素添加一个模板引用,并获取其swiperInstance属性以获取活动的swiper实例。然后,对next和prev按钮分别使用swiper.slideNext()swiper.slidePrev()

代码语言:javascript
代码运行次数:0
复制
<swiper ref="swiper">
  <template v-slot:button-prev>
    <div class="swiper-button-prev"
         @click="$refs.swiper.swiperInstance.slidePrev()"></div>
  </template>
  <template v-slot:button-next>
    <div class="swiper-button-next"
         @click="$refs.swiper.swiperInstance.slideNext()"></div>
  </template>
</swiper>

demo

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67944106

复制
相关文章
如何在JavaScript中实现某个方法执行超时后则继续执行其它方法?
异想天开,想用 setTimeout 来做个 workaround ,但是 setTimeout / setInterval 方法是在它所在的方法执行完之后才开始计时的,于是,光当一声,这个 workaround 不成立。
阿敏总司令
2019/02/28
1.9K0
mysql技巧:如果记录存在则更新/如果不存在则插入的三种处理方法
新增一个员工时,如果该员工已存在(以员工号f_emp_code作为判断依据),则更新,否则插入。而且工资f_salary,更新时,不得低于原工资(即:工资只能涨,不能降)。
菩提树下的杨过
2018/12/21
9.3K0
继续学习Shell脚本(详细)
只需要在一个定义过的变量前面加上美元符号 $ 就可以了, 另外,对于变量的{} 是可以选择的, 它的目的为帮助解释器识别变量的边界.
心跳包
2020/08/31
6340
继续学习Shell脚本(详细)
如果AIGC继续发展,你相信哪个世界?
今年以来,由游戏设计师杰森·艾伦使用AI绘图工具Midjourney绘制的作品《太空歌剧院》夺下了美国科罗拉多博览会的年度艺术比赛的首奖,引起艺术家和社交媒体的热议,也让AIGC(人工智能自动生成内容)概念成为AI界年度热词,并掀起了一股AIGC投资热潮。AIGC真如外界所宣传的那般美好吗?其背后的创新创业生态将如何构建?
用户9861443
2022/12/07
5870
如果AIGC继续发展,你相信哪个世界?
执行接口脚本
4、执行接口脚本,此接口不能做为正常接口使用,只是一个最简单的连接接口,大家不要被迷祸
用户1168904
2021/05/17
8140
Python异常处理 -跳过异常继续执行
当循环中出现异常时,如何跳过循环中的异常继续执行,下面是一种可行的方法: import pandas as pd dates=range(20161010,20161114) pieces=[] for date in dates: try: data=pd.read_csv('A_stock/overview-push-%d/stock overview.csv' %date, encoding='gbk') pieces.append(data) exce
py3study
2020/01/06
3.3K0
Blockly脚本执行
Blockly应用程序需要将积木转换为代码来执行。添加积木JSON定义后,需转到generators/目录并选择与您要生成的语言( JavaScript, Python, PHP, Lua, Dart等)相对应的子目录,编写积木执行代码。
用户7741497
2022/03/11
1.5K0
apisix 如何拦截插件继续往下执行
    core.log.warn("plugin rewrite phase, conf: ", core.json.encode(conf))
空盒子里的巧克力糖
2022/12/02
5220
Unix\Linux 执行 shell 报错:“$'\r': 未找到命令” 的解决办法
大多数原因是因为 shell 脚本是在 Windows 编写导致的换行问题,具体原因是 Windows 的换行符号为 CRLF(\r\n),而 Unix\Linux 为 LF(\n)。
叨叨软件测试
2021/06/16
4.7K0
Unix\Linux 执行 shell 报错:“$'\r': 未找到命令” 的解决办法
命令执行之绕过防火墙继续执行命令
我们在实战中经常会遇到命令执行漏洞,而由于现在各类waf横行,就会导致我们在执行一些命令时直接被waf拦截,比如执行cat /etc/passwd的时候,直接被拦截了关键字,导致我们无法成功执行。类似于下图这种。
鸿鹄实验室
2021/04/15
1.4K0
命令执行之绕过防火墙继续执行命令
定时执行php脚本
第一个方法是最常见的, 如果php服务器上没有权限去crontab, 也可以找一个自己的机器定期crontab去请求服务器
IT工作者
2022/04/23
2.6K0
maven执行单元测试失败后继续
最近在进行sonarqube与maven集成时,如果pom文件配置了sonarqube相关配置,那么在pom文件所在目录执行
johnhuster的分享
2022/03/28
1.8K0
crontab执行expect脚本
通过rsync的ssh差异备份方式同步本地目录到远端目录,expect代码如下,命令行手动执行即可
拓荒者
2019/07/01
2.2K0
postman脚本执行顺序
单一请求中,我们可以设置pre-request, test两个脚本。 其执行顺序如下图所示:
跑马溜溜的球
2020/12/07
1.5K0
postman脚本执行顺序
python查找页面元素脚本
import urllib.request def gethtml(url='http://www.baidu.com'):
用户5760343
2022/05/14
1.2K0
[PHP] PHP的脚本执行
PHP的脚本执行: PHP的脚本执行还是会经过编译环节, 只不过它们一般会在运行的时候实时进行编译 1.启动PHP及Zend引擎, 加载注册的扩展模块 2.读取脚本文件,Zend引擎对脚本文件进行词法分析,语法分析。 3.编译成opcode执行 4.如果安装opcode缓存扩展(如APC, xcache, eAccelerator等),可能直接从缓存中读取opcode执行
唯一Chat
2019/09/10
1.7K0
MongoDB执行JS脚本
郭顺发
2023/07/06
7670
mongodb执行js脚本(一)---shell执行
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q383965374/article/details/46414115
拓荒者
2019/06/16
9.4K0
Java执行脚本
特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!
收心
2022/01/14
6130
动态执行脚本
提到动态执行脚本,大家想到的肯定是 eval 或 new Function(),在 nodejs 中有专属的 vm 模块,可以完成相应的 sandbox 作用。
奋飛
2020/05/28
3.5K0

相似问题

响应useEffect清理

13

获取数据后的reactjs useEffect清理功能

23

react useEffect未清理事件侦听器

248

如何清理useEffect函数?

14

useEffect清理/内存泄漏

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文