栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > Html/CSS > CSS教程

js 动态改变 animation 的 keyframe

CSS教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

js 动态改变 animation 的 keyframe

对动态数据作 循环轮播动画实现时遇到需 动态计算高度的问题
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; // 可改为 console 查看当前页中所有动画属性值
}
   }

      }

  }
  //删除旧的动画添加新的
  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;
    }
function findAndChangeKeyframesRule(objRule) {
 let rule,
 ss = document.styleSheets,
 cssStyleSheetIndexAni = 0,
 cssStyleRuleIndex = 0,
 cssKeyframesRule = 0,
 cssStyleSheetIndexSel = 0;

 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.selectorText == objRule.selectorName){
      cssStyleSheetIndexSel = i;
      cssStyleRuleIndex = x;
  }
  if (rule.name == objRule.animName && (rule.type== CSSRule.KEYframeS_RULE || ss[i].cssRules[j].type == CSSRule.WEBKIT_KEYframeS_RULE )){
      cssStyleSheetIndexAni = i;
      cssKeyframesRule = x;
  }
     }
 }

 document.styleSheets[cssStyleSheetIndexSel].deleteRule(cssStyleRuleIndex);
 document.styleSheets[cssStyleSheetIndexAni].deleteRule(cssKeyframesRule);
 document.styleSheets[cssStyleSheetIndexSel].insertRule(objRule.animation, cssStyleRuleIndex);
 document.styleSheets[cssStyleSheetIndexAni].insertRule(objRule.aniKeyframes, cssKeyframesRule);
    };
  1. 在vue 中使用时,需注意 style 的 scope 属性,会自动添加 data-value的随机码,所以当用 animation-name 查询时,会查找不到当前值
    2.原文链接 参考文章来源
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/242410.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号