经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
浏览器兼容 – 事件兼容(1): 鼠标滚轮事件的firefox兼容
来源:cnblogs  作者:益州府龙骑校尉  时间:2021/1/11 9:34:51  对本文有异议

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

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

1、判定浏览器所属

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

  1. function getBrowserType() {
  2. var userAgent = navigator.userAgent;
  3. alert(userAgent);
  4. var isOpera = userAgent.indexOf("Opera") > -1; // Opera浏览器
  5. var isIE10orLess =
  6. userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; // IE10以下
  7. var isIE11 =
  8. userAgent.indexOf("Trident") > -1 && userAgent.indexOf("rv:11.0") > -1; // IE11
  9. var isFirefox = userAgent.indexOf("Firefox") > -1; // 火狐浏览器
  10. var isSafari =
  11. userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") === -1; // Safari浏览器
  12. var isChrome = // 谷歌浏览器
  13. userAgent.indexOf("Chrome") > -1 &&
  14. userAgent.indexOf("Safari") > -1 &&
  15. userAgent.indexOf("Edge") === -1;
  16. // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
  17. var isEdge = userAgent.indexOf("Edge") > -1 && !isIE10orLess; // Edge浏览器
  18.  
  19. var trident = userAgent.indexOf("Trident") > -1; //IE内核
  20. var presto = userAgent.indexOf("Presto") > -1; //opera内核
  21. var webKit = userAgent.indexOf("AppleWebKit") > -1; //苹果、谷歌内核
  22. var gecko =
  23. userAgent.indexOf("Gecko") > -1 && userAgent.indexOf("KHTML") === -1; //火狐内核
  24. var mobile = !!userAgent.match(/AppleWebKit.*Mobile.*/); //是否为移动终端
  25. var ios = !!userAgent.match(/\(i[^;]+;( userAgent;)? CPU.+Mac OS X/); //ios终端
  26. var android =
  27. userAgent.indexOf("Android") > -1 || userAgent.indexOf("Adr") > -1; //android终端
  28. var iPhone = userAgent.indexOf("iPhone") > -1; //是否为iPhone或者QQHD浏览器
  29. var iPad = userAgent.indexOf("iPad") > -1; //是否iPad
  30. var webApp = userAgent.indexOf("Safari") === -1; //是否web应该程序,没有头部与底部
  31. var weixin = userAgent.indexOf("MicroMessenger") > -1; //是否微信 (2015-01-22新增)
  32. var qq = userAgent.match(/\sQQ/i) === " qq"; //是否QQ
  33. var windowPhone = userAgent.indexOf("Windows Phone") > -1;
  34. if (isIE10orLess) {
  35. var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
  36. reIE.test(userAgent);
  37. var fIEVersion = parseFloat(RegExp["$1"]);
  38. if (fIEVersion === 7) {
  39. return "IE7";
  40. } else if (fIEVersion === 8) {
  41. return "IE8";
  42. } else if (fIEVersion === 9) {
  43. return "IE9";
  44. } else if (fIEVersion === 10) {
  45. return "IE10";
  46. } else {
  47. return "0";
  48. } //IE版本过低
  49. }
  50. if (isIE11) {
  51. return "IE11";
  52. }
  53. if (isFirefox) {
  54. return "Firefox";
  55. }
  56. if (isOpera) {
  57. return "Opera";
  58. }
  59. if (isSafari) {
  60. return "Safari";
  61. }
  62. if (isChrome) {
  63. return "Chrome";
  64. }
  65. if (isEdge) {
  66. return "Edge";
  67. }
  68. }

2、添加、移除鼠标滚轮事件

  1. // 添加鼠标滚轮事件监听
  2. function addMouseScrollEventListener() {
  3. let browserType = this.getBrowserType()
  4. if (browserType === 'Chrome' || browserType.includes('IE')) {
  5. // chrome and ie
  6. window.addEventListener('mousewheel', this.handleScroll, false)
  7. } else {
  8. // firefox
  9. window.addEventListener('DOMMouseScroll', this.handleScroll, false)
  10. }
  11. }
  12. // 移除鼠标滚轮事件监听
  13. function removeMouseScrollEventListener() {
  14. let browserType = this.getBrowserType()
  15. if (browserType === 'Chrome' || browserType.includes('IE')) {
  16. window.removeEventListener('mousewheel', this.handleScroll)
  17. } else {
  18. window.removeEventListener('DOMMouseScroll', this.handleScroll)
  19. }
  20. }

3、鼠标滚轮事件兼容

  1. function handleScroll(ev) {
  2. var oEvent = ev || event;
  3. var bDown = true; //
  4. if (oEvent.deltaY) {
  5. // ie chrome
  6. // var direction = e.deltaY > 0 ? 'down' : 'up' // 该语句可以用来判断滚轮是向上滑动还是向下
  7. bDown = oEvent.deltaY > 0; // 大于0向下
  8. } else {
  9. // ff event事件对象内没有deltaY属性
  10. bDown = oEvent.detail > 0; // 大于0向下
  11. }
  12. }

 

总结:一句话,浏览器兼容真坑!

原文链接:http://www.cnblogs.com/donghuang/p/14250324.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号