最近在写前端,因为人手不足临时加入,前端水平欠佳。
开发过程中用到了vue-awesome-swiper,对于swiper的定义、事件、参数等,基本可以参考 https://www.swiper.com.cn/api/start/new.html 来写。
我今天之所以再重复劳动,是想记录一些他没写的东西。以下是个人测试得到的结论,供参考、防遗忘。
我们的前端,用的是vue。
在下面的示例代码中,我在写 on 事件时,定义函数的写法是:
function_name: ()=>{
// your code
},
而不是一般的:
function_name: function(){
// your code
}
是因为,据说(后面这句是网上查到的):
在最新的swiper中,swiper绑定的事件中,是通过this指向当前swiper对象的。而在事件回调中,我们需要获取vue页面data中的数据,但是此时的this并不指向vue对象。因此,使用es6的箭头函数 ()=> ,使的函数内使用的this指向vue对象。
以下是个人在调试过程中的一些注解(官网有的就尽量不写了):
mySwiperOption:{
initialSlide:53, // 我的业务需求使得我初始化在第53,下标从0开始
loop: false, //禁止循环
observer: true,
observeParents: true,
on:{
/**
* 如果initialSlide=0,页面加载的时候,触发的函数顺序是:created、mounted、init
* 如果initialSlide大于0, 页面加载的时候,触发的函数顺序是:
* created、mounted、slideNextTransitionStart、slideNextTransitionEnd、init
* 我的代码里面定义了几个echarts。当把echarts的初始化放在mounted里面时,
* 即使写了this.$nextTick也还是会报dom不存在的问题。放到此处的init里面,可以了。
*/
init: ()=>{
// your code
// this.$nextTick()将回调延迟到下次 DOM 更新循环之后执行。
// 在修改数据之后立即使用它,然后等待 DOM 更新。
this.$nextTick(() =>
{
this._initTestChart1();
this._initTestChart2();
this._initTestChart3();
this._initTestChart4();
});
},
/**
* next,是当前元素的右边的或下边的元素将要显示。
* 进入start函数的时候,activeIndex已经变成下一个值了。
* 如果把业务逻辑代码放start里面,会导致划拉的时候,swiper的手感要停顿一下。
* 逻辑放end里面,划拉的时候没有顿感,在划完了开始执行逻辑。
*/
slideNextTransitionStart: ()=>{
// alert("slideNextTransitionStart");
// 经测试,initialSlide大于0,页面加载的时候首次触发该函数时,
// this.$refs.mySwiper.$swiper是null
if(this.$refs.weekSwiper.$swiper != null){
// write your code here
}
},
/**
* 一个swiper item划结束了,触发该函数。
*/
slideNextTransitionEnd: ()=>{
// alert("slideNextTransitionEnd");
},
/**
* 元素往左边划(其实手势是,手指往右边划拉),也就是当前元素的左边或上边的元素将显示。
*/
slidePrevTransitionStart: ()=>{
alert("slidePrevTransitionStart");
},
/**
* 元素往左边划(其实手势是,手指往右边划拉),也就是当前元素的左边或上边的元素将显示。
*/
slidePrevTransitionEnd: ()=>{
alert("slidePrevTransitionStart");
},
}
}
【待续】