为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript事件类型:鼠标事件之Event的属性:其他属性

1、button属性

mousedown和mouseup事件的event对象中存在一个button属性,表示按下或释放的按钮。Dom的button属性有三个值:0表示主鼠标按钮(鼠标左键),1表示滚轮按钮,2表示次鼠标按钮(鼠标右键)。
IE8及之前版本也提供了button属性,但这个属性的值与Dom的button属性有很大差异,常见的做法是将IE模型规范化为Dom方式。

代码如下:

var EventUtil = {
    addHandler: function(element, type, handler) {
        if (element.addEventListener) {
            element.addEventListener(type, handler, false);
        } else if (element.attachEvent) {
            element.attachEvent('on' + type, handler);
        } else {
            element['on' + type] = handler;
        }
    },
    getEvent:function(event){ 
        return event?event:window.event;
    },
    getButton:function(event){
        if(document.implementation.hasFeature('MouseEvents','2.0')){
            return event.button;
        }else{
            switch(event.button){
                case 0:
                case 1:
                case 3:
                case 5:
                case 7:
                    return 0;
                case 2:
                case 6:
                    return 2;
                case 4:
                    return 1;               
            }
        }
    }
}

// 调用方法getButton()
EventUtil.addHandler(document,'mousedown',function(event){
    event=EventUtil.getEvent(event);
    alert(EventUtil.getButton(event));
})

*document.implementation的hasFeature()方法用来检测浏览器是否支持Dom版鼠标事件。

2、修改键

修改键包括Shift、Ctrl、Alt和Meta(Windows键盘中是Windows键,苹果机中是Cmd键),它们被用来修改鼠标事件的行为。
Dom为此规定了4个属性,表示这些修改键的状态:shiftKey、ctrlKey、altKey和metaKey。这些属性返回布尔值。相应的键被按下,返回true。

例子:

<button id='myBtn'>
    OK
</button>

var btn=document.getElementById('myBtn')
btn.onmousedown=function(event){
    if (event.shiftKey){
        alert("shift")
    }
    if (event.ctrlKey){
        alert("ctrl")
    }
    if (event.altKey){
        alert("alt")
    }
    if (event.metaKey){
        alert("meta")
    }
}

3、relatedTarget属性

在mouseover事件中,该属性的值是鼠标光标移到目标节点上时所离开的那个节点。
在mouseout事件中,该属性的值是离开目标时鼠标光标进入的节点。
对于其他事件,这个属性的值是null。

测试代码:

<div style='width:60px;height:60px;background:red;'>
</div>

var Div=document.getElementsByTagName('div')[0]
Div.addEventListener('mouseover',function(event){
    alert(event.relatedTarget.nodeName)
})
//输出:BODY或HTML

IE8及之前版本也提供了类似的属性,在mouseover事件触发时,IE的fromElement属性中保存了相关元素;在mouseout事件触发时,IE的toElement属性中保存了相关元素。下面是跨浏览器的方案。

代码如下:

<div style='width:60px;height:60px;background:red;'>
</div>

var EventUtil = {
    addHandler: function(element, type, handler) {
        if (element.addEventListener) {
            element.addEventListener(type, handler, false);
        } else if (element.attachEvent) {
            element.attachEvent('on' + type, handler);
        } else {
            element['on' + type] = handler;
        }
    },
    getEvent:function(event){ 
        return event?event:window.event;
    },
    getTarget:function(event){
        return event.target||event.srcElement;
    },
    getRelatedTarget:function(event){
        if(event.relatedTarget){
            return event.relatedTarget;
        }else if(event.fromElement){
            return event.fromElement;
        }else if(event.toElement){
            return event.toElement;
        }else{
            return null;
        }
    }
}

//调用方法getRelatedTarget()
var Div=document.getElementsByTagName('div')[0]
EventUtil.addHandler(Div,'mouseover',function(event){
    event=EventUtil.getEvent(event);
    var target=EventUtil.getTarget(event);
    var relatedTarget=EventUtil.getRelatedTarget(event);
    alert('Mouse: from '+relatedTarget.nodeName+' to '+target.nodeName);
})
//输出:Mouse: from BODY(或HTML) to DIV

文中的代码部分,带有“例子”和“测试代码”字样的,只是用来学习或测试某一功能用的代码,不可以直接用于项目的开发中。带有“代码如下”字样的,都是经过本人测试,简单修改即可用于项目开发中的代码,如有错误,欢迎指出

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消