2016年2月19日我的博客文章--遷移到segmentfaultjavascript
當咱們在編寫JS用於處理事件時,因爲考慮到不一樣瀏覽器間Js代碼兼容不一樣,代碼不易記憶,因而作出以下整理。(固然之後還會增長更新的。。。)html
示例代碼以下:java
(1)阻止默認事件node
obj.onclick=function(ev){ var event=ev||window.event; if(event.preventDefault){ event.preventDefault(); /*W3C標準*/ }else{ event.returnValue=false; /*兼容IE*/ } }
小提示:return false; 也能阻止默認事件 可是要注意位置。chrome
(2)獲取下(上)一個兄弟節點segmentfault
function nextnode(obj){ /*獲取下一個兄弟節點*/ if (obj.nextElementSibling) { return obj.nextElementSibling; } else{ return obj.nextSibling; } } function prenode(obj){ /*獲取上一個兄弟節點*/ if (obj.previousElementSibling) { return obj.previousElementSibling; } else{ return obj.previousSibling; } }
(3)獲取第一個子(最後一個)節點瀏覽器
function firstnode(obj){/*獲取第一個子節點*/ if (obj.firstElementChild) { return obj.firstElementChild;/*非IE678支持*/ } else{ return obj.firstChild;/*IE678支持*/ } } function lastnode(obj){/*獲取最後一個子節點*/ if (obj.lastElementChild) { return obj.lastElementChild;/*非IE678支持*/ } else{ return obj.lastChild;/*IE678支持*/ } }
(4)添加(移除)事件監聽app
function addEvent(obj,type,fn){ /*添加事件*/ if(obj.addEventListener){ obj.addEventListener(type,fn,false); //非IE添加事件監聽 }else{ obj.attachEvent('on'+type,fn); //IE添加事件綁定 stopEvent(); } } function removeEvent(obj,type,fn){ //移除事件 if(obj.removeEventListener){ obj.removeEventListener(type,fn,false); //非IE移除事件,移除事件,第三個參數必須是函數名 }else{ obj.detachEvent('on'+type,fn); //IE移除事件 } }
(5)舉例click事件阻止事件傳播異步
obj.onclick=function(ev){ var event=ev||window.event; alert('aa'); if(event.stopPropagation){ event.stopPropagation(); //非IE阻止事件傳播 }else{ event.cancelBubble=true; //IE阻止事件傳播 } }
(6)mouseover與mouseover的事件委託(常常用到,用於去除當 鼠標浮動到元素容器中不一樣子元素間出現閃動問題。只需在函數function(ev){} 頭部添加如下代碼便可)函數
// mouseover委託事件 var event=ev||window.event; // var from=event.fromElement||event.relatedTarget; //在mouseover事件中from,表示鼠標來自哪一個元素,也是事件委託類型,和target與srcElement相反 // alert(from); var from=event.fromElement||event.relatedTarget; while(from){ if (this==from) { return false; }; from=from.parentNode; } //mouseout委託事件 var event=ev||window.event; var to=event.toElement||event.relatedTarget; //在mouseout事件中to,表示鼠標指向那個元素,也是事件委託類型,和target與srcElement相反 // alert(to) while(to){ if (this==to) { return false; }; to=to.parentNode; }
(7)滾輪事件
box.onmousewheel=function (ev){ var event=ev||window.event; // box.innerHTML='鼠標滾動'+event.wheelDelta; if (event.wheelDelta>0) { alert('鼠標前滾');//非火狐 前滾120 } else{ alert('鼠標後滾')//非火狐 後滾-120 }; }*/ box.addEventListener('DOMMouseScroll',function (ev){ var event=ev||window.event; alert(event.detail);//火狐前滾:-3 ,後滾:3 },false)//IE678不支持
8.js按需加載 異步加載
demo.js以下
function test() { console.log('hello'); }
index.html以下
function loadScript(url,callback){ var script=document.createElement('script'); script.type='text/javascript'; if(script.readyState){ //ie script.onreadystatechange=function(){ if(script.readyState=='complete'||script.readyState=='loaded'){ callback() } } }else{ script.onload=function(){ //Safari chrome firefox opera ----Ie script不具有onload方法 callback(); } } script.src=url; //寫在這裏是爲了防止onreadystatechange狀態不改變 document.head.appendChild(script) } loadScript('demo.js',function(){test()})