jquery - 如果我按住鼠标左键单击按钮 10 秒,mousemove 太快然后突然松开左键单击,在 JQuery 中没有触发 mouseup 事件?

标签 jquery html css mouseevent

我的要求是:在 Jquery 中使用 mousemove、mouseup、mousedown 事件将一个 div 移动到另一个父 div 中。

$(document).ready(function () {
            var drag = null; var Top = null; var Left = null;
            
            var O = $("#Outside").offset();
            var outsideTop = O.top;
            var outsideRight = O.left + $("#Outside").width();
            var outsideBottom = O.top + $("#Outside").height();
            var outsideLeft = O.left; var move;
            $('#Box').mousedown(function (e) {
                $("#Box").css({ "background-color": "violet" });
                drag = $(e.target);
                drag.css({ "cursor": "move" });
                var box = $("#Box").offset();
                Top = e.pageY - box.top;
                Left = e.pageX - box.left;
               
            });
            $('body').on('mouseup', function (e) {
                $("#Box").css({ "background-color": "skyblue", "cursor": "default" });
                $('body').unbind('mousemove');
                drag = null;
            });
            $(document).on('mousemove', function (e) {
                if (drag) {
                    drag.css({ "background-color": "greenyellow" });
                    var cursorTop = e.pageY - Top;
                    var cursorLeft = e.pageX - Left;
                    var cursorRight = (e.pageX - Left) + $("#Box").width();
                    var cursorBottom = (e.pageY - Top) + $("#Box").height();
                    if (((cursorTop >= outsideTop) && (cursorTop <= outsideBottom)) && ((cursorLeft >= outsideLeft) && (cursorLeft <= outsideRight)))
                        if ((((cursorRight) >= outsideLeft) && ((cursorRight) <= outsideRight)) && ((cursorBottom >= outsideTop) && ((cursorBottom) <= outsideBottom))) {
                            drag.offset({
                                top: e.pageY - Top,
                                left: e.pageX - Left
                            });
                        }
                }
            }).on('mouseup', function () {
                $('body').unbind('mousemove');
               drag=null;
            });
           
        });
#Outside
{
  height:500px;
  width:1000px;
  position:absolute;
  background-color:navajowhite;
  border:5px solid blue;
  margin-left:120px;
  margin-top:18px;


}
#Box
{
  height:100px;
  width:100px;
  /*position:absolute;*/
  background-color:lightskyblue;
  border:4px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>

<div id="Outside">
  <div id="Box"></div>
</div>

我正在使用 chrome 浏览器查看结果。我的编码部分已完成 90%。但这里提出了一个小问题。 我遇到了一个问题,如果 mousemove 事件太快,则不会触发 mouseup 事件。我需要一个解决方案

最佳答案

这是因为您使用了 $(document).on('mouseup'..$('body').on('mouseup'...。这两者是冲突的。我已经将 body mouseup 替换为 document 并删除了 document mouseup down 你的代码。

请尝试以下。

$(document).ready(function () {
            var drag = null; var Top = null; var Left = null;
            
            var O = $("#Outside").offset();
            var outsideTop = O.top;
            var outsideRight = O.left + $("#Outside").width();
            var outsideBottom = O.top + $("#Outside").height();
            var outsideLeft = O.left; var move;
            $('#Box').mousedown(function (e) {
                $("#Box").css({ "background-color": "violet" });
                drag = $(e.target);
                drag.css({ "cursor": "move" });
                var box = $("#Box").offset();
                Top = e.pageY - box.top;
                Left = e.pageX - box.left;
               
            });
            $(document).on('mouseup', function (e) {
                $("#Box").css({ "background-color": "skyblue", "cursor": "default" });
                $('body').off('mousemove');
                drag = null;
                console.log("ok");
            });
            $(document).on('mousemove', function (e) {
                if (drag) {
                    drag.css({ "background-color": "greenyellow" });
                    var cursorTop = e.pageY - Top;
                    var cursorLeft = e.pageX - Left;
                    var cursorRight = (e.pageX - Left) + $("#Box").width();
                    var cursorBottom = (e.pageY - Top) + $("#Box").height();
                    if (((cursorTop >= outsideTop) && (cursorTop <= outsideBottom)) && ((cursorLeft >= outsideLeft) && (cursorLeft <= outsideRight)))
                        if ((((cursorRight) >= outsideLeft) && ((cursorRight) <= outsideRight)) && ((cursorBottom >= outsideTop) && ((cursorBottom) <= outsideBottom))) {
                            drag.offset({
                                top: e.pageY - Top,
                                left: e.pageX - Left
                            });
                        }
                }
            })
           
        });
#Outside
{
  height:500px;
  width:1000px;
  position:absolute;
  background-color:navajowhite;
  border:5px solid blue;
  margin-left:120px;
  margin-top:18px;


}
#Box
{
  height:100px;
  width:100px;
  /*position:absolute;*/
  background-color:lightskyblue;
  border:4px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="Outside">
  <div id="Box"></div>
</div>

关于jquery - 如果我按住鼠标左键单击按钮 10 秒,mousemove 太快然后突然松开左键单击,在 JQuery 中没有触发 mouseup 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39992485/

相关文章:

jquery - Clone() jquery 中的第一个类

javascript - 我可以使用html5缓存 list 来存储第三方js吗?

javascript - 对多个 HTML 复选框执行条件

css - 具有绝对定位的 Chid Div 与父级中的内容重叠

类中的 JavaScript 事件

javascript - jquery 函数在 safari 中无法工作,但在其他浏览器中可以正常工作

html - 将背景图像放在 div 标签中

html - 表单组内的 Bootstrap 表单

html - 为什么我在按钮上得到矩形包裹图标?

javascript - 使用 JS 仅显示请求的表单