/********************************************* * @author sky *********************************************/ function addEvent(el,type,fn,capture){ if(el.addEventListener){ el.addEventListener(type,fn,capture); }else if(el.attachEvent){ el.attachEvent('on'+type,function(){ fn.call(el,window.event); }) }else{ el['on'+type] = fn; } } function getId(el){ return typeof el == 'string' ? document.getElementById(el) : el; } var test = getId('test'),isFirefox = browser(); var mousewheel = isFirefox ? 'DOMMouseScroll' : 'mousewheel'; addEvent(test,mousewheel,function(e){ e = e || window.event; var delta = e.wheelDelta ? e.wheelDelta /120 : -e.detail/3; stopEvent(e); delta > 0 ? zoom(1) : zoom(-1); }) function zoom(n){ var font_size = parseInt(test.style.fontSize) || 12; test.style.fontSize = font_size + n + 'px'; } function stopEvent(e){ if(!e.stopPropagation){ e.stopPropagation = function(){ e.cancelBubble = true; } e.preventDefault = function(){ e.returnValue = false; } } e.stopPropagation(); e.preventDefault(); } function browser(){ var x = navigator.userAgent.toLowerCase() return /firefox/.test(x) ? 'firefox': false; }
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>project index</title> <style type="text/css"> #test { background:#333; color:#fff; padding:10px; margin:100px auto; line-height:2; font-size:12px;} </style> </head> <body> <div id="test">这样可以使JavaScript代码更精简些。当然,可读性稍差一些,就看你是重视效率还是重视可维护性了。 使用不同特征来判断浏览器的方法,虽然在速度上比用正则表达式分析userAgent要来的快,不过这些特征可能会随浏览器版本而变化。比如,一种浏览器本来独有的特性取得了市场上的成功,其他浏览器也就可能跟着加入该特性,从而使该浏览器的独有特征消失,导致我们的判断失败。因此,相对比较保险的做法是通过解析userAgent中的特征来判断浏览器类型。何况,反正判断版本信息也需要解析浏览器的userAgent的。 通过分析各类浏览器的userAgent信息,不难得出分辨各类浏览器及其版本的正则表达式。而且,对浏览器类型的判断和版本的判断完全可以合为一体地进行。于是,我们可以写出下面的代码:</div> <script type="text/javascript" src="mouseWheel.js"></script> </body> </html>