IScroll5兼容IE修改

水平不到家,沒法像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;
}

初次寫博,不甚嚴謹。敬請見諒

相關文章
相關標籤/搜索