美文网首页
js在浏览器的兼容问题及其解决方案

js在浏览器的兼容问题及其解决方案

作者: 金字笙调 | 来源:发表于2017-06-10 11:21 被阅读0次

event事件问题

IE中有window.event,而火狐中没有

function onclick(event){
    var e=event || window.event;
    var mouseX=e.clientX;//鼠标X轴的坐标
    var mouseY=e.clientY;//鼠标Y轴的坐标
}

获取元素的非行间样式值

function getstyle(obj, obj_css){
    if(obj.currentStyle){
      return obj.currentStyle[obj_css]   //ie
    }else{   
      return getComputedStyle(obj,null)[obj_css]  //除了ie
    }
}

获取自定义属性问题

IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute() 获取自定义属性;Firefox下,只能使用getAttribute() 获取自定义属性

解决方法:统一用getAttribute()获取属性

设置监听事件

function addEvent(obj, type,fn){
     if(obj.addEventListener){
          obj.addEventListener(type,fn,false)  //非ie
      }else{
          obj.attachEvent("on"+type,fn)  //ie
      }
}
//解除事件绑定
function removeEvent(obj.type,fn){
      if(obj.removeEventListener){
          obj.removeEventListener(type,fn,false)  //非ie
      }else{
          obj.detachEvent("on"+type,fn)  //ie
      }
}

补充说明:  attachEvent只在ie9及其以下才能使用,在ie9及其以上统一使用了 addEventListener

阻止事件冒泡

function do(event){
    var e=event || window.event;
    if(e.stopPropagation){
        e.stopPropagation()   // 非ie
    }else{
        e.cancelBubble=true   // 从ie5到edge都要这么写
    }
}

阻止默认事件

function stopDefault( e ) { 
    //阻止默认浏览器动作(W3C) 
    if ( e && e.preventDefault ) 
        e.preventDefault(); 
    //IE中阻止函数器默认动作的方式 
    else
        window.event.returnValue = false; 
    return false; 
}

关于event事件中target问题

function do(event){
    var e=event || window.event;
    var target =e.target || e.srcElement   //后面为ie
)

补充说明:在ie9及其以上的时候,event属性存在,并且区别是:
event: srcElement  target cancleBuble currentTarget defaultPrevent
window.event: srcElement

鼠标滚轮事件

  // 火狐滚轮事件
  document.addEventListener("DOMMouseScroll",function(event){
      alert(event.detail)      //前进-3  后退 3
},false)
 // IE滚轮事件
  document.onmousewheel=function(event){
    alert(event.detail)      //前滚:120,后滚:-120
  }

鼠标当前坐标

IE:  event.offsetX 和 event.offsetY
FF:  event.layerX 和  event.layerY

事件委托

window.onload = function(){
    var oUl = document.getElementById("ul");
    var aLi = oUl.getElementsByTagName("li");
    var oBtn = document.getElementById("btn");
    var iNow = 4;

    oUl.onmouseover = function(ev){
        var ev = ev || window.event;
        var target = ev.target || ev.srcElement;
        //alert(target.innerHTML);
        if(target.nodeName.toLowerCase() == "li"){
        target.style.background = "red";
        }
    }
    oUl.onmouseout = function(ev){
        var ev = ev || window.event;
        var target = ev.target || ev.srcElement;
        //alert(target.innerHTML);
        if(target.nodeName.toLowerCase() == "li"){
        target.style.background = "";
        }
    }
    oBtn.onclick = function(){
        iNow ++;
        var oLi = document.createElement("li");
        oLi.innerHTML = 1111 *iNow;
        oUl.appendChild(oLi);
    }
}

窗体宽高

var winW=document.body.clientWidth || document.ducumentElement.clientHeight  
//以上为不包括边框的宽高,如果是offsetWidth或者offsetHeight的话包括边框

var winWW=document.body.scrollWidth||document.docuemntElement.scrollWidth;
//整个网页的宽度

  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坐标

一图解析

获取元素的非行间样式值

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

元素到浏览器边缘的距离

//在这里加个元素到浏览器边缘的距离,很实用
  function offsetTL(obj){//获取元素内容距离浏览器边框的距离(含边框)
    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};
  }

相关文章

  • js在浏览器的兼容问题及其解决方案

    event事件问题 IE中有window.event,而火狐中没有 获取元素的非行间样式值 获取自定义属性问题 I...

  • css在浏览器的兼容问题及其解决方案

    css兼容一直是很让人头疼的事,我们在这里就简单介绍常见的兼容问题和其相关的解决方案。 强制内核渲染 比如说360...

  • SpringBoot+Netty-socketio实现webso

    socket.io是js实现的,websocket框架,为了解决浏览器不兼容问题而设计socket.io.js下载...

  • js中去字符串前后空格(trim)

    对于js中去前后空格,有trim()方法, 但是trim()存在浏览器兼容问题, 在火狐\edge上表现不太好,于...

  • HTML+CSS(47-72)

    问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...

  • 浏览器兼容

    什么是浏览器兼容问题 为什么会有浏览器兼容问题 用到的网站 处理兼容问题的思路 渐进增强和优雅降级 stackov...

  • JavaScript动态增删 css类

    js使用setAttribute添加的类会把原来的类覆盖 ,classList则不会但是IE及版本的浏览器有兼容问题

  • jQuery

    jQuery: 它是一个使用原生的JS来封装的常用方法的类库(解决了浏览器的兼容问题)jQuery非常强大的地方在...

  • 兼容各版本浏览器,封装原生Js获取ClassName

    原生js方法 document.getElementsByClassName在ie8及其以下浏览器中不能使用,所以...

  • 浏览器兼容问题解决方案

    浏览器兼容问题解决方案 百度流量研究院:Chrome 42%,IE 8.0 12.5%,IE 9.0 9%。大部分...

网友评论

      本文标题:js在浏览器的兼容问题及其解决方案

      本文链接:https://www.haomeiwen.com/subject/mzuqqxtx.html