【问题标题】:If i am hold the mouse left click button for 10sec, mousemove too fast and suddenly release the left click,the mouseup event not triggered in JQuery?如果我按住鼠标左键 10 秒,鼠标移动太快突然松开左键,JQuery 中没有触发 mouseup 事件?
【发布时间】:2016-10-12 07:07:47
【问题描述】:

我的要求是:在 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 事件没有触发。我需要一个解决方案

【问题讨论】:

  • 你确定是因为鼠标移动太快了吗?当我尝试时,只有当鼠标在鼠标按下时离开矩形时它才起作用。

标签: jquery html css mouseevent


【解决方案1】:

这是因为您使用了$(document).on('mouseup'..$('body').on('mouseup'...。两者加在一起是冲突的。我已经用文档替换了 body mouseup 并在你的代码中删除了文档 mouseup。

请在下面尝试。

$(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>

【讨论】:

  • 感谢您的尝试。但是如果我按住 mousemove 事件 2 或 3 秒,那么,如果我释放鼠标左键,则不会触发 mouseup 事件。同样的问题会引发?
  • 我尝试过使用 firefox、chrome,但我没有重现您的问题。我的代码工作正常。
  • 您的代码是正确的。我正在检查您的代码。但是快速拖动页面四周的框,释放左键后,mouseup事件未正确触发。
  • 我试试看。但没有什么是错的。 Console.log 正确触发,框 css 颜色正确更改,并且您的 body mousemove off 正确应用。请添加错误结果的图片,因为我不会重现您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
相关资源
最近更新 更多