You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

231 lines
5.0 KiB

<template>
<div class="transition_test">
<h2>过渡效果</h2>
<button @click="show = !show">click</button>
<!-- <transition name="slide-fade">
<div v-if="show" class="circle"></div>
</transition> -->
<div>
图片放大效果:
<transition name="img-fade">
<img
class="bigimg"
v-if="show"
src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg"
alt=""
/>
</transition>
</div>
<div class="shop_cart">
加入购物车动画(css实现):
<div class="add">
<button @click="addShopCart">add</button>
<transition name="shop_cart">
<img
class="add_img"
v-if="addShow"
src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg"
alt=""
/>
</transition>
</div>
<div class="cart">
<img src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg" alt="" />
</div>
</div>
<div class="shop_cart">
加入购物车动画(JavaScript钩子函数实现):
<div class="add">
<button @click="addShopCart1">add</button>
<transition v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:after-enter="afterEnter">
<img
class="add_img_js"
v-if="addShow1"
src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg"
alt=""
/>
</transition>
</div>
<div class="cart">
<img src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg" alt="" />
</div>
</div>
<!-- 动画数组效果 -->
<ul class="group_list">
<button @click="addItem">addItem</button>
<button @click="removeItem">removeItem</button>
<transition-group name="list">
<li class="group_item" v-for="item in list" :key="item">{{ item }}</li>
</transition-group>
</ul>
</div>
</template>
<script>
export default {
name: 'myTransition',
components: {},
data() {
return {
show: false,
addShow: false,
addShow1: false,
list: [1, 2, 3],
};
},
created() {},
methods: {
addShopCart() {
this.addShow = true;
setTimeout(() => {
this.addShow = false;
}, 1000);
},
addShopCart1() {
this.addShow1 = true;
},
// 动画钩子函数
// 进入前状态
beforeEnter(el) {
el.style.left = '-20px';
el.style.top = '-15px';
el.style.transform = 'scale(1)';
},
// 进入中
enter(el, done) {
// 需要调用元素的offset操作,才有过渡的效果,否则会马上实现过渡
el.offsetWidth;
el.style.left = '600px';
el.style.top = '-160px';
el.style.transform = 'scale(.5)';
done();
},
// 进入后
afterEnter() {
this.addShow1 = false;
},
// 新增
addItem() {
this.list.push(this.list.length + 1);
},
// 删除
removeItem() {
if (this.list.length > 1) {
this.list.pop();
}
},
},
};
</script>
<style scoped>
.transition_test {
text-align: left;
padding-bottom: 300px;
}
.circle {
width: 100px;
height: 100px;
border-radius: 50%;
background-color: aquamarine;
}
.slide-fade-enter-active,
.slide-fade-leave-active {
transition: all 0.5s ease-out;
}
.slide-fade-enter,
.slide-fade-leave-to {
/* transform: translateX(500px); */
opacity: 0;
}
.bigimg {
width: 300px;
}
.img-fade-enter-active {
transition: all 1s ease-out;
}
.img-fade-enter {
transform: scale(0.5);
/* width: 50px; */
}
.shop_cart {
padding: 20px;
}
.shop_cart .add {
position: relative;
margin-top: 100px;
width: 500px;
display: inline-block;
}
.shop_cart .add button {
position: absolute;
z-index: 99;
}
.shop_cart .cart {
width: 300px;
display: inline-block;
}
.shop_cart .cart img {
width: 100%;
}
.shop_cart .add_img {
width: 100px;
position: absolute;
left: 600px;
top: -160px;
}
/* 动画效果实现 */
/* @keyframes bounce-in {
0% {
transform: scale(1);
transform: translate(-610px, 100px);
}
100% {
transform: scale(.5);
transform: translate(0px, 0px);
}
}
.shop_cart-enter-active {
animation: bounce-in 1s;
} */
/* CSS类名实现 */
.shop_cart-enter-active {
transition: all 1s ease-out;
}
.shop_cart-enter {
opacity: 0;
transform: scale(0.5);
transform: translate(-610px, 100px);
}
.shop_cart .add_img_js {
width: 100px;
position: absolute;
left: 600px;
top: -160px;
transition: all 1s;
}
.group_list {
padding: 30px;
}
.group_list .group_item {
width: 200px;
height: 100px;
border: 1px solid orangered;
margin: 10px;
}
.list-enter-active,
.list-leave-active {
transition: all 0.8s;
}
.list-enter,
.list-leave-to {
opacity: 0;
transform: translateX(40px);
}
</style>