JavaScript基础(32)_拖拽、鼠标移动事件

复习:鼠标移动事件

关于“传递事件对象”浏览器兼容性解决办法:
方法1、if(!event){
event = window.event;
}
方法2、event = event || window.event;

关于“获取滚动条距离”浏览器兼容性解决办法:
var sl = document.body.scrollLeft || document.documentElement.scrollLeft;
var st = document.body.scrollTop || document.documentElement.scrollTop;

获取鼠标在可见窗口坐标的计算方式:
方式1:
var x = event.pageX;  
var y = event.pageY;  
方式2:
var x = event.clientX + sl;  
var y = event.clientY + st;  

拖拽的流程:

1、当鼠标按下点击被拖拽元素时,开始拖拽,事件:onmousedown。
2、当鼠标开始移动拖拽元素时,事件:onmousemove。
3、当鼠标松开时,事件:onmouseup。
                        
鼠标按下时,鼠标在div元素内的偏移量:
方式1:
ol = event.pageX - div元素.offsetLeft
ot = event.pageY - div元素.offsetTop

方式2:
ol = event.clientX + sl - div元素.offsetLeft
ot = event.clientY + st - div元素.offsetTop

注意:该event为onmousedown事件对象参数

鼠标拖动后松开时,该div元素左上角实时坐标:
(div元素的左上角位置 = 鼠标在当前页面的坐标位置 - 鼠标在div元素元素内的偏移量。)

方式1:
x = event.pageX - ol;
y = event.pageY - ot;

方式2:
x = event.clientX + sl  - ol;
y = event.clientY + st - ot;

注意:该event为onmouseup事件对象参数。

案例

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>拖拽</title>
</head>
<style>
    body {
        width: 2000px;
        height: 2000px;
    }

    #box1 {
        width: 80px;
        height: 60px;
        background-color: aquamarine;
        /* 开启绝对定位才能获取偏移量 */
        position: absolute;
    }

    #box2 {
        width: 80px;
        height: 60px;
        background-color: yellowgreen;
        position: absolute;
        top: 100px;
        left: 100px;
    }
</style>
<script>
    window.onload = function () {
        var box1 = document.getElementById("box1");

        box1.onmousedown = function (event) {
            // box1元素的偏移量默认值为8,获取鼠标指针在鼠标按下时,鼠标在box1元素内的偏移量。
            ol = event.pageX - box1.offsetLeft;
            ot = event.pageY - box1.offsetTop;
  
            document.onmousemove = function (event) {
                // 获取事件对象,同时解决各浏览器兼容性问题
                event = event || window.event;

                // 获取鼠标在窗口的坐标
                var x = event.pageX ;
                var y = event.pageY;

                // box1的左上角位置 = 鼠标在当前页面的坐标位置 - 鼠标在box1元素内的偏移量。
                box1.style.left = x - ol + "px";
                box1.style.top = y - ot + "px";
            }
            // 关闭鼠标再次按下时,引起的拖拽。
            box1.onmousedown = null;
        }

        document.onmouseup = function () {
            // 鼠标松开时,拖拽元素停止移动。
            document.onmousemove = null;
            // 关闭此次鼠标松开促发的事件。
            document.onmouseup = null;
        }
    }
</script>

<body>
    <div id="box1"></div>
    <!-- 设置box2目的是,当移动到兄弟元素box2内,box1是否会触发事件,这是为什么设置document.onmousemove的原因 -->
    <div id="box2"></div>
</body>

</html>

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你只想给仪表盘的进度条设置鼠标移动事件,可以通过 `series-gauge-axisPointer` 来实现。`series-gauge-axisPointer` 是一个子属性,可以用来设置仪表盘的指针(即进度条)的样式和事件。你可以在 `option` 对象的 `series` 数组中指定这个属性,例如: ```javascript var option = { series: [{ type: 'gauge', // ... axisPointer: { show: true, type: 'line', lineStyle: { width: 2, color: '#999' }, handle: { show: true, size: 20, color: 'auto' }, // 注册事件 triggerOn: 'mousemove', // 回调函数 onHandleDrag: function(params) { console.log(params); } }, // ... }] }; ``` 在这个例子中,我们通过 `axisPointer` 属性来设置仪表盘的指针样式和事件。我们将 `show` 属性设置为 `true`,这样指针就会显示出来。我们还指定了指针的颜色、大小等样式属性,这些属性都是可选的,你可以根据自己的需要进行设置。 最重要的是,我们通过 `triggerOn` 属性来指定事件触发的方式,这里我们将其设置为 `mousemove`,表示只有在鼠标移动时才会触发事件。我们还通过 `onHandleDrag` 属性来注册了一个事件,这个事件会在用户拖动指针时触发。回调函数的参数 `params` 包含了事件的详细信息,例如指针的坐标等等。 值得注意的是,我们并没有将 `triggerTooltip` 属性设置为 `true`,这样用户在移动指针时不会触发提示框。如果你需要提示框,可以将这个属性设置为 `true`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值