列子1
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>光影扫过文字动效</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background-color: #222;
margin: 0;
font-family: 'Arial', sans-serif;
}
.text-container {
position: relative;
font-size: 5rem;
font-weight: bold;
color: #333;
text-transform: uppercase;
letter-spacing: 3px;
}
.text {
position: relative;
display: inline-block;
}
.light-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.8), transparent);
background-size: 200% 100%;
background-position: -100% 0;
-webkit-background-clip: text;
background-clip: text;
color: transparent;
animation: lightSweep 3s infinite ease-in-out;
}
@keyframes lightSweep {
0% {
background-position: -100% 0;
}
50% {
background-position: 100% 0;
}
100% {
background-position: -100% 0;
}
}
</style>
</head>
<body>
<div class="text-container">
<div class="text">光影扫过效果</div>
<div class="light-overlay">光影扫过效果</div>
</div>
</body>
</html>
例子2
<template>
<div class="wrapperStyle" :style="wrapperStyle" style="text-align:left;">
<!-- <div>{{ item.textName }}</div> -->
<div class="text-container">
<div class="text">{{ item.textName }}</div>
<div class="light-overlay">{{ item.textName }}</div>
</div>
</div>
</template>
<script setup>
const props = defineProps({
item: {
type: Object,
default: {},
},
editOrPreview: {
type: String,
default: "edit",
}
});
const { proxy } = getCurrentInstance();
const wrapperStyle = computed(() => {
return proxy.componentStyle(props.item, props.editOrPreview);
});
const radiantTextStyle = computed(() => {
return {
radiantBackgroundColor:props.item.radiantBackgroundColor || 'transparent',
}
});
</script>
<style lang="scss" scoped>
@import "@/views/lowCode/myMoveable/styles/custom-low-code.scss";
.text-container {
--radiant-background-color: v-bind(radiantTextStyle.radiantBackgroundColor);
position: relative;
}
.text {
position: relative;
display: inline-block;
}
.light-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, var(--radiant-background-color), transparent);
background-size: 200% 100%;
background-position: -100% 0;
-webkit-background-clip: text;
background-clip: text;
color: transparent;
animation: lightSweep 3s infinite ease-in-out;
}
@keyframes lightSweep {
0% {
background-position: -100% 0;
}
50% {
background-position: 100% 0;
}
100% {
background-position: -100% 0;
}
}
</style>