Commit fff80ecb012b72b6bdc6761820ba7c729b04407e
Committed by
GitHub
Merge pull request #3665 from SergioCrisostomo/tabs-keyboard
Tabs small fixes
Showing
1 changed file
with
21 additions
and
12 deletions
Show diff stats
src/components/tabs/tabs.vue
... | ... | @@ -133,7 +133,7 @@ |
133 | 133 | ]; |
134 | 134 | }, |
135 | 135 | contentStyle () { |
136 | - const x = this.navList.findIndex((nav) => nav.name === this.activeKey); | |
136 | + const x = this.getTabIndex(this.activeKey); | |
137 | 137 | const p = x === 0 ? '0%' : `-${x}00%`; |
138 | 138 | |
139 | 139 | let style = {}; |
... | ... | @@ -184,7 +184,7 @@ |
184 | 184 | }, |
185 | 185 | updateBar () { |
186 | 186 | this.$nextTick(() => { |
187 | - const index = this.navList.findIndex((nav) => nav.name === this.activeKey); | |
187 | + const index = this.getTabIndex(this.activeKey); | |
188 | 188 | if (!this.$refs.nav) return; // 页面销毁时,这里会报错,为了解决 #2100 |
189 | 189 | const prevTabs = this.$refs.nav.querySelectorAll(`.${prefixCls}-tab`); |
190 | 190 | const tab = prevTabs[index]; |
... | ... | @@ -239,7 +239,7 @@ |
239 | 239 | handleTabKeyboardSelect(init = false){ |
240 | 240 | if (init) return; |
241 | 241 | const focused = this.focusedKey || 0; |
242 | - const index = this.navList.findIndex(({name}) => name === focused); | |
242 | + const index = this.getTabIndex(focused); | |
243 | 243 | this.handleChange(index); |
244 | 244 | }, |
245 | 245 | handleRemove (index) { |
... | ... | @@ -310,6 +310,9 @@ |
310 | 310 | ? Number(navStyle.transform.match(/translateX\(-(\d+(\.\d+)*)px\)/)[1]) |
311 | 311 | : 0; |
312 | 312 | }, |
313 | + getTabIndex(name){ | |
314 | + return this.navList.findIndex(nav => nav.name === name); | |
315 | + }, | |
313 | 316 | setOffset(value) { |
314 | 317 | this.navStyle.transform = `translateX(-${value}px)`; |
315 | 318 | }, |
... | ... | @@ -368,6 +371,18 @@ |
368 | 371 | parentNode = parentNode.parentNode; |
369 | 372 | } |
370 | 373 | return false; |
374 | + }, | |
375 | + updateVisibility(index){ | |
376 | + [...this.$refs.panes.children].forEach((el, i) => { | |
377 | + if (index === i) { | |
378 | + [...el.children].forEach(child => child.style.visibility = 'visible'); | |
379 | + setTimeout(() => focusFirst(el, el), transitionTime); | |
380 | + } else { | |
381 | + setTimeout(() => { | |
382 | + [...el.children].forEach(child => child.style.visibility = 'hidden'); | |
383 | + }, transitionTime); | |
384 | + } | |
385 | + }); | |
371 | 386 | } |
372 | 387 | }, |
373 | 388 | watch: { |
... | ... | @@ -385,15 +400,8 @@ |
385 | 400 | }); |
386 | 401 | |
387 | 402 | // update visibility |
388 | - const nextIndex = Math.max(this.navList.findIndex(tab => tab.name === this.focusedKey), 0); | |
389 | - [...this.$refs.panes.children].forEach((el, i) => { | |
390 | - if (nextIndex === i) { | |
391 | - [...el.children].forEach(child => child.style.visibility = 'visible'); | |
392 | - setTimeout(() => focusFirst(el, el), transitionTime); | |
393 | - } else { | |
394 | - [...el.children].forEach(child => child.style.visibility = 'hidden'); | |
395 | - } | |
396 | - }); | |
403 | + const nextIndex = Math.max(this.getTabIndex(this.focusedKey), 0); | |
404 | + this.updateVisibility(nextIndex); | |
397 | 405 | } |
398 | 406 | }, |
399 | 407 | mounted () { |
... | ... | @@ -414,6 +422,7 @@ |
414 | 422 | } |
415 | 423 | |
416 | 424 | this.handleTabKeyboardSelect(true); |
425 | + this.updateVisibility(this.getTabIndex(this.activeKey)); | |
417 | 426 | }, |
418 | 427 | beforeDestroy() { |
419 | 428 | this.observer.removeListener(this.$refs.navWrap, this.handleResize); | ... | ... |