国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript 學習筆記 Black.Caffeine 09.11.28

2019-11-21 00:57:09
字體:
來源:轉載
供稿:網友
1. 之前寫的一直都是分散的函數,用到什么功能,就寫什么函數,覺得不夠整潔,所以這次寫的是封裝的類,用起來還不錯,但是傳遞參數的時候遇到了不少問題,所以,查閱了很多資料,總結如下:
1)動態綁定事件問題:
需要將onclick事件綁定到對象上,比如列表項。需要用到addEventListener或者attachEvent,用于吧函數操作添加到事件中去,而不是覆蓋,但是,attachEvent不支持FF,FF只能用addEventListener。so,就需要一個函數,把它們倆給綜合起來,于是乎,這個函數誕生了:
復制代碼 代碼如下:

function addEventHandler(oTarget, sEventType, fnHandler)
{
    if(oTarget.addEventListener)
    {oTarget.addEventListener(sEventType, fnHandler, false);}
    else if(oTarget.attachEvent)
    {oTarget.attachEvent('on' + sEventType, fnHandler);}
    else{oTarget['on' + sEventType] = fnHandler;}
}

2)傳遞this參數問題:
由于我吧函數和屬性都封裝到了一個類里面,所以在綁定onclick之類的事件是,就會產生一個問題,比如,addEventHandler(this.elems[i],"click",this.Move);,這樣就出錯了,因為在onclick事件發生的時候,調用的this就不是指向這個封裝的類了,于是乎,就需要用到apply()了~――應用某一對象的一個方法,用另一個對象替換當前對象。具體格式我就不用說了,網上一大堆~函數:
復制代碼 代碼如下:

var Bind = function(object,func){
        var args = Array.prototype.slice.call(arguments).slice(2);
        return function(){
            return func.apply(object,args);
        }
    }

調用:
this._fnMove=Bind(this,this.move,i);//this.move是我定義的一個成員函數,封裝在類中
//this.elems[i].onclick=this._fnMove;//吧上面那句話換成這句話也是可以的,只不過,onclick事件就被替換為this._fnMove,而不是添加this._fnMove進去
addEventHandler(this.elems[i],"click",this._fnMove);
這樣就OK了~
PS.call()也是基本相同的功能,但具體參數不一樣
2.setInterval問題
1)與setTimeout的區別
在一般情況下,setTimeout僅執行一次,(當然,如果在一個函數里反復調用setTimeout,就可以重復執行了)而 setInterval是可以重復執行的,直到clearIntercal()
2)在IE下不兼容問題
這個問題折磨了我50%的時間,哦買噶,以后是不是要半生都浪費在跟IE干仗上了。。。
本來,在chrome,ff,safari上都運行的很好,我相當激動,以至于遺忘了IE。。。后來在IE上一試,結果,完了,修改,google(此處為動詞,嘿嘿),基本上花了大半天時間吧,終于搞定。 之前,語句是這樣的:this.timer=setInterval(this.unfold,5,this.divs[index],this);結果在IE下完全不好使。最后,在某位大俠的文章里面看到如下描述:在IE下,setTimeout和setInterval是不支持參數傳遞的.問題很快就解決掉了,果然是我太菜了~
解決問題的函數如下:
復制代碼 代碼如下:

var mySetInterval = setInterval;
window.setInterval = function(callback, interval)
{
var args = Array.prototype.slice.call(arguments, 2);
function callFn(){callback.apply(null, args);}
return mySetInterval(callFn, interval);
}

var mySetTimeOut = setTimeout; //修改setInterval
window.setTimeout = function(callback, timeout)
{
var args = Array.prototype.slice.call(arguments, 2);
function callFn(){callback.apply(null, args);}

然后使用window.setTimeout或window.setInterval調用就可以了~
我的語句修改如下:
this.timer=window.setInterval(this.unfold,5,this.divs[index],this); //其中,this.divs[index],this是傳遞的兩個參數
再次謝謝那位大俠,雖然他不認識我~
目前,在IE中還有點排版的小問題,繼續學習~全力兔子!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平阴县| 徐水县| 荣成市| 鱼台县| 瓦房店市| 合江县| 康马县| 同心县| 翁牛特旗| 弋阳县| 富蕴县| 凯里市| 颍上县| 称多县| 神池县| 六枝特区| 华坪县| 望谟县| 马龙县| 新竹市| 依兰县| 南京市| 通城县| 资溪县| 根河市| 沈阳市| 灵丘县| 昭平县| 临武县| 鄂托克旗| 弥渡县| 崇阳县| 锡林浩特市| 荔波县| 乾安县| 蛟河市| 泽普县| 萨迦县| 新余市| 宜都市| 洪泽县|