forked from TALL/check-work
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.
232 lines
5.0 KiB
232 lines
5.0 KiB
5 years ago
|
<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>
|