1. 程式人生 > 實用技巧 >js操作keyframes動態賦值

js操作keyframes動態賦值

思路和實現方法都很簡單,只是用的api很少有同學知道。這裡記錄下來。

 1 function getKeyframes(name){
 2             var animation={}
 3             var styleSheets=document.styleSheets
 4             for(var i=0;i<styleSheets.length;i++){
 5                 var item=styleSheets[i];
 6                 if(item.cssRules[0] && item.cssRules[0].name && item.cssRules[0].name==name){
7 animation.cssRule=item.cssRules[0]; 8 animation.styleSheet=item; 9 animation.index=0; 10 } 11 } 12 return animation; 13 }
 1 //原生js操作keyframes值
 2         var testDemo=document.getElementById('testDemo');
3 testDemo.onclick=function(){ 4 var arr=[ 5 {x:0,y:0}, 6 {x:-16.91,y:-32.36}, 7 {x:-29.76,y:-55.91}, 8 {x:-41.19,y:-72.73}, 9 {x:-52.00,y:-80.00}, 10 {x:-61.38,y:-68.68}, 11 {x:-67.30,y:-52.70},
12 {x:-72.79,y:-33.13}, 13 {x:-78.12,y:-11.13}, 14 {x:-84.00,y:12.00} 15 ]; 16 var token = window.WebKitCSSKeyframesRule? '-webkit-':''; 17 let key_name='testDemo' 18 var nameRule=getKeyframes(key_name); 19 var rules='@'+token+'keyframes '+key_name+'{'; 20 for(var i=0;i<arr.length;i++){ 21 rules+=(i+1)*10+'%{transform:translate3d('+arr[i].x+'px,'+arr[i].y+'px,0);opacity:'+(i+1)*10/100+';}' 22 } 23 rules+='}'; 24 if(JSON.stringify(nameRule)=='{}'){ 25 var sheet=document.styleSheets[0]; 26 // console.log('````',rules); 27 sheet.insertRule(rules,0); 28 }else{ 29 nameRule.styleSheet.deleteRule(nameRule.index) 30 nameRule.styleSheet.insertRule(rules,nameRule.index) 31 } 32 testDemo.style.animation=key_name+' 2s infinite'; 33 }