1. 程式人生 > >JavaScript常見兼容問題解決

JavaScript常見兼容問題解決

attr element eva html 標準 xmlhttp 觸發 請求 ros

JS兼容問題

//事件對象的獲取

document.onclick = function(e){

  var _e = window.event || e;

}

document.onkeydown = function(event){

  var code = event.keyCode || event.which; //兼容性問題

  alert(event.which); // <IE9不支持

}

//事件委托

list.onclick = function(e){

  var _e = window.event||e;

  var _t = _e.target||_e.srcElement;//事件委托

  if(_t.tagName.toLowerCase()=="li"){

    alert(_t.innerHTML)

  }

}

btn.onclick = function(e){

  var _e = window.event || e;

  //_e.target 代表的是按鈕的節點對象和btn一樣

  var _t = _e.target||_e.srcElement;

  console.log(_t.id)

}

//屏幕的高度

document.body.clientHeight (Chrome)|| document.documentElement.clientHeight(IE

FF

//阻止事件冒泡(前提是獲取事件對象_e)

if(_e.stopPropagation){

  _e.stopPropagation();

}else{

  _e.cancelBubble = true;

}

什麽時候用阻止事件冒泡?

例如:document上有A事件,divB事件,div裏面的spanC事件,如果不給spandiv加阻止事件冒泡的話,點擊span時就會觸發到divB事件、documentA事件,當點擊span時不想觸發divdocument的事件就要加上阻止事件冒泡,div也是一樣的道理。

//阻止默認行為

if(_e.preventDefault){ //標準處理方式

  _e.preventDefault();

}else{ //Ie處理方式

  _e.returnValue = false;

}

alert(); 鼠標右擊;submita鏈接

/*

事件監聽綁定事件兼容處理

參數

objNode 事件目標

eventName 事件名稱 如:click mouseenter

fn 事件處理程序 函數

*/

function on(objNode,eventName,fn){

  if(objNode.addEventListener){ //標準模式

    objNode.addEventListener(eventName,fn);

  }else{  //IE8及以下模式

    objNode.attachEvent("on"+eventName,fn);

  }

}

function out(target,eventName,fn){

  if(target.removeEventListener){

    target.removeEventListener(eventName,fn);

  }else{

    target.detachEvent("on"+eventName,fn)

  }

}

/*

事件監聽綁定事件兼容處理

參數

objNode 事件目標

eventName 事件名稱 如:click mouseenter

fn 事件處理程序 函數

*/

function on(objNode,eventName,fn){

  if(objNode.addEventListener){ //標準模式

    objNode.addEventListener(eventName,fn);

  }else{//IE8及以下模式

    objNode.attachEvent("on"+eventName,fn);

  }

}

function handler(e){

  //console.log(e)

  //滾輪方向 事件對象.wheelDelta 120-120 非火狐

  //滾輪方向 事件對象.detail -33 火狐

  if(e.wheelDelta==120||e.detail==-3){

    alert("向上");

  }else{

    alert("向下")

  }

}

on(document,"DOMMouseScroll",handler)  //Firefox

on(document,"mousewheel",handler)  //Firefox

/*

獲取任意【節點對象】的任意的樣式【屬性】的值

dom 節點對象

pName 樣式屬性名 "aaa"

*/

function getStyleValue(dom, pName) {

  if (window.getComputedStyle) { //標準模式

    return window.getComputedStyle(dom, null)[pName];

  } else { //IE低版本

  //dom.currentStyle 樣式對象

  return dom.currentStyle[pName];

  }

}

//獲取css樣式函數以及透明度兼容

function getStyle(obj, attr){

  //獲取對象obj的屬性attr的值

  //大小,寬高,位移

  if(obj.currentStyle){ //IE瀏覽器的一個屬性,返回的是CSS樣式對象

    return obj.currentStyle[attr];

  }else{

    return getComputedStyle(obj)[attr]; //獲取當前元素所有最終使用的CSS屬性值。返回的是一個CSS樣式對象([object CSSStyleDeclaration])

  }

}

function getStyleOpacity(obj, attr){

  var iCur = 0;

  //去掉樣式的單位

  if(attr == "opacity"){

    iCur = parseFloat(getStyle(obj, attr)) * 100;

  }else{

    iCur = parseFloat(getStyle(obj, attr))

  }

}

//ajax創建請求數據

if(window.XMLHttpRequest){

  xhr = new XMLHttpRequest(); //標準

}else{

  xhr = new ActiveXObject("Microsoft.XMLHTTP"); //IE6

}

JavaScript常見兼容問題解決