49 lines
1.4 KiB
Vue
49 lines
1.4 KiB
Vue
<script lang="ts">
|
|
import { h, Transition } from 'vue';
|
|
|
|
export default defineNuxtComponent({
|
|
// name: 'MaalTransitionFade',
|
|
props: {
|
|
name: {
|
|
type: String,
|
|
default: 'fade'
|
|
},
|
|
duration: {
|
|
type: Number,
|
|
default: 300
|
|
},
|
|
delay: {
|
|
type: Number,
|
|
default: 200
|
|
}
|
|
},
|
|
setup(props, { slots }) {
|
|
return () => {
|
|
return h(
|
|
Transition,
|
|
{
|
|
name: props.name,
|
|
css: false,
|
|
onBeforeEnter(el: any) {
|
|
el.style.transition = `opacity ${props.duration}ms ${props.delay}ms ease;`;
|
|
el.style.opacity = 0;
|
|
},
|
|
onEnter(el: any, done) {
|
|
requestAnimationFrame(() => {
|
|
el.style.opacity = 1;
|
|
done();
|
|
});
|
|
},
|
|
onLeave(el: any, done) {
|
|
el.style.transition = `opacity ${props.duration}ms ${props.delay}ms ease;`;
|
|
el.style.opacity = 0;
|
|
setTimeout(done, props.duration);
|
|
}
|
|
},
|
|
slots.default
|
|
);
|
|
};
|
|
}
|
|
});
|
|
</script>
|