javascript - mousedown() 中的 mouseup() 被多次调用

标签 javascript jquery mouseevent

$("#canvas").mousedown(function(e){
    var X1 = (e.pageX - this.offsetLeft) - 8;
    var Y1 = (e.pageY - this.offsetTop) - 8;
        
    $("#canvas").mouseup(function(e){
        var X2 = (e.pageX - this.offsetLeft) - 8;
        var Y2 = (e.pageY - this.offsetTop) - 8;
        alert(X1 + " " + X2 + " " Y1 + " " + Y2);
    });
});

我遇到的问题是,第一次调用该函数后(第一次工作正常,并且符合预期),mouseup 函数似乎被多次调用(即,将显示多个警报,而不仅仅是显示首先)。有没有办法防止这种情况发生,或者有更好的编码方法?

谢谢

最佳答案

每次移动鼠标时,您的代码都会将 mouseup 处理程序附加到#canvas 元素。每次移动鼠标。使用 .one() 仅附加处理程序一次:

$(this).one('mouseup', function(e){
    var X2 = (e.pageX - this.offsetLeft) - 8;
    var Y2 = (e.pageY - this.offsetTop) - 8;
    alert(X1 + " " + X2 + " " Y1 + " " + Y2);
});

但更好的解决方案是使用状态变量(和适当的范围):

var clicked = false;
var X1, Y1, X2, Y2;

$("#canvas").mousedown(function(e){
    X1 = (e.pageX - this.offsetLeft) - 8;
    Y1 = (e.pageY - this.offsetTop) - 8;

    clicked = true;
});


$("#canvas").mouseup(function(e){
    if (clicked) {
        X2 = (e.pageX - this.offsetLeft) - 8;
        Y2 = (e.pageY - this.offsetTop) - 8;
        alert(X1 + " " + X2 + " " Y1 + " " + Y2);

        clicked = false;
    }
});

关于javascript - mousedown() 中的 mouseup() 被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8215771/

相关文章:

PHP 页面中的 JavaScript 函数导致 PHP 选项卡格式出现问题

javascript - ES6 import "module"不允许访问 "module"的函数

javascript - 匹配半在标签内、一半在标签外的字符串

jquery - Bootstrap3 - 网站不会通过选项卡或 Accordion 滚动到显示的内容

javascript - 在循环内的特定时间后调用函数

javascript - 在 Iframe 中加载外部 html 并访问内容

javascript - meteor 和事件背景颜色的 pretty-fullcalendar 包

javafx-2 - JavaFX - 动态关闭 TabPane 中的选项卡

jQuery 获取鼠标在元素中的位置

java - 按下 JList 元素时弹出窗口 - Java