diff --git a/pages/template/long-list/long-list.uvue b/pages/template/long-list/long-list.uvue index 03d01faca05b52c75de8b4d8e9cec30ddf999278..678346b604a4f3c95d4adfbdbfdb829900f17eb6 100644 --- a/pages/template/long-list/long-list.uvue +++ b/pages/template/long-list/long-list.uvue @@ -7,11 +7,10 @@ - - {{item.name}} - + + {{item.name}} + - + @@ -74,10 +73,9 @@ swiperIndicatorLineLeft: 0, swiperIndicatorLineWidth: 0, $headerHeight: 0, - $lastSwiperIndex: 0, + $animationFinishIndex: 0, $swiperWidth: 0, - $swiperTabsRect: [] as SwiperTabsItem[], - $isTap: false + $swiperTabsRect: [] as SwiperTabsItem[] } }, onReady() { @@ -90,18 +88,18 @@ onTabClick(index : number) { this.setSwiperIndex(index, false) }, - onSwiperChange(e : SwiperChangeEvent) { - this.setSwiperIndex(e.detail.current, false) - }, onSwiperTransition(e : SwiperTransitionEvent) { const offsetX = e.detail.dx + // 兼容微信 skyline 和 webview + const offsetIndex = Math.abs(offsetX.toInt()) == this.$swiperWidth ? 0 : offsetX / this.$swiperWidth + const currentIndex = this.$animationFinishIndex + Math.abs(offsetIndex.toInt()) - let moveToIndex = offsetX > 0 ? this.$lastSwiperIndex + 1 : this.$lastSwiperIndex - 1 + let moveToIndex = offsetX > 0 ? currentIndex + 1 : currentIndex - 1 if (moveToIndex < 0) { moveToIndex = 0 } if (moveToIndex > this.$swiperTabsRect.length - 1) { moveToIndex = this.$swiperTabsRect.length - 1 } const percentage = Math.abs(offsetX) / this.$swiperWidth - const currentSize = this.$swiperTabsRect[this.$lastSwiperIndex] + const currentSize = this.$swiperTabsRect[currentIndex] const moveToSize = this.$swiperTabsRect[moveToIndex] const indicatorlineL = currentSize.left + (moveToSize.left - currentSize.left) * percentage const indicatorlineW = currentSize.width + (moveToSize.width - currentSize.width) * percentage @@ -109,16 +107,13 @@ this.updateTabIndicator(indicatorlineL, indicatorlineW) this.initSwiperItemPage(moveToIndex) - - //console.log(this.$lastSwiperIndex, moveToIndex, offsetX, this.$swiperWidth, percentage); }, onSwiperAnimationfinish(e : SwiperAnimationFinishEvent) { - // console.log("onSwiperAnimationfinish", e.detail.current); - this.$lastSwiperIndex = e.detail.current this.setSwiperIndex(e.detail.current, true) + this.$animationFinishIndex = e.detail.current }, queryTabItemsSize() { - this.$swiperTabsRect.length = 0; + this.$swiperTabsRect.length = 0 const tabs = this.$refs["swipertab"] as INode[] tabs.forEach((node) => { this.$swiperTabsRect.push({ @@ -139,18 +134,15 @@ this.updateTabIndicator(this.$swiperTabsRect[index].left, this.$swiperTabsRect[index].width) } }, - initSwiperItemPage(index : Number) { - if (!this.swiperList[index].preload) { - this.swiperList[index].preload = true; - (this.$refs["longPage"] as ComponentPublicInstance[])[index].$callMethod('loadData') - } - }, updateTabIndicator(left : Number, width : Number) { this.swiperIndicatorLineLeft = left this.swiperIndicatorLineWidth = width - const offset = left + width / 2 - if (offset > this.$swiperWidth / 2) { - this.tabsScrollLeft = offset - this.$swiperWidth / 2 + this.tabsScrollLeft = left + width / 2 - this.$swiperWidth / 2 + }, + initSwiperItemPage(index : Number) { + if (!this.swiperList[index].preload) { + this.swiperList[index].preload = true; + (this.$refs["longPage"]! as ComponentPublicInstance[])[index].$callMethod('loadData') } } } @@ -180,15 +172,12 @@ } .swiper-tabs-item { - padding: 12px 25px; - } - - .swiper-tabs-item-text { color: #555; font-size: 16px; + padding: 12px 25px; } - .swiper-tabs-item-text-active { + .swiper-tabs-item-active { color: #007AFF; }