原生JS--各种兼容性写法总结
<script>
var oEvent = evt || event;
=========================================================================
var oP1 = oP.previousElementSibling || oP.previousSibling;
var oP1 = oP.nextElementSibling || oP.nextSibling; var oLi = oUl.firstElementChild || oUl.firstChild;
var oLi = oUl.lastElementChild || oUl.lastChild;
=========================================================================
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; ========================================================================= if (oDiv.setCapture) //捕捉事件
{
oDiv.setCapture();
} if (oDiv.releaseCapture) //释放事件
{
oDiv.releaseCapture();
} ========================================================================= oInput.onpropertychange = oInput.oninput = function ()
{
alert(this.value);
}; ========================================================================= // 事件绑定的封装
function addEvent (obj,type,fn) {
if (obj.addEventListener) { //在高级浏览器
obj.addEventListener(type,fn,false);
} else {
obj.attachEvent('on'+type,fn)
}
}
//事件移除的封装
function removeEvent(obj,type,fn) {
if (obj.removeEventListener) {
obj.removeEventListener(type,fn,false);
} else {
obj.detachEvent('on'+type,fn);
}
}
//移除事件的时候,最好不要写匿名函数,应该将事件函数单独抽出来,在绑定事件的方法里面写上函数名 ========================================================================= //鼠标滚轮事件:
//onmousewheel 赋值的方式添加 【兼容chrome IE】
//DOMMouseScroll 绑定的方式添加 【兼容firefox】 //事件对象:
//oEvent.detail 【兼容firefox】
//oEvent.wheelDelta 【兼容chrome IE】 function fn (ev) {
var oEvent = ev || event; if (oEvent.wheelDelta) {
//chrome IE
if (oEvent.wheelDelta > 0) {
...... //向上滚
} else {
...... //向下滚
}
} else {
// Firefox
if (oEvent.detail > 0) {
...... //向下
} else {
...... //向上
}
}
}; //判断浏览器的类型
if (navigator.userAgent.indexOf('Firefox') != -1) {
addEvent(oImg,'DOMMouseScroll',fn); //addEvent是自己封装的绑定兼容写法
} else {
oImg.onmousewheel = fn;
}
========================================================================= /*只要是DOM0级事件,return false可以阻止各个浏览器的默认事件
在DOM2级事件里面,return false只能阻止低版本浏览器的默认事件;
在高级浏览器里面,通过preventDefault()方法阻止默认事件,属于事件对象的*/ if(oEvent.preventDefault){
oEvent.preventDefault();
} // 或者简写成 oEvent.preventDefault && oEvent.preventDefault(); return false; ========================================================================= //封装ready
function addReady(fn) {
if (document.addEventListener) {
document.addEventListener('DOMContentLoaded',fn,false);
} else {
document.attachEvent('onreadystatechange',function(){
if (document.readyState == 'complete') {
fn();
}
});
}
} ========================================================================= 事件对象的属性:
srcElement: 获取到事件真正作用的那个元素 【IE】
target: 获取到事件真正作用的那个元素 【高级浏览器】 var oLi = oEvent.srcElement || oEvent.target; </script>
原生JS--各种兼容性写法总结的更多相关文章
- 原生js模拟jquery写法
function $_custom(fun) { document.onreadystatechange = function() { if (document.readyState == " ...
- 原生js浏览器兼容性问题
1.HTML对象获取问题 FireFox:document.getElementById(“idName”); ie:document.idname或者document.getElementById( ...
- onload事件与ready事件的区别,原生js与jquery的区别
onload事件与ready事件分别是原生js与jquery的入口函数 原生js入口函数写法: window.onload=function(){ } jquery入口函数写法: $(document ...
- 常用原生JS方法总结(兼容性写法)
经常会用到原生JS来写前端...但是原生JS的一些方法在适应各个浏览器的时候写法有的也不怎么一样的... 今天下班有点累... 就来总结一下简单的东西吧…… 备注:一下的方法都是包裹在一个EventU ...
- addEventListener和attachEvent介绍, 原生js和jquery的兼容性写法
也许很多同仁一听到事件监听,第一想到的就是原生js的 addEventListener()事件,的确如此,当然如果只是适用于现代浏览器(IE9.10.11 | ff, chorme, safari, ...
- 常用原生JS兼容性写法汇总
1.添加事件方法 addHandler:function(element,type,handler){ if(element.addEventListener){//检测是否为DOM2级方法 elem ...
- 原生JS与jQuery文档加载完毕的写法
HTML是有执行顺序的,默认是自上而下执行.所以当我们的js代码在html代码下边的时候,可以正常执行,而当我们的js代码在html代码上边的时候,可以就无法正常执行了,这时,我们需要在文档加载完毕的 ...
- 原生js方法document.getElementsByClassName在ie8及其以下的兼容性问题
document.getElementsByClassName在ie8及其以下浏览器的兼容性问题,在ie8及其以下浏览器中不能使用,针对这个问题,下面给出详细的解决方法,感兴趣的朋友可以参考下 ...
- 原生JS forEach()和map()遍历的区别以及兼容写法
一.原生JS forEach()和map()遍历 共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前 ...
随机推荐
- 【POJ 2407】 Relatives
[题目链接] 点击打开链接 [算法] 欧拉函数 [代码] #include <algorithm> #include <bitset> #include <cctype& ...
- javascript之递归得DOM文本
var tag=document.getElementsByTagName('body')[0]; function findChild(tag){ var child=tag.childNodes ...
- registerWithTouchDispatcher 注册单点触摸事件
Doc: If isTouchEnabled, this method is called onEnter. Override it to change the way CCLayer receive ...
- 从MyEclipse到IntelliJ IDEA
如何做到全键盘操作呢? 1.自定义快捷键实现全屏操作 你可以设置自定义快捷键进入全屏操作,并实现各个窗口之间的切换.这样,你就可以告别小窗口的时代,体验全屏显示的效果了!(相信有过多年开发经验的你一定 ...
- MyEclipse10.0的破解过程详细图解
1 首先下载破解软件包:http://pan.baidu.com/s/1pLB6xEb 并解压: 2 按照百度经验操作即可http://jingyan.baidu.com/article/cbf0e5 ...
- 6-10 SVM支持向量机1
都是特征加上分类器.还将为大家介绍如何对这个数据进行训练.如何训练得到这样一组数据. 其实SVM支持向量机,它的本质仍然是一个分类器.既然是一个分类器,它就具有分类的功能.我们可以使用一条直线来完成分 ...
- Codechef LOCAUG17
做完题目很少有写题解的习惯,强行PO一组吧. 比赛链接:https://www.codechef.com/LOCAUG17 PRINCESS 给定字符串s,问s是否存在长度大于1的回文子串. 解:分两 ...
- B - Soldier and Badges
Time Limit:3000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description Colone ...
- 2.25-2.26 MapReduce执行流程Shuffle讲解
原文链接:https://langyu.iteye.com/blog/992916 Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是 ...
- hadoop中的序列化
此文已由作者肖凡授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近在学习hadoop,发现hadoop的序列化过程和jdk的序列化有很大的区别,下面就来说说这两者的区别都有 ...