当前位置: 首页 > 知识库问答 >
问题:

javascript - vue3如何动态修改css的@keyframes属性?

巴宏恺
2023-04-29

现在需要动态获取dom列表的高度,该列表是后台返回的数据,数据条数是不固定的。目前设置的动画效果是写死的高度,根据该高度做动画滚动,现在要把该高度改成动态的值。
已经尝试过的方法:roll.value.styleSheets,发现该属性获取不到@keyframes

共有2个答案

万俟玉书
2023-04-29

使用CSS变量就行,�� 使用 CSS 自定义属性(变量) - CSS:层叠样式表 | MDN

具体使用方式可以借鉴这个问答 �� Vue 中使用的 CSS 变量

齐乐
2023-04-29

要动态修改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>
 类似资料:
  • 我怎么在move的时候让对应的样式也修改,也就是elRed.style或elGreen.style,现在不起作用。 可以跳转到这里直接看效果: https://play.vuejs.org/#eNqlVW1r2zAQ/is3U4gDmdPto5eWbnSMwcZg7...

  • 问题内容: 现在,我有一个背景图像URL硬编码到CSS中。我想使用AngularJS中的逻辑动态选择背景图片。这是我目前拥有的: HTML CSS 如您所见,CSS中的背景图像引用了特定的文件位置。我希望能够以编程方式确定图像URL的位置。我真的不知道从哪里开始。我不知道JQuery。谢谢。 问题答案: 您可以使用ng-style使用AngularJS动态更改CSS类属性。 希望这个ng样式的示例

  • 问题内容: 我喜欢引导程序示例的外观 但是我需要在 .bs-docs-example:之后 动态更改 内容 ,如下所示: __ 这有可能吗?怎么样? 问题答案: 实际上,我发现了一个不涉及的解决方案:之后(我对CSS太不好了,所以我没有早就考虑过…)我也对CSS有所了解。开始 : 并像这样使用它: 我希望能有所帮助。

  • 本文向大家介绍Javascript 动态改变imput type属性,包括了Javascript 动态改变imput type属性的使用技巧和注意事项,需要的朋友参考一下 Javascript 动态改变imput type属性: 代码实现: HTML代码:  可以运行时动态改变imput元素的type属性值 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 问题: 我使用 pinia 进行状态管理,写法大概如下,由于我修改的是数组中某个对象下的对象的属性,数组更新后,页面无法重新渲染。 当我点击按钮修改元素的 x,y,width,height 某个样式值的时候,layerList 中对应的元素的下的style对象的下属性值也会更新,由于页面是根据这个对象来渲染内联样式的, style 在手动更新后一直无法更新,想请教下各位大佬这是什么原因? 数组 l

  • 如果执行win_obj.scrollTo(0,win_obj.scrollTop+100);能正确跳到指定位置,但是上面的样式修改就不会成功,如果不执行上面那句样式就可以正常修改,想知道如何能即修改样式又正常跳转位置