vue 组件中使用 transition 和 transition-group实现过渡动画

2020-06-13 10:40:25易采站长站整理

// 初始态
beforeEnter(dom) {
dom.classList.add('list-enter', 'list-enter-active');
},
// 中间态
enter(dom,done) {
// 通过 setTimeout + dataset 实现过渡
let delay = dom.dataset.delay;
setTimeout(function () {
dom.classList.remove('list-enter');
dom.classList.add('list-enter-to');
//监听 transitionend 事件
var transitionend = window.ontransitionend ? "transitionend" : "webkitTransitionEnd";
dom.addEventListener(transitionend, function onEnd() {
// 移除事件
dom.removeEventListener(transitionend, onEnd);
//调用done(),表示动画已完成
done()
});
}, delay)
},
// 终止态
afterEnter(dom) {
dom.classList.remove('list-enter-to', 'list-enter-active');
}
}

js 钩子过渡动画: 通过操作行内属性, 自定义动画


<ul class="list">
<transition-group
v-bind:css="false"
v-on:before-enter="beforeEnter"
v-on:enter="enter"
v-on:after-enter="afterEnter">
<li v-for="(item, index) in gameList"
:key="item.id"
:data-delay="index*100"
data-y = "100%"
>
<app-horizontal :itemData="item"></app-horizontal>
</li>
</transition-group>
</ul>
// 对应的操作方法; 添加自定义的 dataset,给dom设置css样式;根据需求添加
methods: {
// 初始态
beforeEnter(dom) {
let { x = 0, y = 0, opacity = 0 } = dom.dataset;
dom.style.cssText = `transition: .3s;opacity: ${opacity};transform: translateX(${x}) translateY(${y});`;
},
// 中间态
enter(dom,done) {
let delay = dom.dataset.delay;
setTimeout(function () {
dom.style.cssText = `transition: .3s;opacity: 1;transform: translateX(0) translateY(0);`;
//监听 transitionend 事件
var transitionend = window.ontransitionend ? "transitionend" : "webkitTransitionEnd";
dom.addEventListener(transitionend, function onEnd() {
dom.removeEventListener(transitionend, onEnd);
done();
});
}, delay)
},
// 终止态
afterEnter(dom) {
dom.style.cssText = "";
}
}

这里记录一下监听css3的animation动画和transition事件:


webkit-animation动画有三个事件:
开始事件: webkitAnimationStart
结束事件: webkitAnimationEnd
重复运动事件: webkitAnimationIteration
css3的过渡属性transition: 一个事件
过渡结束: webkitTransitionEnd

总结

以上所述是小编给大家介绍的vue 组件中使用 transition 和 transition-group实现过渡动画 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对软件开发网网站的支持!