在 樣式佈局分享-基於frozen.js的移動OA 文章中,用了到第三方組件 tab.js(帶菜單的橫屏滑動插件),其兼容性不好,進行優化後,已兼容全平臺(且支持IE6+)。javascript
一直據說過IE6~IE9瀏覽器的兼容性問題是深坑,此次終於有所體會,就本次優化tab.js而言,若是不對IE6~IE9進行兼容,工做量能夠減小一倍。git
特此把遇到的各類瀏覽器兼容性問題進行彙總,但願對你們有所幫助。github
說明:去掉字符串中的空格。web
// 如下爲兼容寫法 String.prototype.trim = function () { return this.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }
說明:它是由瀏覽器專門爲動畫提供的API,效果和setTimeout/setInterval相似。瀏覽器
// 如下爲兼容寫法 var rAF = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) { window.setTimeout(callback, 1000 / 60); };
說明:爲元素綁定事件。微信
// 如下寫法能夠兼容大部分狀況 var addHandler = function(el, type, handler, args) { if (el.addEventListener) { el.addEventListener(type, handler, false); } else if (el.attachEvent) { el.attachEvent('on' + type, handler); } else { el['on' + type] = handler; } }; var removeHandler = function(el, type, handler, args) { if (el.removeEventListener) { el.removeEventListener(type, handler, false); } else if (el.detachEvent) { el.detachEvent('on' + type, handler); } else { el['on' + type] = null; } };
說明:引起事件的DOM元素。frontend
// 如下爲兼容寫法 target = event.target || event.srcElement;
說明:若是事件對象的cancelable屬性爲true,則該方法能夠取消事件的默認動做,但並不取消事件的冒泡行爲。(如下爲兼容方法)佈局
// 如下爲兼容寫法 event.preventDefault ? event.preventDefault() : (event.returnValue = false);
說明:阻止事件的冒泡行爲。優化
// 如下爲兼容寫法 event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = false);
說明:鼠標在頁面上的位置,從頁面左上角開始,便是以頁面爲參考點,不隨滑動條移動而變化。
// 如下爲兼容寫法 var touches = e.touches ? e.touches[0] : e; var pageX = (touches.pageX) ? touches.pageX : e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft); var pageY = (touches.pageY) ? touches.pageY : e.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
歡迎關注微信公衆號「劼哥舍」,老斯基帶你飆車。