javascript - 可拖动框的小故障

标签 javascript jquery

通常我更喜欢为琐碎问题编写自己的解决方案,因为插件通常会添加许多不需要的功能并增加项目的大小。大小会使页面变慢,并且在每天 10 万页面浏览量的网站中,3 万的差异(与 jquery Draggable 相比)会导致账单上的巨大差异。我已经使用了 jquery,我认为这就是我现在所需要的,所以请不要告诉我使用其他插件或框架来拖动东西。

考虑到这一点,我编写了以下代码,以允许框可以拖动。该代码工作得很好(任何有关代码本身的提示都将非常感激),但是当我将鼠标光标拖动到框限制的左侧时,我遇到了一个小故障:框内的文本被选中。

如何解决?谢谢。

JavaScript:

$(document).ready(function () {

    var x = 0;
    var y = 0;

    $("#d").live("mousedown", function () {

        var element = $(this);
        var parent = element.parent();

        $(document).mousemove(function (e) {

            var x_movement = 0;
            var y_movement = 0;

            if (x == e.pageX || x == 0) {
                x = e.pageX;
            } else {
                x_movement = e.pageX - x;
                x = e.pageX;
            }

            if (y == e.pageY || y == 0) {
                y = e.pageY;
            } else {
                y_movement = e.pageY - y;
                y = e.pageY;
            }

            var left = parseFloat(element.css("left")) + x_movement;

            // hold inside left
            if (left <= 0) left = 0;

            // hold inside right
            var max_right = (parseFloat(element.outerWidth()) - parent.width()) * -1;
            if (left >= max_right) left = max_right;

            element.css("left", left);

            var top = parseFloat(element.css("top")) + y_movement;

            // hold inside top
            if (top <= 0) top = 0;

            // hold inside bottom
            var max_bottom = (parseFloat(element.outerHeight()) - parent.height()) * -1;
            if (top >= max_bottom) top = max_bottom;

            element.css("top", top);

            return false;

        });

    });

    $(document).mouseup(function () {
        x = 0;
        y = 0;
        $(document).unbind("mousemove");
    });

});

HTML:

<div style="position: relative; width: 500px; height: 500px; background-color: Red;">
    <div id="d" style="position: absolute; width: 100px; left: 0px; height: 100px; top: 0px; cursor: move; border: 1px solid black;">a</div>
</div>

最佳答案

事实上,文本被选择与 JavaScript 无关。这是浏览器的问题,如果您在按下一个按钮的情况下移动鼠标光标,则会选择文本。

您可以应用一些 CSS,这将阻止文本被选中,至少在现代浏览器上是这样:

#d {
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

(这不是标准的 css,但它应该可以工作。)

关于javascript - 可拖动框的小故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11006270/

相关文章:

javascript - 错误 : Could not find module jquery (Emberjs)

javascript - JS 平滑滚动,滚动到最终/底部 div 的底部而不是顶部

php - jQuery AJAX : Clarification on How to Pass Variable into AJAX GET Request

jquery - 带有使用 jquery 的链接的目标 iframe 不起作用

javascript - 我如何等待回调来解决 JS 中的 promise ?同步 iOS WKWebView 和 JS

javascript - 使用选择选项转换时间。使用 JavaScript

c# - 代码在内容编辑器 Web 部件 SharePoint 2007 中不起作用

javascript - 如何安全地识别 http 请求中的 chrome 扩展?

javascript - 如何设置带图片的确认框(javascript)

php - AJAX 与 HTML?