-
上面的那個問題,解決方法。第一個,設置行內樣式。查看全部
-
最初沒有border,style.width=offsetWidth - 1 + 'px'; 加了border值后,offsetWidth每次算的時候就會加上border,所以,如果border大于1, 那么style.width不但不會減小,還會增加。查看全部
-
//獲取樣式 function getStyle(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; }else{ return getComputedStyle(0bj,false)[attr];s } }查看全部
-
6-2:完美運動框架 JSON(JavaScript Object Notation)是一種輕量級的數據交換格式 var json={name:key}多對值可以用逗號隔開 var json={a:12,b:2} 遍歷json,用 for-in循環 for(var i in json) {alert(i);//彈出對象 alert(json[i]);//彈出對象的值} 使用案例: window.onload=function(){ var Li=document.getElementById('li1'); Li.onmouseover=function(){ startMove(Li,{width:400,height:101,opacity:100}) }} function startMove(obj,json,fn){ var flag=true;標志是否全部運動到達目標值 clearInterval(obj.timer); obj.timer=setInterval(function(){ 遍歷JSON for( var attr in json){ var curr=0; if(attr=='opacity'){ //Math.round四舍五入 curr=Math.round(parseFloat(getStyle(obj,attr))*100); } else{ curr=parseInt(getStyle(obj,attr));} var speed=0; speed=(json[attr]-curr)/10; speed=speed>0? Math.ceil(speed):Math.floor(speed); 判斷是否所有的運動都達到目標值 if(curr!=json[attr]){ flag=false; } if(attr=='opacity'){ obj.style.filter='alpha(opacity:'+(curr+speed)+')'; obj.style.opacity=(curr+speed)/100;} else{obj.style[attr]=curr+speed+'px'; }} if(flag){ clearInterval(obj.timer); if(fn){ fn();} } },30)}查看全部
-
5-1:鏈式運動 鏈式運動的環環緊扣 <script> window.onload=function(){ var Li=document.getElementById('li1'); Li.onmouseover=function(){ startMove(Li,'width',400,function(){ startMove(Li,'height',200,function(){ startMove(Li,'opacity',100) }) }); } Li.onmouseout=function(){ startMove(Li,'opacity',30,function(){ startMove(Li,'height',100,function(){ startMove(Li,'width',200) }) }) } } </script>查看全部
-
Math.round()將一個數四舍五入為一個最接近的整數 改變透明度時出現的問題: 1、獲取當前透明度不用parseInt,parseInt是整形,透明度以小數為主,可以用parseFloat(). 2、設置透明度要考慮兼容 obj.style.filter='alpha(opacity:'+(當前透明度+變化速度)+')'; obj.style.opacity=(當前透明度+變化速度)/100;查看全部
-
4-3任意屬性值: 功能完全相同的代碼,可以將不同的東西當做參數傳進去。 obj.style.width=curr+speed+'px'; // 這樣寫,有利于整理代碼,可以將其作為參數傳入,下面一條將其作為參數attr // 傳進來,就可以實現不同樣式的運動 // obj.style['height']=curr+speed+'px'; obj.style[attr]=curr+speed+'px';查看全部
-
4-2獲取樣式: <script> window.onload=function(){ startMove(); }; function startMove(){ setInterval(function(){ var oDiv=document.getElementById('div1'); // offsetWidth獲取的是它整個的寬度:包括內容寬度和邊框等等 // oDiv.style.width=oDiv.offsetWidth-1+'px'; // 當把樣式寫在行內時,可以通過如下方法獲取 // oDiv.style.width=parseInt(oDiv.style.width)-1+'px'; // 當不把樣式寫在行內是,可以通過getStyle函數獲取 oDiv.style.width=parseInt(getStyle(oDiv,'width'))-1+'px'; oDiv.style.fontSize=parseInt(getStyle(oDiv,'font-size'))-1+'px'; },30) } // getStyle函數是一個封裝好的用來獲取樣式的函數 function getStyle(obj,attr){ // currentStyle:針對IE瀏覽器 if(obj.currentStyle){ return obj.currentStyle[attr]; } else{ // getComputedStyle:針對Firefox瀏覽器 return getComputedStyle(obj,false)[attr]; } } <!--<div id="div1" >--> <div id="div1">干酪 </div>查看全部
-
4-1多物體動畫: // var timer=null; function startMove(obj,iTarget){ clearInterval(obj.timer); obj.timer=setInterval(function(){ var speed=0; speed=(iTarget-obj.offsetWidth)/10; speed=speed>0? Math.ceil(speed):Math.floor(speed); if(obj.offsetWidth==iTarget){ clearInterval(obj.timer); } else{ obj.style.width=obj.offsetWidth+speed+'px'; } },30) } // var alpha=30; function startMove1(obj,iTarget){ clearInterval(obj.timer); obj.timer=setInterval(function(){ var speed=0; if(obj.alpha>iTarget){ speed=-10;} else{speed=10;} if(obj.alpha==iTarget) { clearInterval(obj.timer); } else{ obj.alpha+=speed; obj.style.filter='alpha(opacity:'+obj.alpha+')'; obj.style.opacity=obj.alpha/100; } },30) } </script>查看全部
-
4-1多物體動畫: 存在多項共用一個值,并且這個值會發生改變時,最好單獨給賦值,避免出現爭用的情況。 <script> window.onload=function(){ var aLi=document.getElementsByTagName('li'); for(var i=0;i<aLi.length;i++){ // 給每一個li設置一個timer,才不會致使他們去搶timer aLi[i].timer=null; aLi[i].onmouseover=function(){ startMove(this,400); }; aLi[i].onmouseout=function(){ startMove(this,200) } } var oDivLi=document.getElementsByTagName('div'); for(var j=0;j<oDivLi.length;j++){ oDivLi[j].timer=null; oDivLi[j].alpha=30; oDivLi[j].onmouseover=function(){ startMove1(this,100); }; oDivLi[j].onmouseout=function(){ startMove1(this,30); } } };查看全部
-
3-1:緩沖動畫 alert(Math.floor(3.98))向下取整 alert(Math.ceil(3.22))向上取整 遇到這種運動涉及到數字的問題都要做一個判斷,向上或者向下取整 </style> <script type="text/javascript"> window.onload = function(){ var oDiv=document.getElementById('div1'); oDiv.onmouseover=function(){ startMove(0); }; oDiv.onmouseout=function(){ startMove(-200); } }; var timer=null; // 從用兩個函數實現,到用一個函數:兩個有很多相同的部分,則相同部分可以共用,不同部分看有什么聯系 // 從傳入兩個參數到一個參數:參數傳遞盡可能的少 function startMove(iTarget){ clearInterval(timer); var oDiv=document.getElementById('div1'); timer=setInterval(function(){ var speed=(iTarget-oDiv.offsetLeft)/20; speed=speed>0? Math.ceil(speed):Math.floor(speed); if(oDiv.offsetLeft==iTarget){ clearInterval(timer); } else {查看全部
-
2-2 :透明動畫 所有主流瀏覽器(IE,Firefox,Opera,Chrome,Safari)都支持opacity屬性。 注意:IE8和早期版本支持另一種過濾器屬性。像:filter:Alpha(opacity=50) window.onload=function(){ var oDiv=document.getElementById('div1'); oDiv.onmouseover=function(){ startMove(100); }; oDiv.onmouseout=function(){ startMove(30); } }; var timer=null; var alpha=30; function startMove(iTarget){ var oDiv=document.getElementById('div1'); clearInterval(timer); timer=setInterval(function(){ var speed=0; if(alpha>iTarget){ speed=-10; } else{ speed=10; } if(alpha==iTarget) { clearInterval(timer); } else{ alpha+=speed; oDiv.style.filter='alpha(opacity:'+alpha+')'; oDiv.style.opacity=alpha/100; } },30) }查看全部
-
JS動畫效果: 2-1:速度動畫: 為防止動畫累加,在每次觸發動畫事件時,應該先清除前一個沒有完成的動畫,即清除錢一池開啟的定時器,然后這次再開啟一個定時器。 offsetLeft值可以獲取當前的left值, 而offsetLeft屬性不能被賦值,只能獲取 window.onload = function(){ var oDiv = document.getElementById("div1"); oDiv.onmouseover = function(){ startMove(0); }; oDiv.onmouseout = function(){ startMove(-200); }; }; var timer = null function startMove(offleft){ clearInterval(timer); var oDiv = document.getElementById("div1"); timer = setInterval(function(){ var speed = 0; if(oDiv.offsetLeft > offleft ){ speed = -10; }else if(oDiv.offsetLeft < offleft) { speed = 10; }else{ clearInterval(timer); } oDiv.style.left = oDiv.offsetLeft+speed+'px'; },30); }查看全部
-
用此方法不用將樣式都寫到html里查看全部
-
JS動畫效果: 運動框架實現思路: 1.速度(改變值left,right,width,height,opacity) 2.緩沖運動 3.多物體運動 4.任意值變化 5.鏈式運動 6.同時運動查看全部
舉報
0/150
提交
取消