js 动态修改keyframes时 insertRule is not a function

想通过js来修改keyframes 里的动画效果,能打印出来对应的cssRule ,deleteRule也生效,但是insertRule 报错 is not a funcution

下面是打印出来未删除动画时候的keyframes

WX20191119-110941@2x.png

`findKeyframesRule(animName) {

        let rule;
        let ss = document.styleSheets;
        for (let i = 0; i < ss.length; ++i) {
            for (let x = 0; x < ss[i].cssRules.length; ++x) {

                rule = ss[i].cssRules[x];

                if (rule.name === animName && (rule.type === CSSRule.KEYFRAMES_RULE || ss[i].cssRules[x].type === CSSRule.WEBKIT_KEYFRAMES_RULE)) {
                    return rule; // 可改为 console 查看当前页中所有动画属性值
                }
            }
        }
    },
    change(selector, animName) {

        let keyframes = this.findKeyframesRule(animName);
        console.log(keyframes);
        // 删除已经存在的开始和结束帧
        keyframes.deleteRule('0%');
        keyframes.deleteRule('100%');
        keyframes.insertRule('0% { -webkit-transform: translateX(0); }'); //结束移动屏幕一半
        keyframes.insertRule('100s% { -webkit-transform: translateX(-300%); }'); //结束移动屏幕一半

        // 重新指定动画名字使之生效
        document.querySelector(selector).style.webkitAnimationName = animName;
    }` 


看了一篇国外的文章 用appendRule可以添加动画效果
`keyframes.deleteRule('0%');

        keyframes.deleteRule('100%');
        keyframes.appendRule('0% { -webkit-transform: translateX(0); }'); //结束移动屏幕一半
        keyframes.appendRule('100% { -webkit-transform: translateX(100%); }'); //结束移动屏幕一半`
        

但是新的问题来了,虽然keyframes改了,但是动画效果并没有生效....这是为什么,怎么解


又研究了一下,打印CSSStyleSheet,发现有两个动画效果,只改了其中一个,全改以后终于可以了....

阅读 3.3k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题