Javascript鼠标事件问题

标签 javascript html

这是我的简单代码:

<!DOCTYPE html>
<html>

<head></head>

<body>
    <style>
    </style>
    <script>
var exit = 0;
document.onmousedown = function (e) {
    exit = 0;
    document.onmousemove = function (e) {
        if (exit == 1) {
            return;
        } else {
            var x = e.pageX;
            var y = e.pageY;
            var e = document.createElement("div");
            e.style.width = 10 + "px";
            e.style.height = 10 + "px";
            e.style.background = "red";
            e.style.top = y + "px";
            e.style.left = x + "px";
            e.style.position = "absolute";
            document.body.appendChild(e);
        }
    };
};
document.onmouseup = function (e) {
    exit = 1;
};
    </script>
</body>

</html>

这就像画家。你按住鼠标左键,当你移动鼠标时,它应该画出由 div 元素组成的线,当你释放按钮时,它会停止。它实际上有效......有时。第一次它工作完美,但是在让鼠标左键向上并再按一次之后,只绘制一个元素并且移动鼠标不会执行任何操作。确切地说,有时会执行,有时不会执行。最好是如果您可以尝试此代码并且看看会发生什么。谢谢。

最佳答案

这似乎是因为拖动选择冲突。这两个事件都涉及 mousedown 和随后的 mousemove

您需要防止事件默认,然后运行您的代码。

更新的 fiddle :http://jsfiddle.net/L4KhJ/2/

防止这两个事件发生默认情况,如下所示:

document.onmousedown = function (e) {
    stopDefault(e); // *** prevent default here   
    exit = 0;
    document.onmousemove = function (e) {
        stopDefault(e); // *** prevent default here   
        if (exit == 1) { ...

其中 stopDefault 是:

function stopDefault(e) {
    if (e && e.preventDefault) {
        e.preventDefault();
    }
    else {
        window.event.returnValue = false;
    }
    return false;
}

上述函数的代码取自此线程:https://stackoverflow.com/a/891616/1355315

关于Javascript鼠标事件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20761498/

相关文章:

html - 以 HTML 格式显示 Django 查询结果 - 表格、列表、CSS div?

javascript - 使用 jQuery 将事件类添加到导航中的当前页面

javascript - 如何使用Java设置和读取cookie值

javascript - 检测元素是否已通过 javascript 调整大小?

javascript - 隐藏文本但不在标签jquery中输入

jQuery SlideUp/Down 不断重复?

html - 规范化浏览器之间的布局

javascript - 如何设置从数字转换为html span标签的函数

javascript - 是否可以在 js 中强制同步重绘?

javascript - float 下拉元素相互向右插入