因为会点前端 到新公司之后 前端太忙 抽不出时间处理页面 所以索性就自己写了
但新公司的前端代码和以前写过的还不太一样 是直接引入的vue.js文件 而不是采用的npm创建的Vue项目 有点像以前使用jQuery的那种感觉
页面功能是 要使用 swiper(https://www.swiper.com.cn/) 这个滑动组件做一些图片的滑动处理 在使用这个组件的过程中碰到了js对象的创建先后时间点 会影响对象功能的正常使用的问题
下面上代码
<!-- 弹框区 -->
<el-dialog
title=""
:visible.sync="isShow"
width="500"
center>
<!-- 滑块 -->
<div class="swiper-container gallery-top">
<div class="swiper-wrapper">
<div class="swiper-slide">111</div>
<div class="swiper-slide">222</div>
<div class="swiper-slide">333</div>
<div class="swiper-slide">444</div>
</div>
<!-- Add Arrows -->
<div class="swiper-button-next"></div>
<div class="swiper-button-prev"></div>
</div>
</el-dialog>
<script type="text/javascript">
// vue的某个method
showInfo(e) {
this.isShow = true;
// 之前不生效的写法
this.galleryTop = new Swiper('.gallery-top', {
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
// 效果正常的
setTimeout(() => {
this.galleryTop = new Swiper('.gallery-top', {
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
})
},
</script>
项目中使用的elementUI 有个弹框 (虽然elementui也有滑块组件 但满足不了需求)在弹框里 有个图片的滑块 点击页面上的某个按钮显示这个弹框。
最开始是点击按钮调用showInfo方法,然后直接 new Swiper对象,出现的结果就是CSS样式确实生效了 但swiper的前一个后一个按钮点击没反应
一开始以为是文件内引入的其他js文件造成的影响,排除其他js之后 发现还是无效 又以为是自己的用法有问题 就从官网上下载了demo 对比了一下也没发现问题
再之后 就在页面上copy了另一个不在弹框中的滑块作为对照 看是否是项目中引入的swiper版本有问题,测试之后发现 不在弹框中的滑块可以正常使用,并非版本问题
排除掉上面所有问题之后,我就只能在自己的写法上找问题了 就想到了会不会跟数据还没拿到或弹框的DOM节点未生成,而swiper对象就已经完成了初始化 找不到可以用于滑块的内容有关
于是就再次尝试用settimeout 让swiper对象的初始化往后靠,等待DOM节点的创建,结果就正常了。
这个问题困扰了有一个多小时时间,趁着印象还算深刻 记录一下
浙公网安备 33010602011771号