首页 > 其他 > 详细

浏览器兼容 – 事件兼容(1): 鼠标滚轮事件的firefox兼容

时间:2021-01-08 14:57:02      阅读:20      评论:0      收藏:0      [点我收藏+]

 

时代的印记,在W3C规范尚未形成,ECMAScript标准尚未建立的上古时代,各家浏览器厂商都形成了各自对JS的理解,继而各自打下各自的江山,建立各自的帝国。

正是因为各家浏览器对JS的理解和实现不同,继而导致了后续的各种不一致,逼得可怜的前端人不得不去兼容各种不同的浏览器。今次话题:WebKit内核浏览器、Gecko内核浏览器 的鼠标滚轮事件兼容

1、判定浏览器所属

既然是浏览器的兼容,那么肯定要先知道你所用的浏览器是什么浏览器

function getBrowserType() {
  var userAgent = navigator.userAgent;
  alert(userAgent);
  var isOpera = userAgent.indexOf("Opera") > -1; // Opera浏览器
  var isIE10orLess =
    userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; // IE10以下
  var isIE11 =
    userAgent.indexOf("Trident") > -1 && userAgent.indexOf("rv:11.0") > -1; // IE11
  var isFirefox = userAgent.indexOf("Firefox") > -1; // 火狐浏览器
  var isSafari =
    userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") === -1; // Safari浏览器
  var isChrome = // 谷歌浏览器
    userAgent.indexOf("Chrome") > -1 &&
    userAgent.indexOf("Safari") > -1 &&
    userAgent.indexOf("Edge") === -1;
  // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
  var isEdge = userAgent.indexOf("Edge") > -1 && !isIE10orLess; // Edge浏览器

  var trident = userAgent.indexOf("Trident") > -1; //IE内核
  var presto = userAgent.indexOf("Presto") > -1; //opera内核
  var webKit = userAgent.indexOf("AppleWebKit") > -1; //苹果、谷歌内核
  var gecko =
    userAgent.indexOf("Gecko") > -1 && userAgent.indexOf("KHTML") === -1; //火狐内核
  var mobile = !!userAgent.match(/AppleWebKit.*Mobile.*/); //是否为移动终端
  var ios = !!userAgent.match(/\(i[^;]+;( userAgent;)? CPU.+Mac OS X/); //ios终端
  var android =
    userAgent.indexOf("Android") > -1 || userAgent.indexOf("Adr") > -1; //android终端
  var iPhone = userAgent.indexOf("iPhone") > -1; //是否为iPhone或者QQHD浏览器
  var iPad = userAgent.indexOf("iPad") > -1; //是否iPad
  var webApp = userAgent.indexOf("Safari") === -1; //是否web应该程序,没有头部与底部
  var weixin = userAgent.indexOf("MicroMessenger") > -1; //是否微信 (2015-01-22新增)
  var qq = userAgent.match(/\sQQ/i) === " qq"; //是否QQ
  var windowPhone = userAgent.indexOf("Windows Phone") > -1;

  if (isIE10orLess) {
    var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
    reIE.test(userAgent);
    var fIEVersion = parseFloat(RegExp["$1"]);
    if (fIEVersion === 7) {
      return "IE7";
    } else if (fIEVersion === 8) {
      return "IE8";
    } else if (fIEVersion === 9) {
      return "IE9";
    } else if (fIEVersion === 10) {
      return "IE10";
    } else {
      return "0";
    } //IE版本过低
  }
  if (isIE11) {
    return "IE11";
  }
  if (isFirefox) {
    return "Firefox";
  }
  if (isOpera) {
    return "Opera";
  }
  if (isSafari) {
    return "Safari";
  }
  if (isChrome) {
    return "Chrome";
  }
  if (isEdge) {
    return "Edge";
  }
}

2、鼠标滚轮事件兼容

function addMouseWheel(obj,fn,preventDefault){
    //添加绑定
    if(window.navigator.userAgent.toLowerCase().indexOf("firefox") != -1){
        obj.addEventListener("DOMMouseScroll",fnWheel,false);  
    } else {
        obj.onmousewheel = fnWheel;
    }
     
    function fnWheel(ev){
        var oEvent = ev || event;
        var bDown = true;//
        if(oEvent.wheelDelta){//ie chrome
            console.log(oEvent.wheelDelta)
            bDown = oEvent.wheelDelta > 0 ? false:true;
        } else {//ff
            console.log(oEvent.detail)
            bDown = oEvent.detail > 0 ? true:false;
        }
        (typeof fn == "function") && fn(bDown);
        if(preventDefault){
            oEvent.preventDefault && oEvent.preventDefault();
            return false;
        }
    }
}

 

浏览器兼容 – 事件兼容(1): 鼠标滚轮事件的firefox兼容

原文:https://www.cnblogs.com/donghuang/p/14250324.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!