flag的 問題?。?!求大神解釋
我就納悶了。按代碼所示。flag放在定時器外面,最開始是true,執行第一次動畫時,不是所有動畫都到達,于是定時器的flag被設置為false,然后該干嘛就干嘛,接下來執行30毫秒后的第二次動畫,于是乎,問題來了,作為startmove內的變量,定時器外的變量flag,已經被上一次的動畫設置為了false,所以,接下來的判斷語句flag永遠是false, ?等同于if(flag)這個是不可能實現的??!定時器內部也沒有設置flag為true的語句,動畫講永遠不停止??!真正的問題來了:屏幕中老師這樣敲的代碼,瀏覽器中居然能實現動畫?。?!求大神解釋??!
2016-04-21
你再看一看。
2016-05-10
NeoWu222同學的方法,我試了,發現好像flag一直是處于為1,并沒有加到3,也就是定時器還一直是開著的
2016-05-09
我覺得不要加flag也可以吧,定時器一直開著應該沒關系吧,所有的運動也能同時實現(個人想法,不知道行不行)
2016-04-26
這個問題和回答給力!給你們點個贊!
2016-04-23
不好意思json沒有獲取長度的屬性或方法,所以要自己定義一個方法來獲取
把最后一個if(flag == json.length)改為if(flag == getLength(json))
方法定義代碼:
function getLength(json){
? ? var length = 0;
? ? for(var attr in json){
? ? ? ? length++;
? ? }
? ? return length;
}
2016-04-23
把flag初始為0;當有一個屬性達到目標值時,flag自增1;當flag 等于 json的長度時再清楚定時器;
代碼如下:
function startMove(obj,json,fn){
? ? clearInterval(obj.timer);
? ? obj.timer = setInterval(function(){
? ? ? ? var flag = 0;
? ? ? ? for(var attr in json){
? ? ? ? ? ? //1.取當前值
? ? ? ? ? ? var icur = 0;
? ? ? ? ? ? if(attr == 'opacity'){
? ? ? ? ? ? ? ? icur = Math.round(parseFloat(getStyle(obj,attr))*100);
? ? ? ? ? ? //是不是不需要parseFloat
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? icur = parseInt(getStyle(obj,attr));
? ? ? ? ? ? }
? ? ? ? ? ? //2.算速度
? ? ? ? ? ? var speed = (json[attr] - icur)/8;
? ? ? ? ? ? speed = speed>0?Math.ceil(speed):Math.floor(speed);
? ? ? ? ? ? //3.檢測停止
? ? ? ? ? ? if(icur == json[attr]){
? ? ? ? ? ? ? ? flag++;
? ? ? ? ? ? }
? ? ? ? ? ? if(attr == 'opacity'){
? ? ? ? ? ? ? ? obj.style.filter = 'alpha(opacity:' + (icur + speed) + ')';//針對IE
? ? ? ? ? ? ? ? obj.style.opacity = ?(icur + speed)/100;
? ? ? ? ? ? ? ? //針對chrome、FF
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? obj.style[attr] = icur + speed + 'px';?
? ? ? ? ? ? }
? ? ? ? ? ??
? ? ? ? ? ? if(flag == json.length){
? ? ? ? ? ? ? ? ? ? clearInterval(obj.timer);
? ? ? ? ? ? ? ? ? ? if(fn){
? ? ? ? ? ? ? ? ? ? ? ? fn();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? };?
? ? },20)
? ??
}
2016-04-21
你試一下不就知道老師寫的代碼是對是錯了。加個fn,做鏈式運動??存準竭\動有木有?我個人估計應該是沒有。flag設置成false之后,就再也沒有變回true了。。。老師代碼是有bug