Vue 实现的精彩动画效果

在 Vue 开发中,我们可以利用<transition>组件来打造各种令人惊艳的动画效果。下面来详细看看这些有趣的动画效果及其实现代码。

一、缩放类效果

  1. zoom-in(整体放大进入)
html 复制代码
<template>
  <div>
    <button @click="isShow =! isShow">显示/隐藏</button>
    <transition name="zoom-in">
      <h1 v-show="isShow">你好啊</h1>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'Test',
  data() {
    return {
      isShow: true,
    };
  },
};
</script>

<style scoped>
.zoom-in-enter-active {
  animation: zoomIn 0.5s ease;
}

@keyframes zoomIn {
  from {
    transform: scale(0);
  }

  to {
    transform: scale(1);
  }
}
</style>
  1. zoom-in-left(从左侧放大进入)
html 复制代码
<template>
  <div>
    <button @click="isShow =! isShow">显示/隐藏</button>
    <transition name="zoom-in-left">
      <h1 v-show="isShow">你好啊</h1>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'Test',
  data() {
    return {
      isShow: true,
    };
  },
};
</script>

<style scoped>
.zoom-in-left-enter-active {
  animation: zoomInLeft 0.5s ease;
}

@keyframes zoomInLeft {
  from {
    transform: scale(0) translateX(-100%);
  }

  to {
    transform: scale(1) translateX(0);
  }
}
</style>
  1. zoom-in-right(从右侧放大进入)
html 复制代码
<template>
  <div>
    <button @click="isShow =! isShow">显示/隐藏</button>
    <transition name="zoom-in-right">
      <h1 v-show="isShow">你好啊</h1>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'Test',
  data() {
    return {
      isShow: true,
    };
  },
};
</script>

<style scoped>
.zoom-in-right-enter-active {
  animation: zoomInRight 0.5s ease;
}

@keyframes zoomInRight {
  from {
    transform: scale(0) translateX(100%);
  }

  to {
    transform: scale(1) translateX(0);
  }
}
</style>
  1. zoom-in-top(从顶部放大进入)
html 复制代码
<template>
  <div>
    <button @click="isShow =! isShow">显示/隐藏</button>
    <transition name="zoom-in-top">
      <h1 v-show="isShow">你好啊</h1>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'Test',
  data() {
    return {
      isShow: true,
    };
  },
};
</script>

<style scoped>
.zoom-in-top-enter-active {
  animation: zoomInTop 0.5s ease;
}

@keyframes zoomInTop {
  from {
    transform: scale(0) translateY(-100%);
  }

  to {
    transform: scale(1) translateY(0);
  }
}
</style>
  1. zoom-in-bottom(从底部放大进入)
html 复制代码
<template>
  <div>
    <button @click="isShow =! isShow">显示/隐藏</button>
    <transition name="zoom-in-bottom">
      <h1 v-show="isShow">你好啊</h1>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'Test',
  data() {
    return {
      isShow: true,
    };
  },
};
</script>

<style scoped>
.zoom-in-bottom-enter-active {
  animation: zoomInBottom 0.5s ease;
}

@keyframes zoomInBottom {
  from {
    transform: scale(0) translateY(100%);
  }

  to {
    transform: scale(1) translateY(0);
  }
}
</style>
  1. zoom-in-center-x(沿水平中心轴放大进入)
html 复制代码
<template>
  <div>
    <button @click="isShow =! isShow">显示/隐藏</button>
    <transition name="zoom-in-center-x">
      <h1 v-show="isShow">你好啊</h1>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'Test',
  data() {
    return {
      isShow: true,
    };
  },
};
</script>

<style scoped>
.zoom-in-center-x-enter-active {
  animation: zoomInCenterX 0.5s ease;
}

@keyframes zoomInCenterX {
  from {
    transform: scaleX(0);
  }

  to {
    transform: scaleX(1);
  }
}
</style>
  1. zoom-in-center-y(沿垂直中心轴放大进入)
html 复制代码
<template>
  <div>
    <button @click="isShow =! isShow">显示/隐藏</button>
    <transition name="zoom-in-center-y">
      <h1 v-show="isShow">你好啊</h1>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'Test',
  data() {
    return {
      isShow: true,
    };
  },
};
</script>

<style scoped>
.zoom-in-center-y-enter-active {
  animation: zoomInCenterY 0.5s ease;
}

@keyframes zoomInCenterY {
  from {
    transform: scaleY(0);
  }

  to {
    transform: scaleY(1);
  }
}
</style>

二、滑动类效果

  1. slide(普通滑动)
html 复制代码
<template>
  <div>
    <button @click="isShow =! isShow">显示/隐藏</button>
    <transition name="slide">
      <h1 v-show="isShow">你好啊</h1>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'Test',
  data() {
    return {
      isShow: true,
    };
  },
};
</script>

<style scoped>
.slide-enter-active {
  animation: slideIn 0.5s ease;
}

@keyframes slideIn {
  from {
    transform: translateX(-100%);
  }

  to {
    transform: translateX(0);
  }
}
</style>
  1. slide-left(向左滑动)
html 复制代码
<template>
  <div>
    <button @click="isShow =! isShow">显示/隐藏</button>
    <transition name="slide-left">
      <h1 v-show="isShow">你好啊</h1>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'Test',
  data() {
    return {
      isShow: true,
    };
  },
};
</script>

<style scoped>
.slide-left-enter-active {
  animation: slideLeftIn 0.5s ease;
}

@keyframes slideLeftIn {
  from {
    transform: translateX(100%);
  }

  to {
    transform: translateX(0);
  }
}
</style>
  1. 向右滑动(slide-right)
html 复制代码
<template>
	 <div>
	   <button @click="isShow =! isShow">显示/隐藏</button>
	   <transition name="slide-right">
		 <h1 v-show="isShow">你好啊</h1>
	   </transition>
	 </div>
</template>

<script>
export default {
  data() {
    return {
      isShow: false
    };
  }
};
</script>

<style scoped>
.slide-right-enter-active,
.slide-right-leave-active {
  transition: all 0.5s ease;
}

.slide-right-enter,
.slide-right-leave-to {
  transform: translateX(-100%);
}
</style>
  1. 向上滑动(slide-top)
html 复制代码
<template>
	<div>
	  <button @click="isShow =! isShow">显示/隐藏</button>
	  <transition name="slide-top">
			 <h1 v-show="isShow">你好啊</h1>
	  </transition>
	</div>
</template>

<script>
export default {
  data() {
    return {
      isShow: false
    };
  }
};
</script>

<style scoped>
		.slide-top-enter-active,
		.slide-top-leave-active {
		  transition: all 0.5s ease;
		}

		.slide-top-enter,
		.slide-top-leave-to {
		  transform: translateY(-100%);
		}
</style>
  1. 向下滑动(slide-bottom)
html 复制代码
<template>
  <div class="slide-bottom-animation" v-if="showBottom">向下滑动示例</div>
</template>

<script>
export default {
  data() {
    return {
      showBottom: false
    };
  }
};
</script>

<style scoped>
  		.slide-bottom-enter-active,
	  .slide-bottom-leave-active {
	    transition: all 0.5s ease;
	  }
	  
	  .slide-bottom-enter,
	  .slide-bottom-leave-to {
	    transform: translateY(100%);
	  }
	  
</style>

三、淡入淡出效果

html 复制代码
<template>
		 <div>
		   <button @click="isShow =! isShow">显示/隐藏</button>
		   <transition name="fade-animation">
		 		 <h1 v-show="isShow">你好啊</h1>
		   </transition>
		 </div> 
</template>

<script>
export default {
  data() {
    return {
      isShow: true
    };
  }
};
</script>

<style scoped>
.fade-animation-enter-active,
.fade-animation-leave-active {
  transition: opacity 0.5s ease;
}

.fade-animation-enter,
.fade-animation-leave-to {
  opacity: 0;
}
</style>
相关推荐
twins352043 分钟前
解决Vue应用中遇到路由刷新后出现 404 错误
前端·javascript·vue.js
qiyi.sky1 小时前
JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
前端·javascript·vue.js
煸橙干儿~~1 小时前
分析JS Crash(进程崩溃)
java·前端·javascript
安冬的码畜日常1 小时前
【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法
前端·javascript·信息可视化·数据可视化·d3.js·d3比例尺·分段比例尺
杨荧2 小时前
【JAVA开源】基于Vue和SpringBoot的洗衣店订单管理系统
java·开发语言·vue.js·spring boot·spring cloud·开源
l1x1n02 小时前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
昨天;明天。今天。2 小时前
案例-任务清单
前端·javascript·css
Front思2 小时前
vue使用高德地图
javascript·vue.js·ecmascript
zqx_73 小时前
随记 前端框架React的初步认识
前端·react.js·前端框架
惜.己3 小时前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5