全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解js几个绕不开的事件兼容写法

本文介绍了详解js几个绕不开的事件兼容写法,分享给大家,具体如下:

1、键盘事件 keyCode 兼容性写法

var inp = document.getElementById('inp')
var result = document.getElementById('result')

function getKeyCode(e) {
 e = e ? e : (window.event ? window.event : "")
 return e.keyCode ? e.keyCode : e.which
}

inp.onkeypress = function(e) {
 result.innerHTML = getKeyCode(e)
}

2、求窗口大小的兼容写法

当我们获取滚动条滚动距离时:

IE,Chrome: document.body.scrollTop

FF: document.documentElement.scrollTop

// 浏览器窗口可视区域大小(不包括工具栏和滚动条等边线)
// 1600 * 525
var client_w = document.documentElement.clientWidth || document.body.clientWidth;
var client_h = document.documentElement.clientHeight || document.body.clientHeight;

// 网页内容实际宽高(包括工具栏和滚动条等边线)
// 1600 * 8
var scroll_w = document.documentElement.scrollWidth || document.body.scrollWidth;
var scroll_h = document.documentElement.scrollHeight || document.body.scrollHeight;

// 网页内容实际宽高 (不包括工具栏和滚动条等边线)
// 1600 * 8
var offset_w = document.documentElement.offsetWidth || document.body.offsetWidth;
var offset_h = document.documentElement.offsetHeight || document.body.offsetHeight;

// 滚动的高度
var scroll_Top = document.documentElement.scrollTop||document.body.scrollTop;

3、DOM 事件处理程序的兼容写法(能力检测)

var eventshiv = {
  // event兼容
  getEvent: function(event) {
    return event ? event : window.event;
  },

  // type兼容
  getType: function(event) {
    return event.type;
  },

  // target兼容
  getTarget: function(event) {
    return event.target ? event.target : event.srcelem;
  },

  // 添加事件句柄
  addHandler: function(elem, type, listener) {
    if (elem.addEventListener) {
      elem.addEventListener(type, listener, false);
    } else if (elem.attachEvent) {
      elem.attachEvent('on' + type, listener);
    } else {
      // 在这里由于.与'on'字符串不能链接,只能用 []
      elem['on' + type] = listener;
    }
  },

  // 移除事件句柄
  removeHandler: function(elem, type, listener) {
    if (elem.removeEventListener) {
      elem.removeEventListener(type, listener, false);
    } else if (elem.detachEvent) {
      elem.detachEvent('on' + type, listener);
    } else {
      elem['on' + type] = null;
    }
  },

  // 添加事件代理
  addAgent: function (elem, type, agent, listener) {
    elem.addEventListener(type, function (e) {
      if (e.target.matches(agent)) {
        listener.call(e.target, e); // this 指向 e.target
      }
    });
  },

  // 取消默认行为
  preventDefault: function(event) {
    if (event.preventDefault) {
      event.preventDefault();
    } else {
      event.returnValue = false;
    }
  },

  // 阻止事件冒泡
  stopPropagation: function(event) {
    if (event.stopPropagation) {
      event.stopPropagation();
    } else {
      event.cancelBubble = true;
    }
  }
};

4、解决 IE9 以下浏览器不能使用 opacity

opacity: 0.5;
filter: alpha(opacity = 50);
filter: progid:DXImageTransform.Microsoft.Alpha(style = 0, opacity = 50);

5、为一个元素绑定两个相同事件:attachEvent/attachEventLister 出现的兼容问题

事件绑定:(不兼容需要两个结合做兼容if..else..)

IE8以下用: attachEvent('事件名',fn);

FF,Chrome,IE9-10用: attachEventLister('事件名',fn,false);

 function myAddEvent(obj,ev,fn){
   if(obj.attachEvent){
    //IE8以下
    obj.attachEvent('on'+ev,fn);
   }else{
    //FF,Chrome,IE9-10
    obj.attachEventLister(ev,fn,false);
   }
  }

6、获取元素的非行间样式值

function getStyle(object,oCss) {
    if (object.currentStyle) {
     return object.currentStyle[oCss];//IE
    }else{
     return getComputedStyle(object,null)[oCss];//除了IE
    }
  }

7、节点加载

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# js兼容性写法  # js  # 兼容写法  # event兼容写法  # js事件源window.event.srcElement兼容性写法(详解)  # JS onkeypress兼容性写法详解  # 常用原生JS兼容性写法汇总  # Javascript selection的兼容性写法介绍  # IE与Firefox下javascript getyear年份的兼容性写法  # 滚动条  # 加载  # 句柄  # 不包括  # 绑定  # 几个  # 在这里  # 行间  # 放在  # 不多  # 给大家  # 火狐  # 当我们  # 不开  # 特有的  # 只能用  # 大家多多  # 移除  # 不兼容  # getEvent 


相关文章: 网页设计与网站制作内容,怎样注册网站?  如何在IIS中新建站点并配置端口与物理路径?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  如何在自有机房高效搭建专业网站?  建站之星云端配置指南:模板选择与SEO优化一键生成  如何在景安服务器上快速搭建个人网站?  广平建站公司哪家专业可靠?如何选择?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  C#如何在一个XML文件中查找并替换文本内容  如何零基础在云服务器搭建WordPress站点?  建站主机解析:虚拟主机配置与服务器选择指南  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  建站之星如何修改网站生成路径?  宁波免费建站如何选择可靠模板与平台?  建站之星北京办公室:智能建站系统与小程序生成方案解析  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  网站企业制作流程,用什么语言做企业网站比较好?  太原网站制作公司有哪些,网约车营运证查询官网?  宝塔新建站点报错如何解决?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  内部网站制作流程,如何建立公司内部网站?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  建站上市公司网站建设方案与SEO优化服务定制指南  如何注册花生壳免费域名并搭建个人网站?  如何快速搭建FTP站点实现文件共享?  如何快速生成专业多端适配建站电话?  ,网站推广常用方法?  广州营销型建站服务商推荐:技术优势与SEO优化解析  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  建站VPS配置与SEO优化指南:关键词排名提升策略  如何选择高效便捷的WAP商城建站系统?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  建站主机选哪种环境更利于SEO优化?  网站按钮制作软件,如何实现网页中按钮的自动点击?  Swift开发中switch语句值绑定模式  已有域名建站全流程解析:网站搭建步骤与建站工具选择  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  定制建站哪家更专业可靠?推荐榜单揭晓  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  北京网站制作公司哪家好一点,北京租房网站有哪些?  ,网页ppt怎么弄成自己的ppt? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。