Browse Source

Tabs: scroll to active tab (#12948)

* Tabs: fix not scrolling to active tab

* update tabs.vue
hetech 6 years ago
parent
commit
80410b4487
2 changed files with 8 additions and 7 deletions
  1. 4 5
      packages/tabs/src/tab-nav.vue
  2. 4 2
      packages/tabs/src/tabs.vue

+ 4 - 5
packages/tabs/src/tab-nav.vue

@@ -87,7 +87,7 @@
         const navScroll = this.$refs.navScroll;
         const activeTabBounding = activeTab.getBoundingClientRect();
         const navScrollBounding = navScroll.getBoundingClientRect();
-        const navBounding = nav.getBoundingClientRect();
+        const maxOffset = nav.offsetWidth - navScrollBounding.width;
         const currentOffset = this.navOffset;
         let newOffset = currentOffset;
 
@@ -97,10 +97,9 @@
         if (activeTabBounding.right > navScrollBounding.right) {
           newOffset = currentOffset + activeTabBounding.right - navScrollBounding.right;
         }
-        if (navBounding.right < navScrollBounding.right) {
-          newOffset = nav.offsetWidth - navScrollBounding.width;
-        }
-        this.navOffset = Math.max(newOffset, 0);
+
+        newOffset = Math.max(newOffset, 0);
+        this.navOffset = Math.min(newOffset, maxOffset);
       },
       update() {
         if (!this.$refs.nav) return;

+ 4 - 2
packages/tabs/src/tabs.vue

@@ -45,8 +45,10 @@
       },
       currentName(value) {
         if (this.$refs.nav) {
-          this.$nextTick(_ => {
-            this.$refs.nav.scrollToActiveTab();
+          this.$nextTick(() => {
+            this.$refs.nav.$nextTick(_ => {
+              this.$refs.nav.scrollToActiveTab();
+            });
           });
         }
       }