给大家分享一个基于Vue组件设计的文字悬停特效,实现的效果如下:
这种效果常见于一些Logo文字或是可点击的链接,使得页面看起来更加生动活跃。
1. 组件设计实现
代码语言:javascript复制<template>
<a :class="className" class="link-obj" href="#">
{{ text }}
<span :data-letters="text" />
<span :data-letters="text" />
</a>
</template>
<script>
export default {
name:"TextHoverEffect",
props: {
className: {
type: String,
default: "",
},
text: {
type: String,
default: "后台管理系统",
},
},
};
</script>
<style>
.link-obj {
font-weight: 800;
color: #4dd9d5;
font-family: "Dosis", sans-serif;
-webkit-transition: color 0.5s 0.25s;
transition: color 0.5s 0.25s;
overflow: hidden;
position: relative;
display: inline-block;
line-height: 1;
outline: none;
text-decoration: none;
}
.link-obj:hover {
-webkit-transition: none;
transition: none;
color: transparent;
}
.link-obj::before {
content: "";
width: 100%;
height: 6px;
margin: -3px 0 0 0;
background: #3888fa;
position: absolute;
left: 0;
top: 50%;
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
-webkit-transition: -webkit-transform 0.4s;
transition: transform 0.4s;
-webkit-transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
}
.link-obj:hover::before {
-webkit-transform: translate3d(100%, 0, 0);
transform: translate3d(100%, 0, 0);
}
.link-obj span {
position: absolute;
height: 50%;
width: 100%;
left: 0;
top: 0;
overflow: hidden;
}
.link-obj span::before {
content: attr(data-letters);
color: red;
position: absolute;
left: 0;
width: 100%;
color: #3888fa;
-webkit-transition: -webkit-transform 0.5s;
transition: transform 0.5s;
}
.link-obj span:nth-child(2) {
top: 50%;
}
.link-obj span:first-child::before {
top: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
.link-obj span:nth-child(2)::before {
bottom: 0;
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
}
.link-obj:hover span::before {
-webkit-transition-delay: 0.3s;
transition-delay: 0.3s;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
-webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
}
</style>
2. 组件使用示例
代码语言:javascript复制<template>
<div class="box">
<TextHoverEffect :text="text"></TextHoverEffect>
</div>
</template>
<script>
import TextHoverEffect from "@/components/TextHoverEffect";
export default {
name:"index",
components:{
TextHoverEffect:TextHoverEffect
},
data() {
return {
text:"集团后台管理系统"
};
}
}
</script>
<style scoped>
.box{
width:600px;
margin:20px;
padding:10px;
background:#fff;
}
</style>