亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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.原文链接 参考文章来源
點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
Web前端工程師
手記
粉絲
7
獲贊與收藏
38

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消