可拖动的框小故障
draggable box little glitch
通常我更喜欢为琐碎的问题编写自己的解决方案,因为通常插件会添加许多不需要的功能并增加项目的大小。大小使页面变慢,在每天100k页面浏览量的网站中,30k的差异(与jquery可拖动相比)对账单有很大的不同。我已经使用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
,但它应该可以工作。
您可以阻止在元素上使用 CSS 进行选择,以及将 unselectable="on"
属性添加到元素
例:http://jsfiddle.net/PS79Y/
Css:
#d{
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
要查看 -moz-none
和 Just none
之间的示例,请访问 https://developer.mozilla.org/en/CSS/user-select
相关文章:
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 删除对HTML元素的拖动
- jQuery UI可排序-多连接列表拖动
- 禁用SVG拖动
- 旋转后拖动对象
- JQuery UI可拖动潜水与滚动棒到鼠标
- jsPlumb-拖动克隆而不进行复制
- 当我在节点上拖动鼠标时,我如何防止使用d3.ehavior.zoom().on(“缩放”,重绘)
- 如何使元素在可拖动元素内可单击
- 如何在使用Kinetic拖动同一对象后,在旋转动画中保持先前的偏移
- 在d3中拖动一条线
- 使元素在iframe中可拖动
- 通过拖动可以更改三维模型对象在Three.js场景中的位置
- 如何使所有绘制的(矩形、圆形、直线、多边形)都可拖动?纯JS
- 拖动开始时更改可拖动元素的大小
- 如何正确拖动jqgrid编辑表单
- 可拖动的框小故障
- 可拖动框宽度故障
- Highcharts可拖动故障工具提示
- Jquery-ui可拖动故障