js兼容

1. 瀏覽器的寬高問題

  var winW=document.body.clientWidth||document.docuemntElement.clientWidth;//網(wǎng)頁可見區(qū)域?qū)?  var winH=document.body.clientHeight||document.docuemntElement.clientHeight;//網(wǎng)頁可見區(qū)域?qū)?  //以上為不包括邊框的寬高,如果是offsetWidth或者offsetHeight的話包括邊框

  var winWW=document.body.scrollWidth||document.docuemntElement.scrollWidth;//整個網(wǎng)頁的寬
  var winHH=document.body.scrollHeight||document.docuemntElement.scrollHeight;//整個網(wǎng)頁的高

  var scrollHeight=document.body.scrollTop||document.docuemntElement.scrollTop;//網(wǎng)頁被卷去的高
  var scrollLeft=document.body.scrollLeft||document.docuemntElement.scrollLeft;//網(wǎng)頁左卷的距離

  var screenH=window.screen.height;//屏幕分辨率的高
  var screenW=window.screen.width;//屏幕分辨率的寬
  var screenX=window.screenLeft;//瀏覽器窗口相對于屏幕的x坐標(除了FireFox)
  var screenXX=window.screenX;//FireFox相對于屏幕的X坐標
  var screenY=window.screenTop;//瀏覽器窗口相對于屏幕的y坐標(除了FireFox)
  var screenYY=window.screenY;//FireFox相對于屏幕的y坐標

2. 事件event獲取源

//event事件問題
  document.onclick=function(ev){//谷歌火狐的寫法窃躲,IE9以上支持赃蛛,往下不支持恤溶;
    var e=ev;
    console.log(e);
  }
  document.onclick=function(){//谷歌和IE支持荒辕,火狐不支持掐暮;
    var e=event;
    console.log(e);
  }
  document.onclick=function(ev){//兼容寫法芹助;
    var e=ev||window.event;
    var mouseX=e.clientX;//鼠標X軸的坐標
    var mouseY=e.clientY;//鼠標Y軸的坐標
  }

3. DOM節(jié)點獲取

//DOM節(jié)點相關(guān)洪囤,主要兼容IE 6 7 8
  function nextnode(obj){//獲取下一個兄弟節(jié)點
    if (obj.nextElementSibling) {
      return obj.nextElementSibling;
    } else{
      return obj.nextSibling;
    };
  }
  function prenode(obj){//獲取上一個兄弟節(jié)點
    if (obj.previousElementSibling) {
      return obj.previousElementSibling;
    } else{
      return obj.previousSibling;
    };
  }
  function firstnode(obj){//獲取第一個子節(jié)點
    if (obj.firstElementChild) {
      return obj.firstElementChild;//非IE678支持
    } else{
      return obj.firstChild;//IE678支持
    };
  }
  function lastnode(obj){//獲取最后一個子節(jié)點
    if (obj.lastElementChild) {
      return obj.lastElementChild;//非IE678支持
    } else{
      return obj.lastChild;//IE678支持
    };
  }

4. 獲取ClassName問題

//通過類名獲取元素
  document.getElementsByClassName('');//IE 6 7 8不支持跑慕;

  //這里可以定義一個函數(shù)來解決 getElementsByClassName 兼容問題
function getByClass(className, context) {
    context = context || document;
    if (document.getElementsByClassName) // 瀏覽器支持使用 getElementsByClassName
        return context.getElementsByClassName(className);

    /* 不支持 getElementsByClassName */
    var result = []; // 保存查找結(jié)果的數(shù)組
    // 查找出所有標簽
    var tags = context.getElementsByTagName("*");
    // 循環(huán)遍歷每一個標簽万皿,判斷該標簽是否有待查找的類名
    for (var i = 0, len = tags.length; i < len; i++) {
        // 獲取當前遍歷到標簽所使用的類名
        var classNames = tags[i].className.split(" ");
        // 遍歷當前標簽的所有類名
        for (var j = 0, l = classNames.length; j < l; j++) {
            if (classNames[j] === className) { // 說明當前遍歷到的標簽有使用過查找的類名
                result.push(tags[i]);
                break;
            }
        }
    }

    // 返回查找結(jié)果的數(shù)組
    return result;
}

5. 獲取元素的非行間樣式值

//獲取元素的非行間樣式值
   function getStyle(object,oCss) {
       if (object.currentStyle) {
         return object.currentStyle[oCss];//IE
       }else{
         return getComputedStyle(object,null)[oCss];//除了IE
       }
   }



6. 設置監(jiān)聽事件

//設置監(jiān)聽事件
   function addEvent(obj,type,fn){//添加事件監(jiān)聽,三個參數(shù)分別為 對象核行、事件類型牢硅、事件處理函數(shù),默認為false
    if (obj.addEventListener) {
      obj.addEventListener(type,fn,false);//非IE
    } else{
      obj.attachEvent('on'+type,fn);//ie,這里已經(jīng)加上on芝雪,傳參的時候注意不要重復加了
    };
  }
  function removeEvent(obj,type,fn){//刪除事件監(jiān)聽
    if (obj.removeEventListener) {
      obj.removeEventListener(type,fn,false);//非IE
    } else{
      obj.detachEvent('on'+type,fn);//ie减余,這里已經(jīng)加上on,傳參的時候注意不要重復加了
    };
  }

7. 元素到瀏覽器邊緣的距離

//在這里加個元素到瀏覽器邊緣的距離惩系,很實用
  function offsetTL(obj){//獲取元素內(nèi)容距離瀏覽器邊框的距離(含邊框)
    var ofL=0,ofT=0;
    while(obj){
      ofL+=obj.offsetLeft+obj.clientLeft;
      ofT+=obj.offsetTop+obj.clientTop;
      obj=obj.offsetParent;
    }
    return{left:ofL,top:ofT};
  }

8. 阻止事件傳播

//js阻止事件傳播位岔,這里使用click事件為例
  document.onclick=function(e){
    var e=e||window.event;
    if (e.stopPropagation) {
      e.stopPropagation();//W3C標準
    }else{
      e.cancelBubble=true;//IE....
    }
  }

9. 阻止默認事件

//js阻止默認事件
  document.onclick=function(e){
    var e=e||window.event;
    if (e.preventDefault) {
      e.preventDefault();//W3C標準
    }else{
      e.returnValue='false';//IE..
    }
  }

10. 關(guān)于EVENT事件中的target

//關(guān)于event事件中的target
  document.onmouseover=function(e){
    var e=e||window.event;
    var Target=e.target||e.srcElement;//獲取target的兼容寫法,后面的為IE
    var from=e.relatedTarget||e.formElement;//鼠標來的地方堡牡,同樣后面的為IE...
    var to=e.relatedTarget||e.toElement;//鼠標去的地方
  }

11. 鼠標滾輪滾動事件

//鼠標滾輪事件
  //火狐中的滾輪事件
  document.addEventListener("DOMMouseScroll",function(event){
    alert(event.detail);//若前滾的話為 -3抒抬,后滾的話為 3
  },false)
  //非火狐中的滾輪事件
  document.onmousewheel=function(event){
    alert(event.detail);//前滾:120,后滾:-120
  }

12.節(jié)點加載

//火狐下特有的節(jié)點加載事件晤柄,就是節(jié)點加載完才執(zhí)行擦剑,和onload不同
//感覺用到的不多,直接把js代碼放在頁面結(jié)構(gòu)后面一樣能實現(xiàn)芥颈。
document.addEventListener('DOMContentLoaded',function ( ){},false);//DOM加載完成惠勒。好像除IE6-8都可以
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市浇借,隨后出現(xiàn)的幾起案子捉撮,更是在濱河造成了極大的恐慌,老刑警劉巖妇垢,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巾遭,死亡現(xiàn)場離奇詭異,居然都是意外死亡闯估,警方通過查閱死者的電腦和手機灼舍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涨薪,“玉大人骑素,你說我怎么就攤上這事「斩幔” “怎么了献丑?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵末捣,是天一觀的道長。 經(jīng)常有香客問我创橄,道長箩做,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任妥畏,我火速辦了婚禮邦邦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘醉蚁。我一直安慰自己燃辖,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布网棍。 她就那樣靜靜地躺著黔龟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪确沸。 梳的紋絲不亂的頭發(fā)上捌锭,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音罗捎,去河邊找鬼观谦。 笑死,一個胖子當著我的面吹牛桨菜,可吹牛的內(nèi)容都是我干的豁状。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼倒得,長吁一口氣:“原來是場噩夢啊……” “哼泻红!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起霞掺,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤谊路,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后菩彬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缠劝,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年骗灶,在試婚紗的時候發(fā)現(xiàn)自己被綠了惨恭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡耙旦,死狀恐怖脱羡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤锉罐,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布帆竹,位于F島的核電站,受9級特大地震影響氓鄙,放射性物質(zhì)發(fā)生泄漏馆揉。R本人自食惡果不足惜业舍,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一抖拦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舷暮,春花似錦态罪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沥割,卻和暖如春耗啦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背机杜。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工帜讲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人椒拗。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓似将,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蚀苛。 傳聞我的和親對象是個殘疾皇子在验,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容