JavaScript事件處理兼容性總結

吳青強 8年前發布 | 8K 次閱讀 JavaScript開發 JavaScript

事件監聽綁定函數

// eventType為不含"on"的事件類型
var bind = function(ele, eventType, callback) {
    if(ele.addEventListener) {
        // W3C標準寫法
        return ele.addEventListener(eventType, callback, false);
    }else if(ele.attachEvent) {
        // 兼容IE6~8
        return ele.attachEvent(eventType, callback);
    }else {
        // 兼容IE5-
        return ele["on" + eventType] = callback;
    }
}

事件監聽解綁函數

// eventType為不含"on"的事件類型
var unbind = function(ele, eventType, callback) {
    if(ele.removeEventListener) {
        // W3C標準寫法
        return ele.removeEventListener(eventType, callback, false);
    }else if(ele.detachEvent) {
        // 兼容IE6~8
        return ele.detachEvent(eventType, callback);
    }else {
        // 兼容IE5-
        return ele["on" + eventType] = null;
    }
}

重寫window.onload為可多次追加的函數

var addLoadEvent = function(callback) {
    var oldOnLoad = window.onload;
    if(type window.onload != "function") {
        window.onload = callback;
    }else {
        window.onload = function() {
            if(oldOnLoad) {
                oldOnLoad();
            }
            callback();
        }
    }
}

獲取鼠標點擊事件的坐標位置

screenX: 鼠標位置相對于用戶屏幕水平偏移量,參照點也就是原點是屏幕的左上角;

PageX:鼠標在頁面上的位置,從頁面左上角開始,即是以頁面為參考點,不隨滑動條移動而變化;

clientX:鼠標在頁面上可視區域的位置,從瀏覽器可視區域左上角開始,即是以瀏覽器滑動條此刻的滑動到的位置為參考點,隨滑動條移動 而變化.

常見的JavaScript獲取元素位置的API:

function getPosition(e) {
    // 訪問事件對象
    var e = e || window.event;

// 聲明x、y分別為鼠標相對于文檔的位置
var x = 0, y = 0;

// 針對W3C標準瀏覽器具有pageX/Y屬性
if(e.pageX) {
    x = e.pageX;
    y = e.pageY;
}else if(e.clientX) {
    // 在IE6~8中不支持pageX,而是用clientX;但clientX只是相對屏幕視口的橫坐標,不包含滾動寬度;
    var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    // pageX = clientX + scrollX
    x = e.clientX + scrollLeft;
    y = e.clientY + scrollTop;
}
return [x, y];

} </code></pre>

取消默認事件發生

function cancelEvent(event) {
    if(event.preventDefault) {
        e.preventDefault();
    }else {
        // 兼容IE6~8
        event.returnValue = false;
    }
}

防止事件在嵌套元素中傳播

有一個元素嵌套在另一個元素中,他們都捕獲點擊事件。如果想阻止事件傳播,可以使用stopPropagation()函數,在IE6~8中則可以使用cancelBubble = boolean來實現。

function stopPropagation(event) {
    if(event.stopPropagation) {
        event.stopPropagation();
    }else {
        event.cancelBubble = true;
    }
}

獲取鍵盤事件

function keyCode(e) {
    // 訪問事件對象
    var e = e || window.event;
    var key = e.keyCode || e.charCode;
    return key;
}

來自:http://www.dengzhr.com/js/366

 本文由用戶 吳青強 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!