From cda15ab4129d2a53bed003a3755b82e72b602aee Mon Sep 17 00:00:00 2001 From: hdx Date: Tue, 29 Aug 2023 17:01:03 +0800 Subject: [PATCH] =?UTF-8?q?long-list:=20=E4=BC=98=E5=8C=96tab=E5=B8=83?= =?UTF-8?q?=E5=B1=80=EF=BC=9B=E8=B0=83=E6=95=B4=E8=9B=87=E5=BD=A2=E7=BA=BF?= =?UTF-8?q?=E7=AE=97=E6=B3=95,=E5=90=8C=E6=97=B6=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1webview=E5=92=8Cskyline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/template/long-list/long-list.uvue | 57 ++++++++++--------------- 1 file changed, 23 insertions(+), 34 deletions(-) diff --git a/pages/template/long-list/long-list.uvue b/pages/template/long-list/long-list.uvue index 03d01fac..678346b6 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; } -- GitLab