js幾個繞不開的事件兼容寫法

1伯诬、鍵盤事件 keyCode 兼容性寫法

var inp = document.getElementById('inp')
var result = document.getElementById('result')

function getKeyCode(e) {
  e = e ? e : (window.event ? window.event : "")
  return e.keyCode ? e.keyCode : e.which
}

inp.onkeypress = function(e) {
  result.innerHTML = getKeyCode(e)
}

2、求窗口大小的兼容寫法

當(dāng)我們獲取滾動條滾動距離時:
IE,Chrome: document.body.scrollTop
FF: document.documentElement.scrollTop

// 瀏覽器窗口可視區(qū)域大械抢健(不包括工具欄和滾動條等邊線)
// 1600 * 525
var client_w = document.documentElement.clientWidth || document.body.clientWidth;
var client_h = document.documentElement.clientHeight || document.body.clientHeight;

// 網(wǎng)頁內(nèi)容實際寬高(包括工具欄和滾動條等邊線)
// 1600 * 8
var scroll_w = document.documentElement.scrollWidth || document.body.scrollWidth;
var scroll_h = document.documentElement.scrollHeight || document.body.scrollHeight;

// 網(wǎng)頁內(nèi)容實際寬高 (不包括工具欄和滾動條等邊線)
// 1600 * 8
var offset_w = document.documentElement.offsetWidth || document.body.offsetWidth;
var offset_h = document.documentElement.offsetHeight || document.body.offsetHeight;

// 滾動的高度
var scroll_Top = document.documentElement.scrollTop||document.body.scrollTop;

3、DOM 事件處理程序的兼容寫法(能力檢測)

var eventshiv = {
    // event兼容
    getEvent: function(event) {
        return event ? event : window.event;
    },

    // type兼容
    getType: function(event) {
        return event.type;
    },

    // target兼容
    getTarget: function(event) {
        return event.target ? event.target : event.srcelem;
    },

    // 添加事件句柄
    addHandler: function(elem, type, listener) {
        if (elem.addEventListener) {
            elem.addEventListener(type, listener, false);
        } else if (elem.attachEvent) {
            elem.attachEvent('on' + type, listener);
        } else {
            // 在這里由于.與'on'字符串不能鏈接,只能用 []
            elem['on' + type] = listener;
        }
    },

    // 移除事件句柄
    removeHandler: function(elem, type, listener) {
        if (elem.removeEventListener) {
            elem.removeEventListener(type, listener, false);
        } else if (elem.detachEvent) {
            elem.detachEvent('on' + type, listener);
        } else {
            elem['on' + type] = null;
        }
    },

    // 添加事件代理
    addAgent: function (elem, type, agent, listener) {
        elem.addEventListener(type, function (e) {
            if (e.target.matches(agent)) {
                listener.call(e.target, e); // this 指向 e.target
            }
        });
    },

    // 取消默認(rèn)行為
    preventDefault: function(event) {
        if (event.preventDefault) {
            event.preventDefault();
        } else {
            event.returnValue = false;
        }
    },

    // 阻止事件冒泡
    stopPropagation: function(event) {
        if (event.stopPropagation) {
            event.stopPropagation();
        } else {
            event.cancelBubble = true;
        }
    }
};

4、解決 IE9 以下瀏覽器不能使用 opacity

opacity: 0.5;
filter: alpha(opacity = 50);
filter: progid:DXImageTransform.Microsoft.Alpha(style = 0, opacity = 50);

5劳较、為一個元素綁定兩個相同事件:attachEvent/attachEventLister 出現(xiàn)的兼容問題

事件綁定:(不兼容需要兩個結(jié)合做兼容if..else..)
IE8以下用: attachEvent('事件名',fn);
FF,Chrome,IE9-10用: attachEventLister('事件名',fn,false);

 function myAddEvent(obj,ev,fn){
      if(obj.attachEvent){
        //IE8以下
        obj.attachEvent('on'+ev,fn);
      }else{
        //FF,Chrome,IE9-10
        obj.attachEventLister(ev,fn,false);
      }
    }

6驹止、獲取元素的非行間樣式值

function getStyle(object,oCss) {
       if (object.currentStyle) {
         return object.currentStyle[oCss];//IE
       }else{
         return getComputedStyle(object,null)[oCss];//除了IE
       }
   }

7、節(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,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異羽杰,居然都是意外死亡渡紫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門考赛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惕澎,“玉大人,你說我怎么就攤上這事颜骤∵蠛恚” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵复哆,是天一觀的道長欣喧。 經(jīng)常有香客問我,道長梯找,這世上最難降的妖魔是什么唆阿? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮锈锤,結(jié)果婚禮上驯鳖,老公的妹妹穿的比我還像新娘。我一直安慰自己久免,他們只是感情好浅辙,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阎姥,像睡著了一般记舆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呼巴,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天泽腮,我揣著相機(jī)與錄音御蒲,去河邊找鬼。 笑死诊赊,一個胖子當(dāng)著我的面吹牛厚满,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碧磅,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼碘箍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鲸郊?” 一聲冷哼從身側(cè)響起丰榴,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎严望,沒想到半個月后多艇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡像吻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年峻黍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拨匆。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡姆涩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惭每,到底是詐尸還是另有隱情骨饿,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布台腥,位于F島的核電站宏赘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏黎侈。R本人自食惡果不足惜察署,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望峻汉。 院中可真熱鬧贴汪,春花似錦、人聲如沸休吠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘤礁。三九已至阳懂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背希太。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工克饶, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留酝蜒,地道東北人誊辉。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像亡脑,于是被迫代替她去往敵國和親堕澄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

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

  • 什么是事件: 我們可以簡單的把事件理解為瀏覽器的感知系統(tǒng)霉咨。比如說:他可以感覺到用戶是否點擊(click)了頁面蛙紫、鼠...
    張松1366閱讀 6,778評論 1 6
  • 眾所周知,做程序最討厭的就是解決兼容問題途戒,你懂得坑傅,。目前就想到這些喷斋,后期想起來或者是遇到會繼續(xù)統(tǒng)計唁毒。有錯誤也請大家...
    虛幻的銹色閱讀 845評論 0 10
  • 什么是瀏覽器的兼容問題 瀏覽器的兼容性問題也就是網(wǎng)頁的兼容性或者網(wǎng)站兼容性問題, 指網(wǎng)頁在各種瀏覽器上的cs...
    進(jìn)擊的蒸汽機(jī)閱讀 1,299評論 0 2
  • 基本概念 事件是一些特定動作發(fā)生時所發(fā)出的信號,JavaScript中的事件是可以被 JavaScript 偵測到...
    Zd_silent閱讀 453評論 0 1
  • 卡拉茲(Callatz)猜想已經(jīng)在1001中給出了描述。在這個題目里星爪,情況稍微有些復(fù)雜浆西。 當(dāng)我們驗證卡拉茲猜想的時...
    mztkenan閱讀 153評論 0 0