`
xiaoyao8903
  • 浏览: 21591 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

JS中常遇到的浏览器兼容问题和解决方法

 
阅读更多

今天整理了一下浏览器对JS的兼容问题,希望能给你们带来帮助,我没想到的地方请留言给我,我再加上;

常遇到的关于浏览器的宽高问题:

//以下均可console.log实验 var winW=document.body.clientWidth||document.docuemntElement.clientWidth;//网页可见区域宽 var winH=document.body.clientHeight||document.docuemntElement.clientHeight;//网页可见区域宽 //以上为不包括边框的宽高,如果是offsetWidth或者offsetHeight的话包括边框 var winWW=document.body.scrollWidth||document.docuemntElement.scrollWidth;//整个网页的宽 var winHH=document.body.scrollHeight||document.docuemntElement.scrollHeight;//整个网页的高 var scrollHeight=document.body.scrollTop||document.docuemntElement.scrollTop;//网页被卷去的高 var scrollLeft=document.body.scrollLeft||document.docuemntElement.scrollLeft;//网页左卷的距离 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坐标

event事件问题:

//event事件问题 document.onclick=function(ev){//谷歌火狐的写法,IE9以上支持,往下不支持; var e=ev; console.log(e); } document.onclick=function{//谷歌和IE支持,火狐不支持; var e=event; console.log(e); } document.onclick=function(ev){//兼容写法; var e=ev||window.event; var mouseX=e.clientX;//鼠标X轴的坐标 var mouseY=e.clientY;//鼠标Y轴的坐标 }

DOM节点相关的问题,我直接封装了函数,以便随时可以拿来使用:

//DOM节点相关,主要兼容IE 6 7 8 function nextnode(obj){//获取下一个兄弟节点 if (obj.nextElementSibling) { return obj.nextElementSibling; } else{ return obj.nextSibling; }; } function prenode(obj){//获取上一个兄弟节点 if (obj.previousElementSibling) { return obj.previousElementSibling; } else{ return obj.previousSibling; }; } function firstnode(obj){//获取第一个子节点 if (obj.firstElementChild) { return obj.firstElementChild;//非IE678支持 } else{ return obj.firstChild;//IE678支持 }; } function lastnode(obj){//获取最后一个子节点 if (obj.lastElementChild) { return obj.lastElementChild;//非IE678支持 } else{ return obj.lastChild;//IE678支持 }; }

document.getElementsByClassName问题:

//通过类名获取元素 document.getElementsByClassName('');//IE 6 7 8不支持; //这里可以定义一个函数来解决兼容问题,当然别在这给我提jQuery... //第一个为全局获取类名,第二个为局部获取类名 function byClass1(oClass){//全局获取,oClass为你想要查找的类名,没有“.” var tags=document.all?document.all:document.getElementsByTagName('*'); var arr=; for (var i = 0; i < tags.length; i++) { var reg=new RegExp('\\b'+oClass+'\\b','g'); if (reg.test(tags[i].className)) { arr.push(tags[i]); }; }; return arr;//注意返回的也是数组,包含你传入的class所有元素; } function byClass2(parentID,oClass){//局部获取类名,parentID为你传入的父级ID var parent=document.getElementById(parentID); var tags=parent.all?parent.all:parent.getElementsByTagName('*'); var arr=; for (var i = 0; i < tags.length; i++) { var reg=new RegExp('\\b'+oClass+'\\b','g'); if (reg.test(tags[i].className)) { arr.push(tags[i]); }; }; return arr;//注意返回的也是数组,包含你传入的class所有元素; }

获取元素的非行间样式值:

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

设置监听事件:

//设置监听事件 function addEvent(obj,type,fn){//添加事件监听,三个参数分别为 对象、事件类型、事件处理函数,默认为false if (obj.addEventListener) { obj.addEventListener(type,fn,false);//非IE } else{ obj.attachEvent('on'+type,fn);//ie,这里已经加上on,传参的时候注意不要重复加了 }; } function removeEvent(obj,type,fn){//删除事件监听 if (obj.removeEventListener) { obj.removeEventListener(type,fn,false);//非IE } else{ obj.detachEvent('on'+type,fn);//ie,这里已经加上on,传参的时候注意不要重复加了 }; }

元素到浏览器边缘的距离:

//在这里加个元素到浏览器边缘的距离,很实用 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阻止事件传播,这里使用click事件为例 document.onclick=function(e){ var e=e||window.event; if (e.stopPropagation) { e.stopPropagation;//W3C标准 }else{ e.cancelBubble=true;//IE.... } }

阻止默认事件:

//js阻止默认事件 document.onclick=function(e){ var e=e||window.event; if (e.preventDefault) { e.preventDefault;//W3C标准 }else{ e.returnValue='false';//IE.. } }

关于EVENT事件中的target:

//关于event事件中的target document.onmouseover=function(e){ var e=e||window.event; var Target=e.target||e.srcElement;//获取target的兼容写法,后面的为IE var from=e.relatedTarget||e.formElement;//鼠标来的地方,同样后面的为IE... var to=e.relatedTarget||e.toElement;//鼠标去的地方 }

鼠标滚轮滚动事件:

//鼠标滚轮事件 //火狐中的滚轮事件 document.addEventListener("DOMMouseScroll",function(event){ alert(event.detail);//若前滚的话为 -3,后滚的话为 3 },false) //非火狐中的滚轮事件 document.onmousewheel=function(event){ alert(event.detail);//前滚:120,后滚:-120 }

节点加载:

//火狐下特有的节点加载事件,就是节点加载完才执行,和onload不同 //感觉用到的不多,直接把js代码放在页面结构后面一样能实现。。 document.addEventListener('DOMContentLoaded',function {},false);//DOM加载完成。好像除IE6-8都可以.
分享到:
评论

相关推荐

    谈谈JS中常遇到的浏览器兼容问题和解决方法

    本文将探讨一些常见的JavaScript浏览器兼容问题及其解决方法。 首先,涉及到的是浏览器窗口的宽高获取。在不同浏览器中,获取网页可见区域宽高的方式有所不同。`document.body.clientWidth` 和 `document.body....

    Dom与浏览器兼容性说明

    作为一个Web前端工作者,你是否在工作中常被浏览器兼容性问题所困惑.例如Css样式? 明明在 IE浏览器里显示一切正常的网页.到了FireFox或谷歌浏览器中却乱作一团.或许你在使用JavaScript和Dom编写网页脚本时,也...

    RTMP视频流播放的浏览器插件

    总的来说,这个插件是为了解决在IE11这样的旧版浏览器上播放RTMP视频的问题,通过Flash技术和video.js库,提供了一种兼容性和用户体验的平衡。随着技术的发展,建议逐步转向支持HTML5的新浏览器和协议,如HLS或DASH...

    js 跨域解决方案

    在实际开发中,应根据项目需求和浏览器兼容性选择合适的跨域策略。例如,对于前后端分离的现代应用,CORS是最常用且推荐的解决方案。同时,对于开发环境,使用代理服务器可以方便地解决跨域问题,使得前端开发不受...

    文本框中,回车键触发事件的js代码[多浏览器兼容]

    标题“文本框中,回车键触发事件的js代码[多浏览器兼容]”所指的知识点涉及JavaScript脚本编程,在网页中如何捕捉和处理回车键的按键事件,以及如何确保该事件处理在不同的浏览器(如IE和Firefox)中均能正确运行。...

    纯JS编写的许愿墙,还是不错的

    总结来说,这个纯JS编写的许愿墙项目展示了JavaScript在创建动态网页内容上的强大能力,同时也提醒我们在开发时需要关注浏览器兼容性和可扩展性。通过深入理解并应用JavaScript,开发者可以创造出各种创新的互动元素...

    ASP.NET中常用输出JS脚本的类实例

    同时,文章中提到的周公对原类的改进和优化,确保了类的向下兼容性,让现有的代码库能够无缝过渡到新的输出方法。 总的来说,本文的知识点主要集中在***中输出JS脚本的类的使用和改进上。通过实际的代码实例和解释...

    JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案

    而本文则提供了一个针对特定浏览器兼容性问题的解决方案,希望能够帮助遇到相同问题的开发者。 总结来说,本文提供了针对Bootstrap Table组件在IE浏览器中实现列冻结功能时出现的兼容性问题的解决方案。通过修改...

    广告轮播JS特效-3D图片层叠旋转木马切换

    在实际应用中,开发者常常面临浏览器兼容性问题,因为不同的浏览器对某些JS特性支持程度不同。此特效能够广泛应用于各种浏览器环境,意味着它的代码结构优化得相当好,可能采用了条件注释、polyfill库或者其他的兼容...

    单击其它区域关闭日历控件(兼容firfox与IE)

    它可能是一个自定义的日历插件或者库,包含了一些特定的函数和方法,用于创建、显示和关闭日历,以及处理用户的点击事件。在分析这个文件时,我们可以期待找到关于如何绑定事件、如何检测点击位置、以及如何在不同...

    web前端5大类型面试题汇总

    最后,文档提出了HTML5新特性的问题以及如何处理新标签的浏览器兼容问题。HTML5不仅仅增加了新的语义化标签,还引入了`localStorage`、`sessionStorage`、`Web Workers`、`WebSockets`、`Geolocation`等技术,极大地...

    前端面试资料(包含web前端优化方法和js面试常见内容以及一些面试常见问题)

    例如IE浏览器的特定问题和hack技巧。 - **CSS基本功** 如布局技术(如Flexbox、Grid)、盒子模型、选择器优先级等。 - **HTML5与CSS3新特性** 包括多媒体元素、动画效果等。 #### 三、JavaScript基础知识 - *...

    js日历控件日期多选Kalendajs

    6. **兼容性**:虽然Kalendajs通常能良好地运行在现代浏览器上,但考虑到浏览器兼容性问题,确保它在各种环境下都能正常工作是必要的。可能需要使用polyfills来弥补某些旧浏览器不支持的特性。 7. **无障碍性**:...

    js代码实现图片上传阿里云OSS

    JavaScript(简称JS)是一种广泛用于客户端Web开发的脚本语言,它在网页中常用于处理用户的交互、操作DOM以及与服务器进行数据交换。在本文中,我们将深入探讨如何使用JS实现图片上传到阿里云对象存储服务(OSS)。...

    JS固定表头和左边列(支持合并单元格)v1.6

    总之,“JS固定表头和左边列(支持合并单元格)v1.6”是一个实用的JavaScript工具,它解决了大数据量表格的显示问题,提供了良好的兼容性和性能优化,特别适合需要展示复杂表格的Web应用程序。通过深入理解其工作...

    JavaScript特效,倒计时,分页,树形菜单,图片闪烁

    在实际应用中,还需要考虑到浏览器兼容性问题,可能需要引入jQuery等库来简化跨浏览器的开发工作。此外,为了优化用户体验,通常会结合Ajax技术来实现异步加载数据,使得页面操作更加流畅。这些JavaScript特效的应用...

    走出JavaScript初学困境—js初学

    《JavaScript权威指南》等教材可以帮助梳理这些概念,明确各种方法的区别,如标准方法与非标准方法,以及它们的浏览器兼容性。了解这些,可以使问题变得具体,减少疑惑,提升学习效率。 二、理解JavaScript的历史...

    Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法

    总结来说,Chrome浏览器对`showModalDialog`的支持不足,开发者需要采取额外的步骤来确保跨浏览器兼容性。上述解决方案通过利用`window.opener`属性,能够有效地解决Chrome中`showModalDialog`的模态对话框和返回值...

Global site tag (gtag.js) - Google Analytics