【问题标题】:Detect mouse real direction检测鼠标真实方向
【发布时间】:2019-01-03 22:15:03
【问题描述】:

我的目标是在 mouseup 事件触发之前检测最后一次鼠标移动的方向。

为了避免验证小的非自愿移动(例如:我将鼠标向右移动 100 像素,然后我停止但不自觉地向左移动 2 像素)我会在鼠标指针达到最小安全距离后确认方向(间隙)从它改变方向的最后一点开始。

这是我的实现的简化:

var direction = "",
oldx = 0,
invert = 0,
gap = 10,
move = "",
mousemovemethod = function (e) {

    if (e.pageX < oldx) {
        if(direction == "right") invert = e.pageX;
        direction = "left";
        if(e.pageX < invert - gap) move = "left";
    } else if (e.pageX > oldx) {
        if(direction == "left") invert = e.pageX;
        direction = "right"
        if(e.pageX > invert + gap) move = "right";
    }

    document.body.innerHTML = "moving " + direction + ", last inversion point: " + invert + ", Validated movement: " + move;

    oldx = e.pageX;

}

document.addEventListener('mousemove', mousemovemethod);

这是fiddle

代码有效,但在我看来它冗长且不清楚。我在这种实现方面一直很差,我想知道是否有人知道处理这种机制的更优雅的方式。

欢迎提出任何建议。

【问题讨论】:

    标签: javascript mouseevent mouse mousemove


    【解决方案1】:
    function smooth(){
        var direction="",
        oldx = 0,
        noise=10,
        dir=0;
        mousemove=function(e){
           dir=oldx-e.pageX;
           if(Math.abs(dir)> noise){
              (dir <=0 )?direction="right":direction="left";
              oldx=e.pageX;
           }
           document.body.innerHTML = "moving " + direction;
       };
       document.addEventListener('mousemove', mousemove);
    }
    

    这个怎么样?

    【讨论】:

    • 请问您为什么在 if 语句中包含oldx=e.pageX;
    • 这样direction将在鼠标在同一方向移动超过noise时被声明
    • 我的意思是,即使朝同一个方向移动也会重复
    • 我不得不稍微调整一下,但这是我目前需要的:接受
    • 是的,即使方向相同,它也会重新声明方向
    猜你喜欢
    • 2012-01-17
    • 2014-08-09
    • 1970-01-01
    • 2021-07-08
    • 2022-07-25
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    相关资源
    最近更新 更多