Skip to content

Commit

Permalink
feat: add basic transition
Browse files Browse the repository at this point in the history
tmp
  • Loading branch information
xiaodemen committed Jan 18, 2022
1 parent 6ed667f commit 383d5b3
Show file tree
Hide file tree
Showing 7 changed files with 321 additions and 3 deletions.
151 changes: 151 additions & 0 deletions packages/veui-theme-dls/components/transition.less
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
@import "../lib.less";

.@{veui-prefix}-transition {
// 渐隐渐现
&-fade-leave-active {
transition-duration: 100ms;
}

&-fade-enter-active {
transition-duration: 200ms;
}

&-fade-leave-active,
&-fade-enter-active {
transition-property: opacity;
transition-timing-function: linear;
}

&-fade-leave-to,
&-fade-enter {
opacity: 0;
}

// 放大渐现,缩小渐隐
&-fade-scale-leave-active {
transition-duration: 100ms;
}

&-fade-scale-enter-active {
transition-duration: 200ms;
}

&-fade-scale-leave-active,
&-fade-scale-enter-active {
transition-property: opacity, transform;
transition-timing-function: linear;
}

&-fade-scale-leave-to,
&-fade-scale-enter {
opacity: 0;
transform: scale3d(0, 0, 1);
}

&-fade-scale-x-leave-active {
transition-duration: 100ms;
}

&-fade-scale-x-enter-active {
transition-duration: 200ms;
}

&-fade-scale-x-leave-active,
&-fade-scale-x-enter-active {
transition-property: opacity, transform;
transition-timing-function: linear;
}

&-fade-scale-x-leave-to,
&-fade-scale-x-enter {
opacity: 0;
transform: scale3d(0, 1, 1);
}

&-fade-scale-y-leave-active {
transition-duration: 100ms;
}

&-fade-scale-y-enter-active {
transition-duration: 200ms;
}

&-fade-scale-y-leave-active,
&-fade-scale-y-enter-active {
transition-property: opacity, transform;
transition-timing-function: linear;
}

&-fade-scale-y-leave-to,
&-fade-scale-y-enter {
opacity: 0;
transform: scale3d(1, 0, 1);
}

// 移入,移出
&-translate-leave-active {
transition-property: transform;
transition-duration: 100ms;
transition-timing-function: ease-in;
}

&-translate-enter-active {
transition-property: transform;
transition-duration: 200ms;
transition-timing-function: ease-out;
}

&-translate-enter {
transform: translate3d(
var(--dls-transition-translate-from-x, 0),
var(--dls-transition-translate-from-y, 0),
0
);
}

&-translate-leave-to {
transform: translate3d(
var(--dls-transition-translate-to-x, 0),
var(--dls-transition-translate-to-y, 0),
0
);
}

&-fade-translate-scale-leave-active {
transition-property: opacity, transform;
transition-duration: 100ms;
}

&-fade-translate-scale-enter-active {
transition-property: opacity, transform;
transition-duration: 200ms;
}

&-fade-translate-scale-enter {
transform: translate3d(
var(--dls-transition-translate-from-x, 0),
var(--dls-transition-translate-from-y, 0),
0
)
scale3d(0, 0, 1);
}

&-fade-translate-scale-leave-to {
transform: translate3d(
var(--dls-transition-translate-to-x, 0),
var(--dls-transition-translate-to-y, 0),
0
)
scale3d(0, 0, 1);
}

&-move {
transition-property: transform;
transition-duration: 200ms;
transform: translate3d(
var(--dls-transition-translate-x, 0),
var(--dls-transition-translate-y, 0),
0
);
}
}
1 change: 1 addition & 0 deletions packages/veui-theme-dls/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,4 +130,5 @@ import './components/time-picker.less'
import './components/toast.less'
import './components/toast-list.less'
import './components/transfer.less'
import './components/transition.less'
import './components/uploader.less'
10 changes: 7 additions & 3 deletions packages/veui/components.json
Original file line number Diff line number Diff line change
Expand Up @@ -249,15 +249,15 @@
},
{
"name": "Form",
"path": "Form/Form.vue"
"path": "Form"
},
{
"name": "Form",
"path": "Form"
"path": "Form/index.js"
},
{
"name": "Form",
"path": "Form/index.js"
"path": "Form/Form.vue"
},
{
"name": "GridColumn",
Expand Down Expand Up @@ -455,6 +455,10 @@
"name": "Transfer",
"path": "Transfer/index.js"
},
{
"name": "Transition",
"path": "Transition.vue"
},
{
"name": "Uploader",
"path": "Uploader/Uploader.vue"
Expand Down
115 changes: 115 additions & 0 deletions packages/veui/demo/cases/Transition.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
<template>
<article class="veui-transition-demo">
<h1><code>&lt;veui-transition&gt;</code></h1>
<section
v-for="(item, idx) in transitions"
:key="idx"
>
<veui-button @click="exist[item] = !exist[item]">{{ item }}</veui-button>
<veui-transition
:name="item"
appear
:style="getStyle(item)"
>
<div
v-if="exist[item]"
class="content"
/>
</veui-transition>
</section>
<section key="99">
<veui-button
@click="
count++
count %= 4
"
>move</veui-button>
<veui-transition
name="move"
appear
:style="getStyle('move')"
>
<div class="content"/>
</veui-transition>
</section>
</article>
</template>

<script>
import { Transition, Button } from 'veui'
const transitions = [
'fade',
'fade-scale',
'fade-scale-x',
'fade-scale-y',
'translate',
'fade-translate-scale'
]
export default {
name: 'demo-transition',
components: {
'veui-transition': Transition,
'veui-button': Button
},
data () {
return {
transitions,
count: 0,
exist: transitions.reduce((acc, val) => {
acc[val] = true
return acc
}, {})
}
},
methods: {
getStyle (item) {
if (item === 'move') {
return {
'--dls-transition-translate-x': `${50 * this.count}px`,
'--dls-transition-translate-y': '0px'
}
}
if (item.includes('translate')) {
return {
'--dls-transition-translate-from-x': '-150px',
'--dls-transition-translate-from-y': '-150px',
'--dls-transition-translate-to-x': '150px',
'--dls-transition-translate-to-y': '-150px'
}
}
if (item.includes('scale-x')) {
return {
'transform-origin': '0 50%'
}
}
if (item.includes('scale-y')) {
return {
'transform-origin': '50% 0'
}
}
}
}
}
</script>

<style lang="less" scoped>
section {
height: 150px;
display: flex;
align-items: center;
}
.content {
background-color: royalblue;
border-radius: 5%;
width: 60px;
height: 60px;
margin-right: 600px;
margin-left: auto;
}
</style>
6 changes: 6 additions & 0 deletions packages/veui/demo/cases/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ import Plugins from './Plugins'
import Cascader from './Cascader'
import ConfigProvider from './ConfigProvider'
import Layout from './Layout'
import Transition from './Transition'

export default [
{
Expand All @@ -75,6 +76,11 @@ export default [
name: 'Alert',
component: Alert
},
{
path: '/transition',
name: 'Transition',
component: Transition
},
{
path: '/alert-box',
name: 'AlertBox',
Expand Down
40 changes: 40 additions & 0 deletions packages/veui/src/components/Transition.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<template>
<transition
:name="realName"
v-bind="$attrs"
>
<slot/>
</transition>
</template>

<script>
import { prefixify } from '../mixins/prefix'
const BUILTIN_TRANSITIONS = [
'fade',
'fade-scale',
'fade-scale-x',
'fade-scale-y',
'translate',
'move',
'fade-translate-scale'
]
export default {
name: 'veui-transition',
inheritAttrs: false,
props: {
name: {
type: String,
validator (val) {
return BUILTIN_TRANSITIONS.indexOf(val) >= 0
}
}
},
computed: {
realName () {
return prefixify(`transition-${this.name}`)
}
}
}
</script>
1 change: 1 addition & 0 deletions packages/veui/src/components/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,5 +74,6 @@ export { default as Toast } from './Toast'
export { default as ToastList } from './ToastList'
export { default as Tooltip } from './Tooltip'
export { default as Transfer } from './Transfer'
export { default as Transition } from './Transition'
export { default as Tree } from './Tree'
export { default as Uploader } from './Uploader'

0 comments on commit 383d5b3

Please sign in to comment.