如何拖动DIV,使其宽度和高度为负值
How to drag a DIV so its width and height are negative values?
我在这里有点困惑。我正在开发一个反馈实用程序,允许用户在网页上"画"方框来突出问题区域。现在我有一个覆盖DIV,它填充了屏幕,jQuery允许您通过单击和拖动绘制红色轮廓的DIV。
这是JS:
{
var $feedbackOverlay = jQuery('#feedbackOverlay');
var $original = { top: 0, left:0 };
$feedbackOverlay.bind('mousedown', function (e)
{
jQuery('<div id="currentHighlight"></div>')
.css('width', '1px')
.css('height', '1px')
.css('border', 'solid 3px #ff0000')
.css('border-radius', '5px')
.css('position', 'absolute')
.css('left', e.pageX)
.css('top', e.pageY)
.css('z-index', '8000001')
.appendTo('body');
$original = { top: e.pageY, left: e.pageX };
});
$feedbackOverlay.bind('mousemove', function (e)
{
var $currentHighlight = jQuery('#currentHighlight');
if ($currentHighlight.length > 0)
{
var $pos = { top: e.pageY, left: e.pageX };
if($pos.top < $original.top) $currentHighlight.css('top', $pos.top);
if ($pos.left < $original.left) $currentHighlight.css('left', $pos.left);
$currentHighlight.height(Math.abs($pos.top - $original.top));
$currentHighlight.width(Math.abs($pos.left - $original.left));
}
});
$feedbackOverlay.bind('mouseup', function (e)
{
var $currentHighlight = jQuery('#currentHighlight');
$currentHighlight.removeAttr('id');
});
var $feedbackInstructions = jQuery('#feedbackInstructions');
$feedbackInstructions.fadeIn(1000, function ()
{
setTimeout(function ()
{
$feedbackInstructions.fadeOut(1000);
}, 3000);
});
$feedbackOverlay.height(jQuery(document).height());
});
以下是上面的jsFiddle:
http://jsfiddle.net/Chevex/RSYTq/
问题是我不能把这些盒子向上或向左拖动。第一次单击会将左上角放在鼠标单击的位置。之后,后续拖动将更改框的宽度。放开鼠标完成框,然后可以开始绘制另一个框。如果在绘制时尝试向左或向上拖动DIV,其宽度将保持为0,但不会变为负数。
在这里您可以找到有效的解决方案:http://jsfiddle.net/RSYTq/34/
这样的东西会让你更接近你想要的:http://jsfiddle.net/RSYTq/18/
还不能很好地处理向上和向左移动,然后切换到向下和向右移动,但它给了你这个想法。
没有负宽度这回事——它们不是坐标系。您需要重新定位并重新计算相对于未移动的角点的角点位置。
听起来你需要检查点击原点(x,y(是否大于当前鼠标位置,然后交换你使用的CSS左上角。
您需要在某个地方跟踪原始起点(变量、#currentHighlight
上的数据属性,无论您想在哪里(,并检查宽度或高度<0。如果是,则将#currentHighlight
left
/top
CSS设置为偏移original + (e.pageX - $currentHighlight.position().left)
(例如(。然后将#currentHighlight宽度/高度设置为相同的差值(但为正:(e.pageX - $currentHighlight.position().left) * -1
(。
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 删除对HTML元素的拖动
- jQuery UI可排序-多连接列表拖动
- 禁用SVG拖动
- 旋转后拖动对象
- JQuery UI可拖动潜水与滚动棒到鼠标
- jsPlumb-拖动克隆而不进行复制
- 当我在节点上拖动鼠标时,我如何防止使用d3.ehavior.zoom().on(“缩放”,重绘)
- 如何使元素在可拖动元素内可单击
- 如何在使用Kinetic拖动同一对象后,在旋转动画中保持先前的偏移
- 在d3中拖动一条线
- 使元素在iframe中可拖动
- 如何将宽度和高度设置为可拖动图像
- 当我制作可拖动克隆时,如何保留元素的高度和宽度
- 将弹出窗口的大小调整为最小高度和宽度,然后拖动到以下大小应该是不可能的
- 禁用jQuery可拖动的自动高度
- HTML5拖动高度调整窗口大小
- 如何拖动DIV,使其宽度和高度为负值
- 更新高度,宽度和jquery动态文本区域的样式,可拖动和可调整大小
- 在窗口高度内拖动引导模态