040: Transition animation in vue project to achieve sliding door effect

Insert image description here

No. 040

View column directory: VUE ------ element UI


Column goals

Under the control of the joint technology stack of vue and element UI, this column provides effective source code examples and information point introductions for flexible use.

(1) Provide some basic operations of vue2: installation, reference, template use, computed, watch, life cycle (beforeCreate, created, beforeMount, mounted, beforeUpdate, updated, beforeDestroy, destroyed, activated, deactivated, errorCaptured, components,), $root , $parent , $children , $slots , $refs , props, $emit , eventbus ,provide / inject, Vue.observable, $listeners, $attrs, $nextTick , v-for, v-if, v-else ,v-else-if, v-on, v-pre, v-cloak, v-once, v-model, v-html, v-text, keep-alive, slot-scope, filters, v-bind,. stop, .native, directives, mixin, render, internationalization, Vue Router, etc.

(2) -cascader, el-input-number, el-switch, el-slider, el-time-picker, el-date-picker, el-upload, el-rate, el-color-picker, el-transfer, el-form , el-table, el-tree, el-pagination, el-badge, el-avatar, el-skeleton, el-empty, el-descriptions, el-result, el-statistic, el-alert, v-loading, $ message, $alert, $prompt, $confirm , $notify, el-breadcrumb, el-page-header, el-tabs, el-dropdown, el-steps, el-dialog, el-tooltip, el-popover, el- popconfirm, el-card, el-carousel, el-collapse, el-timeline, el-divider, el-calendar, el-image, el-backtop,v-infinite-scroll, el-drawer等

Application scenarios

In a Vue project, sometimes it is necessary to animate the entry and exit of certain blocks to add interactive features to the project. In Vue, you can use transition to wrap block content and set the entry and exit time and animation state.

Example effect

Insert image description here

Sample source code (168 lines in total)

/*
* @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN)
* @此源代码版权归大剑师兰特所有,可供学习或商业项目中借鉴,未经授权,不得重复地发表到博客、论坛,问答,git等公共空间或网站中。
* @Email: [email protected]
* @weixin: gis-dajianshi
* @First published in CSDN
* @First published time: 2022-09-25
*/
<template>
	<div class="container">
		<div class="top">
			<h3>vue项目中transition动画实现左右区块滑动进入效果</h3>
			<div class="author">大剑师兰特, 还是大剑师兰特,gis-dajianshi</div>
		</div>
		<h4>
			<el-button size="mini" type="primary" @click="goIn"> 滑动进入关门 </el-button>
			<el-button size="mini" type="primary" @click="goOut"> 滑动出去开门 </el-button>
		</h4>
		<transition name="left">
			<div class="leftpart" v-show="isLeft">
				gis-dajianshi
			</div>
		</transition>
		<transition name="right">
			<div class="rightpart" v-show="isRight">
				gis-dajianshi
			</div>
		</transition>

	</div>
</template>
<script>
	export default {
    
    
		data() {
    
    
			return {
    
    
				isLeft: false,
				isRight: false,
			}
		},

		methods: {
    
    
			goIn() {
    
    
				this.isLeft = true;
				this.isRight = true;
			},
			goOut() {
    
    
				this.isLeft = false;
				this.isRight = false;
			},
		},
	}
</script>
<style scoped>
	.container {
    
    
		width: 1000px;
		height: 580px;
		margin: 50px auto;
		border: 1px solid green;
		position: relative;
	}

	.top {
    
    
		margin: 0 auto 130px;
		padding: 10px 0;
		background: peru;
		color: #fff;
	}

	.leftpart,
	.rightpart {
    
    
		width: 350px;
		height: 400px;
		position: absolute;
		bottom: 10px;
		background: lightpink;
		color: #fff;
		line-height: 200px;
	}

	.leftpart {
    
    
		left: 0;
	}

	.rightpart {
    
    
		right: 0;
	}

	.left-enter {
    
    
		animation: left-dialog-fade-in 0.3s ease;
	}

	.left-leave {
    
    
		animation: left-dialog-fade-out 0.6s ease forwards;
	}

	.left-enter-active {
    
    
		animation: left-dialog-fade-in 0.3s ease;
	}

	.left-leave-active {
    
    
		animation: left-dialog-fade-out 0.6s ease forwards;
	}

	.right-enter {
    
    
		animation: right-dialog-fade-in 0.3s ease;
	}

	.right-leave {
    
    
		animation: right-dialog-fade-out 0.6s ease forwards;
	}

	.right-enter-active {
    
    
		animation: right-dialog-fade-in 0.3s ease;
	}

	.right-leave-active {
    
    
		animation: right-dialog-fade-out 0.6s ease forwards;
	}

    @keyframes left-dialog-fade-in {
    
    
		0% {
    
    
			transform: translate3d(-100%, 0, 0);
			opacity: 1;
		}

		100% {
    
    
			transform: translate3d(0, 0, 0);
			opacity: 1;
		}
	}

	@keyframes left-dialog-fade-out {
    
    
		0% {
    
    
			transform: translate3d(0, 0, 0);
			opacity: 1;
		}

		100% {
    
    
			transform: translate3d(-100%, 0, 0);
			opacity: 1;
		}
	}

	@keyframes right-dialog-fade-in {
    
    
		0% {
    
    
			transform: translate3d(100%, 0, 0);
			opacity: 1;
		}

		100% {
    
    
			transform: translate3d(0, 0, 0);
			opacity: 1;
		}
	}

	@keyframes right-dialog-fade-out {
    
    
		0% {
    
    
			transform: translate3d(0, 0, 0);
			opacity: 1;
		}

		100% {
    
    
			transform: translate3d(100%, 0, 0);
			opacity: 1;
		}
	}

</style>

Transition usage implementation steps

  1. Wrap the elements that need to be animated with transition tags
<transition name="left">
	<div class="leftpart" v-show="isLeft">
		gis-dajianshi
	</div>
</transition>
  1. Give this transition tag a name (such as left)
  2. Add entry animation, class class name is "tag name + enter-active"
.left-leave 
.left-enter-active
  1. Define animation effects (@keyframes)

Guess you like

Origin blog.csdn.net/cuclife/article/details/133271871