swiper 会出现两个 swiper-item来回不断切换的问题
重现方法,在两个swiper-item 之间快速来回切换几次,就会出现两个swiper-item 这间不断切换的问题,停都停不下来
swiper-item item大概在几十个这样子
10 回复
这里的原因是这样:事件回调函数是在独立的js线程中单独执行的,有一定的延迟,所以快速划动的时候,比如从A划动到B再快速滑动到C,划动到B的change事件里的setData,可能在划动到C之后才被应用,导致swiper又回到B,循环往复。
解决的方法是调整change事件里的setData策略。
setCurrentPages: function (current){ var pages = this .data.pages; for ( var i = 0; i < pages.length; i++) { pages[i].show = false ; } var pageIndexs = new Array(); var totalPage = pages.length; if (current == 0){ pageIndexs.push(0); pageIndexs.push(1); } else if (current==totalPage-1){ pageIndexs.push(current-1); pageIndexs.push(current); } else { pageIndexs.push(current - 1); pageIndexs.push(current); pageIndexs.push(current+1); } for ( var i = 0; i < pages.length; i++) { var page = pages[i]; page.show = false ; } for ( var i = 0; i < pageIndexs.length; i++) { var page = pages[pageIndexs[i]]; page.imgUri = page.imgUri.replace( "\[i\]" , "" ); page.show = true ; } this .setData({ bookId: this .data.bookId, pages: this .data.pages, status: 2, current: current }) }, getIndexByPageNo(pages, pageNo){ if (!pageNo){ return 0; } for ( var i=0;i<pages.length;i++){ if (pages[i].pageNo == pageNo){ return i; } } }, currentChange: function (e){ console.log( "current change" + e.detail.current); this .setCurrentPages(e.detail.current); } |
有 setData ,但 current 用的还是当前的值,这里的逻辑是把当前页的上一页和下一页的 show值设为true,
正常拖动不会有问题,就是前后来回快速拖几次之后就会出现,如果需要我可以提供全部的代码