[new feature] Tabs: add animated props to change tabs with animation (#2126)

This commit is contained in:
张敏
2018-11-23 19:51:47 +08:00
committed by neverland
parent 8042e37829
commit d84b13a6cc
15 changed files with 2097 additions and 268 deletions
+198 -153
View File
@@ -10,21 +10,23 @@ exports[`renders demo correctly 1`] = `
</div>
</div>
<div class="van-tabs__content">
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
<div class="van-tabs__track" style="display:none;">
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
</div>
@@ -37,37 +39,39 @@ exports[`renders demo correctly 1`] = `
</div>
</div>
<div class="van-tabs__content">
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
<div class="van-tabs__track" style="display:none;">
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
</div>
@@ -80,17 +84,19 @@ exports[`renders demo correctly 1`] = `
</div>
</div>
<div class="van-tabs__content">
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
<div class="van-tabs__track" style="display:none;">
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
</div>
@@ -103,92 +109,100 @@ exports[`renders demo correctly 1`] = `
</div>
</div>
<div class="van-tabs__content">
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
</div>
<div>
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line" style="border-color:undefined;">
<div class="van-tabs__line"></div>
</div>
</div>
<div class="van-tabs__content">
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
</div>
<div>
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line" style="border-color:undefined;">
<div class="van-tabs__line"></div>
</div>
</div>
<div class="van-tabs__content">
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
</div>
<div>
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line" style="border-color:undefined;">
<div class="van-tabs__line"></div>
</div>
</div>
<div class="van-tabs__content">
<div class="van-tab__pane" style="display:none;">
<!---->
<div>
<div>
<i class="van-icon van-icon-more-o" style="color:undefined;font-size:undefined;">
<!---->
</i>标签
</div>
<div class="van-tabs__track" style="display:none;">
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<div>
</div>
</div>
</div>
<div>
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line" style="border-color:undefined;">
<div class="van-tabs__line"></div>
</div>
</div>
<div class="van-tabs__content">
<div class="van-tabs__track" style="display:none;">
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
</div>
</div>
<div>
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line" style="border-color:undefined;">
<div class="van-tabs__line"></div>
</div>
</div>
<div class="van-tabs__content">
<div class="van-tabs__track" style="display:none;">
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
</div>
</div>
<div>
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line" style="border-color:undefined;">
<div class="van-tabs__line"></div>
</div>
</div>
<div class="van-tabs__content">
<div class="van-tabs__track" style="display:none;">
<div class="van-tab__pane" style="display:none;">
<!---->
<div>
<i class="van-icon van-icon-more-o" style="color:undefined;font-size:undefined;">
<!---->
</i>标签
<div>
<i class="van-icon van-icon-more-o" style="color:undefined;font-size:undefined;">
<!---->
</i>标签
</div>
</div>
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<div>
<div>
<i class="van-icon van-icon-more-o" style="color:undefined;font-size:undefined;">
<!---->
</i>标签
</div>
</div>
</div>
</div>
@@ -203,21 +217,52 @@ exports[`renders demo correctly 1`] = `
</div>
</div>
<div class="van-tabs__content">
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
<div class="van-tabs__track" style="width:0px;transition-duration:0.4s;transform:translateX(0px);display:none;">
<div class="van-tab__pane van-tab__pane--float">
<!---->
<!---->
</div>
<div class="van-tab__pane van-tab__pane--float">
<!---->
<!---->
</div>
<div class="van-tab__pane van-tab__pane--float">
<!---->
<!---->
</div>
<div class="van-tab__pane van-tab__pane--float">
<!---->
<!---->
</div>
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
<div>
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line" style="border-color:undefined;">
<div class="van-tabs__line"></div>
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tabs__content">
<div class="van-tabs__track" style="display:none;">
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
</div>
@@ -1,15 +1,41 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`click to switch tab 1`] = `
exports[`change tabs data 1`] = `
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line">
<div class="van-tabs__line" style="width: 0px;"></div>
<div class="van-tabs__nav van-tabs__nav--line" style="border-color: #f44;">
<div class="van-tabs__line"></div>
</div>
</div>
<div class="van-tabs__content">
<div class="van-tabs__track" style="display: none;">
<div class="van-tab__pane" style="display: none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display: none;">
<!---->
<div><span>title2</span></div>
</div>
<div class="van-tab__pane" style="display: none;">
<!---->
<!---->
</div>
</div>
</div>
</div>
`;
exports[`change tabs data 2`] = `
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line" style="border-color: #f44;">
<div class="van-tabs__line"></div>
<div class="van-tab van-tab--active"><span class="van-ellipsis">
title1
</span></div>
<div class="van-tab"><span class="van-ellipsis">
title2
</span></div>
<div class="van-tab van-tab--disabled"><span class="van-ellipsis">
title3
@@ -17,16 +43,52 @@ exports[`click to switch tab 1`] = `
</div>
</div>
<div class="van-tabs__content">
<div class="van-tab__pane" style="">Text
<!---->
<div class="van-tabs__track" style="display: none;">
<div class="van-tab__pane" style="">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display: none;">
<!---->
<div><span>title2</span></div>
</div>
<div class="van-tab__pane" style="display: none;">
<!---->
<!---->
</div>
</div>
<div class="van-tab__pane" style="display: none;">
<!---->
<!---->
</div>
</div>
`;
exports[`click to switch tab 1`] = `
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line" style="border-color: #f44;">
<div class="van-tabs__line" style="width: 2px; background-color: rgb(255, 68, 68);"></div>
<div class="van-tab van-tab--active"><span class="van-ellipsis">
title1
</span></div>
<div class="van-tab">
<div><span>title2</span></div>
</div>
<div class="van-tab van-tab--disabled"><span class="van-ellipsis">
title3
</span></div>
</div>
<div class="van-tab__pane" style="display: none;">
<!---->
<!---->
</div>
<div class="van-tabs__content">
<div class="van-tabs__track" style="display: none;">
<div class="van-tab__pane" style="width: 0px;">Text
<!---->
</div>
<div class="van-tab__pane" style="display: none; width: 0px;">
<!---->
</div>
<div class="van-tab__pane" style="display: none; width: 0px;">
<!---->
<!---->
</div>
</div>
</div>
</div>
@@ -35,29 +97,31 @@ exports[`click to switch tab 1`] = `
exports[`click to switch tab 2`] = `
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line">
<div class="van-tabs__line" style="width: 0px;"></div>
<div class="van-tabs__nav van-tabs__nav--line" style="border-color: #f44;">
<div class="van-tabs__line" style="width: 2px; background-color: rgb(255, 68, 68);"></div>
<div class="van-tab"><span class="van-ellipsis">
title1
</span></div>
<div class="van-tab van-tab--active"><span class="van-ellipsis">
title2
</span></div>
<div class="van-tab van-tab--active">
<div><span>title2</span></div>
</div>
<div class="van-tab van-tab--disabled"><span class="van-ellipsis">
title3
</span></div>
</div>
</div>
<div class="van-tabs__content">
<div class="van-tab__pane" style="display: none;">Text
<!---->
</div>
<div class="van-tab__pane" style="">Text
<!---->
</div>
<div class="van-tab__pane" style="display: none;">
<!---->
<!---->
<div class="van-tabs__track" style="display: none;">
<div class="van-tab__pane" style="width: 0px; display: none;">Text
<!---->
</div>
<div class="van-tab__pane" style="width: 0px;">
Text
</div>
<div class="van-tab__pane" style="display: none; width: 0px;">
<!---->
<!---->
</div>
</div>
</div>
</div>
@@ -66,30 +130,31 @@ exports[`click to switch tab 2`] = `
exports[`swipe to switch tab 1`] = `
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line">
<div class="van-tabs__line" style="width: 0px;"></div>
<div class="van-tabs__nav van-tabs__nav--line" style="border-color: #f44;">
<div class="van-tabs__line" style="width: 2px; background-color: rgb(255, 68, 68);"></div>
<div class="van-tab van-tab--active"><span class="van-ellipsis">
title1
</span></div>
<div class="van-tab"><span class="van-ellipsis">
title2
</span></div>
<div class="van-tab">
<div><span>title2</span></div>
</div>
<div class="van-tab van-tab--disabled"><span class="van-ellipsis">
title3
</span></div>
</div>
</div>
<div class="van-tabs__content">
<div class="van-tab__pane" style="">Text
<!---->
</div>
<div class="van-tab__pane" style="display: none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display: none;">
<!---->
<!---->
<div class="van-tabs__track" style="display: none;">
<div class="van-tab__pane" style="width: 0px;">Text
<!---->
</div>
<div class="van-tab__pane" style="display: none; width: 0px;">
<!---->
</div>
<div class="van-tab__pane" style="display: none; width: 0px;">
<!---->
<!---->
</div>
</div>
</div>
</div>
@@ -98,29 +163,31 @@ exports[`swipe to switch tab 1`] = `
exports[`swipe to switch tab 2`] = `
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line">
<div class="van-tabs__line" style="width: 0px;"></div>
<div class="van-tabs__nav van-tabs__nav--line" style="border-color: #f44;">
<div class="van-tabs__line" style="width: 2px; background-color: rgb(255, 68, 68);"></div>
<div class="van-tab"><span class="van-ellipsis">
title1
</span></div>
<div class="van-tab van-tab--active"><span class="van-ellipsis">
title2
</span></div>
<div class="van-tab van-tab--active">
<div><span>title2</span></div>
</div>
<div class="van-tab van-tab--disabled"><span class="van-ellipsis">
title3
</span></div>
</div>
</div>
<div class="van-tabs__content">
<div class="van-tab__pane" style="display: none;">Text
<!---->
</div>
<div class="van-tab__pane" style="">Text
<!---->
</div>
<div class="van-tab__pane" style="display: none;">
<!---->
<!---->
<div class="van-tabs__track" style="display: none;">
<div class="van-tab__pane" style="width: 0px; display: none;">Text
<!---->
</div>
<div class="van-tab__pane" style="width: 0px;">
Text
</div>
<div class="van-tab__pane" style="display: none; width: 0px;">
<!---->
<!---->
</div>
</div>
</div>
</div>
@@ -129,29 +196,31 @@ exports[`swipe to switch tab 2`] = `
exports[`swipe to switch tab 3`] = `
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line">
<div class="van-tabs__line" style="width: 0px;"></div>
<div class="van-tabs__nav van-tabs__nav--line" style="border-color: #f44;">
<div class="van-tabs__line" style="width: 2px; background-color: rgb(255, 68, 68);"></div>
<div class="van-tab"><span class="van-ellipsis">
title1
</span></div>
<div class="van-tab van-tab--active"><span class="van-ellipsis">
title2
</span></div>
<div class="van-tab van-tab--active">
<div><span>title2</span></div>
</div>
<div class="van-tab van-tab--disabled"><span class="van-ellipsis">
title3
</span></div>
</div>
</div>
<div class="van-tabs__content">
<div class="van-tab__pane" style="display: none;">Text
<!---->
</div>
<div class="van-tab__pane" style="">Text
<!---->
</div>
<div class="van-tab__pane" style="display: none;">
<!---->
<!---->
<div class="van-tabs__track" style="display: none;">
<div class="van-tab__pane" style="width: 0px; display: none;">Text
<!---->
</div>
<div class="van-tab__pane" style="width: 0px;">
Text
</div>
<div class="van-tab__pane" style="display: none; width: 0px;">
<!---->
<!---->
</div>
</div>
</div>
</div>
@@ -160,29 +229,31 @@ exports[`swipe to switch tab 3`] = `
exports[`swipe to switch tab 4`] = `
<div class="van-tabs van-tabs--line">
<div class="van-tabs__wrap van-hairline--top-bottom">
<div class="van-tabs__nav van-tabs__nav--line">
<div class="van-tabs__line" style="width: 0px;"></div>
<div class="van-tabs__nav van-tabs__nav--line" style="border-color: #f44;">
<div class="van-tabs__line" style="width: 2px; background-color: rgb(255, 68, 68);"></div>
<div class="van-tab van-tab--active"><span class="van-ellipsis">
title1
</span></div>
<div class="van-tab"><span class="van-ellipsis">
title2
</span></div>
<div class="van-tab">
<div><span>title2</span></div>
</div>
<div class="van-tab van-tab--disabled"><span class="van-ellipsis">
title3
</span></div>
</div>
</div>
<div class="van-tabs__content">
<div class="van-tab__pane" style="">Text
<!---->
</div>
<div class="van-tab__pane" style="display: none;">Text
<!---->
</div>
<div class="van-tab__pane" style="display: none;">
<!---->
<!---->
<div class="van-tabs__track" style="display: none;">
<div class="van-tab__pane" style="width: 0px;">Text
<!---->
</div>
<div class="van-tab__pane" style="width: 0px; display: none;">
Text
</div>
<div class="van-tab__pane" style="display: none; width: 0px;">
<!---->
<!---->
</div>
</div>
</div>
</div>
+37 -3
View File
@@ -5,9 +5,18 @@ import { mount, later, triggerDrag } from '../../../test/utils';
function createWrapper(options) {
return mount({
template: `
<tabs @change="onChange" swipeable>
<tab title="title1">Text</tab>
<tab title="title2">Text</tab>
<tabs @change="onChange"
:color="color"
:type="type"
:swipeable="swipeable"
:sticky="sticky"
:line-width="lineWidth"
>
<tab :title="title1">Text</tab>
<tab>
<span slot="title">title2</span>
Text
</tab>
<tab title="title3" disabled>Text</tab>
</tabs>
`,
@@ -15,6 +24,16 @@ function createWrapper(options) {
Tab,
Tabs
},
data() {
return {
title1: 'title1',
color: '#f44',
type: 'line',
swipeable: true,
sticky: true,
lineWidth: 2
};
},
...options
});
}
@@ -61,3 +80,18 @@ test('swipe to switch tab', async() => {
await later();
wrapper.destroy();
});
test('change tabs data', async() => {
const wrapper = createWrapper();
expect(wrapper).toMatchSnapshot();
wrapper.setData({
swipeable: false,
sticky: false,
type: 'card',
color: 'blue',
title1: 'new title1'
});
expect(wrapper).toMatchSnapshot();
});