龙空技术网

部分原生JavaScript兼容性问题解决方案,IE已经被抛弃,走好不送

代码开发 965

前言:

目前我们对“html兼容ie”都比较关怀,我们都需要学习一些“html兼容ie”的相关资讯。那么小编同时在网摘上网罗了一些关于“html兼容ie””的相关知识,希望看官们能喜欢,看官们快快来了解一下吧!

1. 事件监听与解绑IE:

监听事件:obj.attachEvent("onXXX",fn);

解除事件:obj.detachEvent("onXXX",fn);

标准监听事件:obj.addEventListener("type",fn,false);

标准解除事件:obj.removeEventListener("type",fn,false);

2. 计算非内嵌样式

IE:obj.currentStyle.attr 或者 obj.currentStyle[attr]

其他:

document.defaultView.getComputedStyle(obj,null).attr//或者document.defaultView.getComputedStyle(obj,null)[attr]
3. 获取页面滚动条距离顶端的距离

关于获取浏览器的滚动条距离顶端的距离,有下面两种方法,存在兼容性问题:

document.body.scrollTop 或document.documentElement.scrollTop

(1)文档处于混杂模式下:

所有浏览器使用document.body.scrollTop获取,但一般文档都是会有文档类型声明的,因此这种情况几乎不存在。

(2)文档处于标准模式下:

chrome和safari:使用document.body.scrollTop获取

IE:使用document.documentElement.scrollTop获取

考虑浏览器的兼容性:

let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

4. IE和其他浏览器中的事件对象event

封装一个获取当前事件的派生对象的函数

getEventTarget

若使用DOM0级绑定事件的方式,那么event是作为window对象的属性存在的

IE中,既可以使用window.event,也可以使用函数的第一个参数

在其他浏览器中,event是事件的参数

在IE中,引发事件的对象是由event.srcElement获得;在其他浏览器中,引发事件的对象是由event.target获得。

5. 取消事件冒泡

在IE中,使用 event.cancelBubble = true 来取消事件冒泡。

在其他浏览器中,使用stopPropagation()方法来取消事件冒泡。

6. 取消事件的默认行为

事件的默认行为:例如<a>的点击事件的默认行为就是跳转链接

在IE中,使用event.returnValue = false来取消事件的默认行为。

在其他浏览器中,使用preventDefault()方法来取消事件的默认行为。

把上述几个封装在一起:

var eventUtil = { // 添加句柄 addHandler: function(element, type, handler) { if (element.addEventListener) { element.addEventListener(type, handler, false); } else if (element.attachEvent) { element.attachEvent('on' + type, handler); } else { element['on' + type] = handler; } }, // 删除句柄 removeHandler: function(element, type, handler) { if (element.removeEventListener) { element.removeEventListener(type, handler, false); } else if (element.detachEvent) { element.detachEvent('on' + type, handler); } else { element['on' + type] = null; } }, //事件 getEvent: function(event) { return event ? event : window.event; }, //类型 getType: function(event) { return event.type; }, //目标元素 getElement: function(event) { return event.target || event.srcElement; }, //阻止默认事件 preventDefault: function(event) { if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; } }, //阻止事件冒泡 stopPropagation: function(event) { if (event.stopPropagation) { event.stopPropagation(); } else { event.cancelBubble = true; } }} 

欢迎关注。

标签: #html兼容ie