Mousewheel 事件

大多数浏览器(IE6, IE7, IE8, Opera 10+, Safari 5+)中,都提供了 “mousewheel” 事件。但杯具的是 Firefox 3.5+ 却不支持此事件,不过庆幸 Firefox 3.5+ 中提供了另外一个等同的事件:”DOMMouseScroll” 。

  1. “mousewheel” 事件中的 “event.wheelDelta” 属性值:返回的值,如果是正值说明滚轮是向上滚动,如果是负值说明滚轮是向下滚动;返回的值,均为 120 的倍数,即:幅度大小 = 返回的值 / 120。
  2. “DOMMouseScroll” 事件中的 “event.detail” 属性值:返回的值,如果是负值说明滚轮是向上滚动(与 “event.wheelDelta” 正好相反),如果是正值说明滚轮是向下滚动;返回的值,均为 3 的倍数,即:幅度大小 = 返回的值 / 3。
  3. “mousewheel” 事件在 Opera 10+ 中却是个特例,既有 “event.wheelDelta” 属性,也有 “event.detail” 属性。

注:上面第三点,在《The onmousewheel event of JavaScript》一文中有这样一段批注:

In Opera, “detail” returns the same value as it does in FF, so for the big O you should rely on “detail” instead of “wheelDelta”, which depending on the Opera version may return a different value than in IE’s.

但经测试, Opera 9+ 和 Opera 10+ 中的 event.wheelDelta 属性与其他浏览器中的表现完全一致,未发现异常与错误,从接口角度来说,代码中应优先使用 “event.wheelDelta” 属性。


例子:

<!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>无标题文档</title>
<style type="text/css">
<!--
#apDiv1 {
    position:absolute;
    left:0px;top:0px;
    width:100%;
    height:100%;
    background-color: #ddeeff;
    overflow:auto;
}
#apDiv2{
    width:2000px;
    position:relative;
}
-->
</style>
</head>

<body>
<div id="apDiv1">
  <div id="apDiv2">asdads</div>
</div>
</body>
</html>
<script language="javascript" type="text/javascript">
var Browser = function(){
    var d_ = document,n_ = navigator,t_ = this,s_= screen;
    
    var b = n_.appName;
    var ua = n_.userAgent.toLowerCase();
    
    t_.name = "Unknow";
    
    t_.safari = ua.indexOf("safari")>-1;  // always check for safari & opera
    t_.opera = ua.indexOf("opera")>-1;    // before ns or ie
    t_.firefox = !t_.safari && ua.indexOf('firefox')>-1; // check for gecko engine    
    t_.ns = !t_.firefox && !t_.opera && !t_.safari && (b=="Netscape");
    t_.ie = !t_.opera && (b=="Microsoft Internet Explorer");
    
    t_.name = (t_.ie ? "IE" : (t_.firefox ? "Firefox" : (t_.ns ? "Netscape" : (t_.opera ? "Opera" : (t_.safari ? "Safari" : "Unknow")))));
}

var brw = new Browser();

var apDiv1 = document.getElementById("apDiv1");
var perWidth = apDiv1.clientWidth / 2;

var mouse_wheel = function(e){
    var evt = window.event || e;
    if(evt.detail > 0 || evt.wheelDelta < 0)
        apDiv1.scrollLeft += 120;
    else
        apDiv1.scrollLeft -= 120;
}

var mouse_wheel_opera = function(e){
    //alert(window.event == e); //Opera 下,window.event 和 e 相等
    var obj = e.srcElement;
    if(obj == apDiv1){
        mouse_wheel(e);
    }
}    
    
switch(brw.name){
    case "IE":
    case "Safari":
        apDiv1.onmousewheel = mouse_wheel;
        break;
    case "Firefox":
        apDiv1.addEventListener("DOMMouseScroll", mouse_wheel, false);
        break;
    case "Opera":
        document.onmousewheel = mouse_wheel_opera;
        break;
}
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值