解析鼠标事件

鼠标事件

鼠标事件是 Web 开发中最常用的事件类型



一、如何触发鼠标事件

向 HTML 元素分配事件,您能够使用事件属性

<button id="btn">haha</button>
<script>
var btn = document.getElementById('btn')
btn.(事件) = function(){}
</script>

二、使用步骤

1.添加事件

代码如下(示例):

btn.onclick = function () {
        console.log('鼠标点击事件');
        }
        btn.onmousedown = function () {
        console.log('鼠标上的按钮被按下了');
        }
        btn.onmouseup = function () {
        console.log('鼠标按下后,松开时激发的事件')
        }
        btn.onmouseover = function () {
        console.log('当鼠标移动到某对象范围的上方时触发的事件');
        }
        btn.onmousemove = function () {
        console.log('鼠标移动时触发的事件');
        }
        btn.onmouseout = function () {
        console.log('当鼠标离开某对象范围时触发的事件');
        }
        btn.onmouseleave = function () {
        console.log('鼠标离开一个节点时触发,离开父节点不会触发这个事件');
        }

2.事件顺序

代码如下(示例):

// 事件比较
        // mouseout事件和mouseleave事件,都是鼠标离开一个节点时触发。
        // 两者的区别是:
        // 在父元素内部离开一个子元素时,mouseleave事件不会触发,而mouseout事件会触发。

        //     当有多个事件被触发时, 它们的顺序为:
        //     列如: click( 鼠标左键( 或中键) 被单击)
        //     事件触发顺序是: mousedown - > mouseup - > click
        //     dblclick( 鼠标左键( 或中键) 被双击)
        //     事件触发顺序是: mousedown - > mouseup - > click - > mousedown - > mouseup - > click - > dblclick

三.鼠标定位

1.定位需求

代码如下(示例):

属性说明
clientX以浏览器窗口左上顶角为原点,定位 x 轴坐标
clientY以浏览器窗口左上顶角为原点,定位 y 轴坐标
offsetX以当前事件的目标对象左上顶角为原点,定位 x 轴坐标
offsetY以当前事件的目标对象左上顶角为原点,定位 y 轴坐标
pageX以 document 对象(即文档窗口)左上顶角为原点,定位 x 轴坐标
pageY以 document 对象(即文档窗口)左上顶角为原点,定位 y 轴坐标
screenX计算机屏幕左上顶角为原点,定位 x 轴坐标
screenY计算机屏幕左上顶角为原点,定位 y 轴坐标
layerX最近的绝对定位的父元素(如果没有,则为 document 对象)左上顶角为元素,定位 x 轴坐标
layerY最近的绝对定位的父元素(如果没有,则为 document 对象)左上顶角为元素,定位 y 轴坐标

2.找到鼠标在页面的位置

代码如下(示例):

<div id="box" ></div>
<script>
    // 初始化拖放对象
    var box = document.getElementById("box");
    // 获取页面中被拖放元素的引用指针
    box.style.position = "absolute";  // 绝对定位
    box.style.width = "160px";  // 定义宽度
    box.style.height = "120px";  // 定义高度
    box.style.backgroundColor = "red";  // 定义背景色
    // 初始化变量,标准化事件对象
    var mx, my, ox, oy;  // 定义备用变量
    function e(event){  // 定义事件对象标准化函数
        if( ! event){  // 兼容IE浏览器
            event = window.event;
            event.target = event.srcElement;
            event.layerX = event.offsetX;
            event.layerY = event.offsetY;
        }
        event.mx = event.pageX || event.clientX + document.body.scrollLeft;
        // 计算鼠标指针的x轴距离
        event.my = event.pageY || event.clientY + document.body.scrollTop;
        // 计算鼠标指针的y轴距离
        return event;  // 返回标准化的事件对象
    }
     // 定义鼠标事件处理函数
    document.onmousedown = function(event){  // 按下鼠标时,初始化处理
        event = e(event);  // 获取标准事件对象
        o = event.target;  // 获取当前拖放的元素
        ox = parseInt(o.offsetLeft);  // 拖放元素的x轴坐标
        oy = parseInt(o.offsetTop);  // 拖放元素的y轴坐标
        mx = event.mx;  // 按下鼠标指针的x轴坐标
        my = event.my;  // 按下鼠标指针的y轴坐标
        document.onmousemove = move;  // 注册鼠标移动事件处理函数
        document.onmouseup = stop;  // 注册松开鼠标事件处理函数
    }
    function move(event){  // 鼠标移动处理函数
        event = e(event);
        o.style.left = ox + event.mx - mx  + "px";  // 定义拖动元素的x轴距离
        o.style.top = oy + event.my - my + "px";  // 定义拖动元素的y轴距离
    }
    function stop(event){  // 松开鼠标处理函数
       event = e(event);
       ox = parseInt(o.offsetLeft);  // 记录拖放元素的x轴坐标
       oy = parseInt(o.offsetTop);  // 记录拖放元素的y轴坐标
       mx = event.mx ;  // 记录鼠标指针的x轴坐标
       my = event.my ;  // 记录鼠标指针的y轴坐标
       o = document.onmousemove = document.onmouseup = null;
       // 释放所有操作对象
    }
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值