js相容事件

來源:互聯網
上載者:User

標籤:ati   添加   雜湊   pos   ext   define   預設   ntb   sheet   

//瀏覽器檢測
(function () {
window.sys = {};
var ua = navigator.userAgent.toLowerCase();
var s;
(s = ua.match(/msie ([\d.]+)/)) ? sys.ie = s[1] :
(s = ua.match(/firefox\/([\d.]+)/)) ? sys.firefox = s[1] :
(s = ua.match(/chrome\/([\d.]+)/)) ? sys.chrome = s[1] :
(s = ua.match(/opera\/.*version\/([\d.]+)/)) ? sys.opera = s[1] :
(s = ua.match(/version\/([\d.]+).*safari/)) ? sys.safari = s[1] : 0;

if (/webkit/.test(ua)) sys.webkit = ua.match(/webkit\/([\d.]+)/)[1];
})();

//DOM載入
function addDomLoaded(fn) {
var isReady = false;
var timer = null;
function doReady() {
if (timer) clearInterval(timer);
if (isReady) return;
isReady = true;
fn();
}

if ((sys.opera && sys.opera < 9) || (sys.firefox && sys.firefox < 3) || (sys.webkit && sys.webkit < 525)) {
//無論採用哪種,基本上用不著了
/*timer = setInterval(function () {
if (/loaded|complete/.test(document.readyState)) { //loaded是部分載入,有可能只是DOM載入完畢,complete是完全載入,類似於onload
doReady();
}
}, 1);*/

timer = setInterval(function () {
if (document && document.getElementById && document.getElementsByTagName && document.body) {
doReady();
}
}, 1);
} else if (document.addEventListener) {//W3C
addEvent(document, ‘DOMContentLoaded‘, function () {
fn();
removeEvent(document, ‘DOMContentLoaded‘, arguments.callee);
});
} else if (sys.ie && sys.ie < 9){
var timer = null;
timer = setInterval(function () {
try {
document.documentElement.doScroll(‘left‘);
doReady();
} catch (e) {};
}, 1);
}
}

//跨瀏覽器添加事件綁定
function addEvent(obj, type, fn) {
if (typeof obj.addEventListener != ‘undefined‘) {
obj.addEventListener(type, fn, false);
} else {
//建立一個存放事件的雜湊表(散列表)
if (!obj.events) obj.events = {};
//第一次執行時執行
if (!obj.events[type]) {
//建立一個存放事件處理函數的數組
obj.events[type] = [];
//把第一次的事件處理函數先儲存到第一個位置上
if (obj[‘on‘ + type]) obj.events[type][0] = fn;
} else {
//同一個註冊函數進行屏蔽,不添加到計數器中
if (addEvent.equal(obj.events[type], fn)) return false;
}
//從第二次開始我們用事件計數器來儲存
obj.events[type][addEvent.ID++] = fn;
//執行事件處理函數
obj[‘on‘ + type] = addEvent.exec;
}
}

//為每個事件分配一個計數器
addEvent.ID = 1;

//執行事件處理函數
addEvent.exec = function (event) {
var e = event || addEvent.fixEvent(window.event);
var es = this.events[e.type];
for (var i in es) {
es[i].call(this, e);
}
};

//同一個註冊函數進行屏蔽
addEvent.equal = function (es, fn) {
for (var i in es) {
if (es[i] == fn) return true;
}
return false;
}

//把IE常用的Event對象配對到W3C中去
addEvent.fixEvent = function (event) {
event.preventDefault = addEvent.fixEvent.preventDefault;
event.stopPropagation = addEvent.fixEvent.stopPropagation;
event.target = event.srcElement;
return event;
};

//IE阻止預設行為
addEvent.fixEvent.preventDefault = function () {
this.returnValue = false;
};

//IE取消冒泡
addEvent.fixEvent.stopPropagation = function () {
this.cancelBubble = true;
};


//跨瀏覽器刪除事件
function removeEvent(obj, type, fn) {
if (typeof obj.removeEventListener != ‘undefined‘) {
obj.removeEventListener(type, fn, false);
} else {
if (obj.events) {
for (var i in obj.events[type]) {
if (obj.events[type][i] == fn) {
delete obj.events[type][i];
}
}
}
}
}


//跨瀏覽器擷取視口大小
function getInner() {
if (typeof window.innerWidth != ‘undefined‘) {
return {
width : window.innerWidth,
height : window.innerHeight
}
} else {
return {
width : document.documentElement.clientWidth,
height : document.documentElement.clientHeight
}
}
}

//跨瀏覽器擷取捲軸位置
function getScroll() {
return {
top : document.documentElement.scrollTop || document.body.scrollTop,
left : document.documentElement.scrollLeft || document.body.scrollLeft
}
}


//跨瀏覽器擷取Style
function getStyle(element, attr) {
var value;
if (typeof window.getComputedStyle != ‘undefined‘) {//W3C
value = window.getComputedStyle(element, null)[attr];
} else if (typeof element.currentStyle != ‘undeinfed‘) {//IE
value = element.currentStyle[attr];
}
return value;
}


//判斷class是否存在
function hasClass(element, className) {
return element.className.match(new RegExp(‘(\\s|^)‘ +className +‘(\\s|$)‘));
}


//跨瀏覽器添加link規則
function insertRule(sheet, selectorText, cssText, position) {
if (typeof sheet.insertRule != ‘undefined‘) {//W3C
sheet.insertRule(selectorText + ‘{‘ + cssText + ‘}‘, position);
} else if (typeof sheet.addRule != ‘undefined‘) {//IE
sheet.addRule(selectorText, cssText, position);
}
}

//跨瀏覽器移出link規則
function deleteRule(sheet, index) {
if (typeof sheet.deleteRule != ‘undefined‘) {//W3C
sheet.deleteRule(index);
} else if (typeof sheet.removeRule != ‘undefined‘) {//IE
sheet.removeRule(index);
}
}

//跨瀏覽器擷取innerText
function getInnerText(element) {
return (typeof element.textContent == ‘string‘) ? element.textContent : element.innerText;
}

//跨瀏覽器設定innerText
function setInnerText(elememt, text) {
if (typeof element.textContent == ‘string‘) {
element.textContent = text;
} else {
element.innerText = text;
}
}

//擷取某一個元素到最外層頂點的位置
function offsetTop(element) {
var top = element.offsetTop;
var parent = element.offsetParent;
while (parent != null) {
top += parent.offsetTop;
parent = parent.offsetParent;
}
return top;
}

//刪除左後空格
function trim(str) {
return str.replace(/(^\s*)|(\s*$)/g, ‘‘);
}

//某一個值是否存在某一個數組中
function inArray(array, value) {
for (var i in array) {
if (array[i] === value) return true;
}
return false;
}

//擷取某一個節點的上一個節點的索引
function prevIndex(current, parent) {
var length = parent.children.length;
if (current == 0) return length - 1;
return parseInt(current) - 1;
}

//擷取某一個節點的下一個節點的索引
function nextIndex(current, parent) {
var length = parent.children.length;
if (current == length - 1) return 0;
return parseInt(current) + 1;
}

//捲軸固定
function fixedScroll() {
window.scrollTo(fixedScroll.left, fixedScroll.top);
}

//阻止預設行為
function predef(e) {
e.preventDefault();
}

//建立cookie
function setCookie(name, value, expires, path, domain, secure) {
var cookieText = encodeURIComponent(name) + ‘=‘ + encodeURIComponent(value);
if (expires instanceof Date) {
cookieText += ‘; expires=‘ + expires;
}
if (path) {
cookieText += ‘; expires=‘ + expires;
}
if (domain) {
cookieText += ‘; domain=‘ + domain;
}
if (secure) {
cookieText += ‘; secure‘;
}
document.cookie = cookieText;
}

//擷取cookie
function getCookie(name) {
var cookieName = encodeURIComponent(name) + ‘=‘;
var cookieStart = document.cookie.indexOf(cookieName);
var cookieValue = null;
if (cookieStart > -1) {
var cookieEnd = document.cookie.indexOf(‘;‘, cookieStart);
if (cookieEnd == -1) {
cookieEnd = document.cookie.length;
}
cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
}
return cookieValue;
}

//刪除cookie
function unsetCookie(name) {
document.cookie = name + "= ; expires=" + new Date(0);
}

js相容事件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.