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;
}