水平不到家,沒法像js大神那樣講得頭頭是道。僅作記錄,以備後查。javascript
iScroll5是不兼容IE低版本的。爲兼容IE低版本(以IE8爲例),需作如下工做:html
一、事件綁定方式兼容java
衆所周知,獨特的IE有它本身事件處理的方法attachEvent和detachEvent。IScroll5的事件處理統一使用的是utils中的addEvent和removeEvent。須要使這兩個方法的方法實現兼容IE8。最終結果以下:瀏覽器
me.addEvent = function (el, type, fn, capture) { if (el.addEventListener) { el.addEventListener(type, fn, !!capture); } else { if (typeof fn === 'object' && fn.handleEvent) { el.attachEvent('on' + type, function () { fn.handleEvent.call(fn); }); } else { el.attachEvent('on' + type, fn); } } }; me.removeEvent = function (el, type, fn, capture) { if (el.removeEventListener) { el.removeEventListener(type, fn, !!capture); } else { if (typeof fn === 'object' && fn.handleEvent) { el.detachEvent('on' + type, function () { fn.handleEvent.call(fn); }); } else { el.detachEvent('on' + type, fn); } } };
爲何這麼寫,從http://www.veryhuo.com/a/view/50318.html這篇文章中得知IE9 是 IE 家族中第一個支持 addEventListener + handleEvent 的瀏覽器,IE9 以前的版本連 addEventListener 也沒能支持。因此就不得不添加對fn類型和handleEvent方法的判斷。spa
二、事件傳參e的處理htm
IE事件捕捉接受的參數e爲undefined,因此兼容寫法須要在方法體插入首行:e = e || window.event;這樣的兼容寫法。blog
三、e.preventDefault()和e.stopPropagation()的兼容寫法事件
e.preventDefault()的兼容寫法:ip
if (e.preventDefault) { e.preventDefault(); } else { e.returnValue = false; }
stopPropagation()的兼容寫法:rem
if (e.stopPropagation) { e.stopPropagation(); } else { e.cancelBubble = true; }
初次寫博,不甚嚴謹。敬請見諒