javascript动态改变css3的animation

当元素含有animation属性,并且现需要动态计算keyframe变化的值

动态改变keyframe

通过JavaScript动态改变animation的keyframe比较麻烦,造成此问题的原因也是受限于CSSOM的API,特别是定义了多个帧的frame时,js基本无法去在运行时动态改变,只能通过重写styleSheets中的cssRule来实现

function findKeyframesRule(animName) {
      var rule;
      var ss = document.styleSheets;
      for (var i = 0; i < ss.length; ++i) {
          for (var 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[j].type == CSSRule.WEBKIT_KEYFRAMES_RULE )) {
                  return rule;
              }
          }
      }
  }
//删除旧的动画添加新的
function change(selector,animName)
{
    var keyframes = findKeyframesRule(animName);
    // 删除已经存在的开始和结束帧
    keyframes.deleteRule("0%");
    keyframes.deleteRule("100%");
    var clientWidth =  document.documentElement.clientWidth/2 || document.body.clientWidth/2 //此处为举例
    keyframes.insertRule("0% { -webkit-transform: translate("+clientWidth+"px); }");
    keyframes.insertRule("100% { -webkit-transform: translate(-"+clientWidth/2+"px); }");//结束移动屏幕一半
    // 重新指定动画名字使之生效
    document.querySelector(selector).style.webkitAnimationName = animName;
}
复制代码

此段代码对于未跨域link引入的css是可以生效,但是对于跨域的css在chrome下findKeyframesRule会取不到cssRule

设置cssRule

  • addRule(selector, rules, [index]) IE
  • deleteRule(index) FireFox
  • insertRule(rule, index) FireFox
  • removeRule([index]) IE
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值