各个官网常见的元素出现动画
2023-12-14 17:58:54
<template>
<div class="doc">
<!-- 尽量不要使用index做key,要用唯一id,这边是测试数据,因此用的索引-->
<div class="list_div" v-for="item in 10" :key="item" ref="list">
<p>{{ item.toString().padStart(5, "0") }}</p>
</div>
</div>
</template>
<script>
export default {
components: {},
data() {
return {
list: [],
loading: true,
};
},
computed: {},
watch: {},
created() {},
mounted() {
const tags = this.$refs["list"];
// 主要代码,监听元素是否出现
const doc = new IntersectionObserver((e) => {
let time = 0;
e.forEach((item) => {
const { target, isIntersecting } = item;
if (isIntersecting) {
doc.unobserve(target);
target.classList.add("show");
target.style = `background-color:${this.choseRgb()};--time:${time}`;
time += 0.3;
}
});
});
tags.forEach((item) => {
doc.observe(item);
});
},
methods: {
//随机生成背景色
choseRgb() {
// Math.random是生成0-1之间的随机数 *256 的范围就变成0.xx-255.7
// Math.floor 向下取整就变成 0-255
let r = Math.floor(Math.random() * 256);
let g = Math.floor(Math.random() * 256);
let b = Math.floor(Math.random() * 256);
// 拼接返回
return `rgb(${r},${g},${b})`;
},
},
};
</script>
<style scoped>
.list_div {
height: 300px;
width: 600px;
margin: 40px;
transform: translateX(-200px);
// time变量控制动画间隔速度
--time: 0.1;
}
.show {
// transition: transform 0.5s linear;
transition: all 0.5s linear;
transition-delay: calc(var(--time) * 1s);
transform: translateX(0px);
}
</style>
文章来源:https://blog.csdn.net/tjq11111/article/details/134998262
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!