1. Vue中的图片动画
在Vue中实现图片动画需要用到Vue提供的transition组件。transition组件可以包裹任何DOM元素,并添加进入和离开过渡的效果。
1.1 transition组件属性
transition组件有以下属性:
name: 组件的名字,可用于CSS选择器来定义过渡的样式
mode: 过渡模式,可以是in-out、out-in、default
appear: 是否在初始渲染时执行过渡,默认为false
css: 是否使用CSS过渡效果,默认为true
type: 过渡方式,可以是transition或animation,默认为transition
duration: 过渡时间,单位为毫秒,默认为300
1.2 示例代码
以下是一个简单的例子,当按钮被点击时,图片会出现下落动画:
// HTML
<div id="app">
<button @click="show = !show">Toggle</button>
<transition name="drop">
<img v-show="show" src="img.png">
</transition>
</div>
// CSS
.drop-enter, .drop-leave-to {
transform: translateY(-100%);
opacity: 0;
transition: all 0.5s ease;
}
.drop-enter-to, .drop-leave {
transform: translateY(0);
opacity: 1;
}
在HTML中,将按钮和图片都包裹在transition组件内,在CSS中,定义动画效果,.drop-enter和.drop-leave-to表示进入和离开时的状态,.drop-enter-to和.drop-leave表示进入和离开完成后的状态,通过transform和opacity属性来实现下落动画。
以上代码运行结果如下:
.drop-enter, .drop-leave-to {
transform: translateY(-100%);
opacity: 0;
transition: all 0.5s ease;
}
.drop-enter-to, .drop-leave {
transform: translateY(0);
opacity: 1;
}
new Vue({
el: "#app",
data: {
show: true
}
});
2. Vue中的图片渐变效果
在Vue中实现图片渐变效果需要用到Vue提供的过渡CSS类名以及其他一些CSS属性。这里我们以淡入淡出效果为例。
2.1 图片淡入淡出的CSS代码
要实现图片的淡入淡出效果,我们需要在CSS中定义以下样式:
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
上面代码中,.fade-enter-active和.fade-leave-active是过渡状态,.fade-enter和.fade-leave-to是开始和结束状态,通过opacity属性实现渐变效果。
2.2 示例代码
以下是一个简单的例子,当按钮被点击时,图片会淡入淡出切换:
// HTML
<div id="app">
<button @click="index = (index + 1) % images.length">Toggle</button>
<transition name="fade">
<img :src="images[index]">
</transition>
</div>
// CSS
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
在HTML中,定义了一个图片轮播效果,每次点击按钮时,index会被更新,对应的图片会切换,用transition组件包裹图片,并设置name属性为fade,表示使用fade相关的CSS样式,在CSS中定义了fade的过渡效果。
以上代码运行结果如下:
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
new Vue({
el: "#app2",
data: {
index: 0,
images: [
"https://picsum.photos/200/300",
"https://picsum.photos/201/301",
"https://picsum.photos/202/302",
"https://picsum.photos/203/303"
]
}
});