vue3如何动态修改css的@keyframes属性?
现在需要动态获取dom列表的高度,该列表是后台返回的数据,数据条数是不固定的。目前设置的动画效果是写死的高度,根据该高度做动画滚动,现在要把该高度改成动态的值。
已经尝试过的方法:roll.value.styleSheets,发现该属性获取不到@keyframes
回答:
要动态修改CSS的@keyframes
属性,可以使用Vue3
提供的<style>
标签以及CSSOM
(CSS Object Model)API。看一个简单的Demo:
<template> <div class="container">
<div ref="list" class="list">
<!-- 动态渲染的列表 -->
</div>
</div>
</template>
<script>
import { ref, onMounted } from 'vue';
export default {
name: 'DynamicAnimation',
setup() {
const list = ref(null);
// 在组件挂载时获取列表高度,并动态修改CSS的@keyframes属性
onMounted(() => {
const listHeight = list.value.offsetHeight;
const sheet = document.styleSheets[0];
const rules = sheet.cssRules || sheet.rules;
for (let i = 0; i < rules.length; i++) {
const rule = rules[i];
if (rule.name === 'scroll-animation') {
const keyframes = rule.cssRules || rule.rules;
for (let j = 0; j < keyframes.length; j++) {
const keyframe = keyframes[j];
if (keyframe.keyText === '0%') {
keyframe.style.transform = `translateY(0)`;
} else if (keyframe.keyText === '100%') {
keyframe.style.transform = `translateY(-${listHeight}px)`;
}
}
}
}
});
return {
list,
};
},
};
</script>
<style>
.list {
animation: scroll-animation 5s infinite linear;
}
@keyframes scroll-animation {
0% {
transform: translateY(0);
}
100% {
transform: translateY(-300px);
}
}
</style>
回答:
使用CSS变量就行,? 使用 CSS 自定义属性(变量) - CSS:层叠样式表 | MDN
具体使用方式可以借鉴这个问答 ? Vue 中使用的 CSS 变量
以上是 vue3如何动态修改css的@keyframes属性? 的全部内容, 来源链接: utcz.com/p/934163.html