AngularJS 中使用Swiper制作滚动图不能滑动的解决方法

本文介绍了解决AngularJS中Swiper插件滑动异常的问题。通过设置observer和observeParents参数为true,使得Swiper能在AngularJS动态生成元素后自动重新初始化,从而实现正常滑动。

Swiper是目前较为流行的移动端触摸滑动插件,因为其简单好用易上手,受到很多前端开发者的欢迎。这篇文章主要介绍了AngularJS 中使用Swiper制作滚动图不能滑动的解决方法,需要的朋友可以参考下

今天在使用Swiper的时候遇到这个问题:

使用angularjs动态循环生成swiper-slide类,在swiper-wrapper里生成6个以上的滑动页,可是就是划不到第二页,尝试将longSwipesRatio的值修改到最小,仍然不起作用。

?
1
2
3
4
5
6
7
8
<div class= "swiper-wrapper" >
<!-- =======循环部分======= -->
<div class= "swiper-slide" ng-repeat= "result in mediaList" >
//此处为一个滑动页内容
</div>
<!-- ============== -->
</div>
</div>

在测试时发现,手动复制n个循环部分,则可以滑动n个块;手动调节窗口大小,使页面文档发生改变(动态响应)后,可以正常滑动。

于是猜测swiper的机制是:初始化的时候自动扫描swiper-wrapper类下有多少个swiper-slide类块,则允许滑动多少个块。 而在angular始终在swiper初始化之后定义,swiper则无法正确scan有多少个slide(实际上找到一个待循环模板),所以划不动。

找到原因后,只须对症下药。 在查阅Swiper的API时发现,有这样两个参数:observer和observeParents,前者启动动态检查器,当改变swiper的样式(例如隐藏/显示)或者修改swiper的子元素时,自动初始化swiper。后者原理和前者一样,只是将observe应用于Swiper的父元素。两者默认值都为false。 所以在原来的swiper初始化代码中加上这两行即可。

?
1
2
3
4
5
6
7
8
var mySwiper = new Swiper( '.swiper-container' ,{
pagination : '.swiper-pagination' ,
paginationClickable: true ,
longSwipesRatio: 0.3,
touchRatio:1,
observer: true , //修改swiper自己或子元素时,自动初始化swiper
observeParents: true , //修改swiper的父元素时,自动初始化swiper
})


### Vue 中使用 Swiper 实现滚动效果 #### 安装依赖 在 Vue 项目中集成 Swiper 插件前,需先安装 `swiper` 和其样式文件。通过 npm 或 yarn 进行安装: ```bash npm install swiper vue-awesome-swiper --save ``` 或者 ```bash yarn add swiper vue-awesome-swiper ``` 完成安装后,在项目的入口文件(如 main.js)引入 Swiper 的 CSS 文件。 ```javascript import 'swiper/swiper-bundle.css'; ``` --- #### 配置组件 创建一个自定义组件来封装 Swiper 功能。以下是基于 Vue 2.x 版本的示例代码[^2]。 ```vue <template> <div class="swiper-container"> <swiper :options="swiperOptions" ref="mySwiper"> <!-- 轮播项 --> <swiper-slide>Slide 1</swiper-slide> <swiper-slide>Slide 2</swiper-slide> <swiper-slide>Slide 3</swiper-slide> <!-- 分页器 --> <div class="swiper-pagination" slot="pagination"></div> <!-- 滚动条 --> <div class="swiper-scrollbar" slot="scrollbar"></div> </swiper> </div> </template> <script> import { swiper, swiperSlide } from "vue-awesome-swiper"; export default { name: "MySwiper", components: { swiper, swiperSlide, }, data() { return { swiperOptions: { slidesPerView: 1, spaceBetween: 30, loop: true, // 分页器配置 pagination: { el: ".swiper-pagination", clickable: true, // 启用点击分页功能[^1] }, // 滚动条配置 scrollbar: { el: ".swiper-scrollbar", draggable: true, // 启用拖拽滚动条功能 }, }, }; }, }; </script> <style scoped> .swiper-container { width: 100%; height: 100%; } </style> ``` 上述代码实现了基本的轮播功能,并启用了分页器和滚动条的功能。 --- #### 样式调整 如果需要进一步优化样式,可以在 `<style>` 块中添加自定义样式。例如修改分页器的颜色或大小: ```css /* 修改分页器颜色 */ .swiper-pagination-bullet-active { background-color: red; } /* 修改滚动条高度 */ .swiper-scrollbar { height: 5px; bottom: 10px; /* 控制距离底部的距离 */ } ``` --- #### 切换到指定索引 为了实现手动切换到特定索引的功能,可以利用 `$refs.mySwiper.$swiper.slideTo(index)` 方法[^3]。以下是一个按钮触发切换的例子: ```vue <template> <div> <button @click="goToSlide(1)">跳转到第2张</button> <swiper :options="swiperOptions" ref="mySwiper"> <swiper-slide>Slide 1</swiper-slide> <swiper-slide>Slide 2</swiper-slide> <swiper-slide>Slide 3</swiper-slide> </swiper> </div> </template> <script> export default { methods: { goToSlide(index) { this.$refs.mySwiper.$swiper.slideTo(index); }, }, }; </script> ``` 此方法允许开发者灵活控制当前显示的内容。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值