我正在为我正在使用该窗口管理器的项目构建一个窗口管理器的过程中,它使用jQuery UI Draggable和Resizable,并且在大多数情况下我都在使用它。
我似乎遇到的问题是我需要实现的功能是Windows 7/8窗口捕捉到顶部,左侧或右侧。现在我已经可以使用快照了,但是当用户拖动窗口时,我希望它恢复到原来的大小,但是位置必须居中到鼠标指针的位置,由于某种原因,jQuery UI似乎正在将位置恢复到拖动起点位置,一旦我重新调整大小。
演示 http://jsfiddle.net/t5zqcdtm/1/
测试方法是,如果您抓住两个打开的窗口之一并将其拖动,使鼠标位于3px
顶部,您将看到一个完整尺寸的轮廓,然后放开,该窗口将变为完整尺寸,然后将鼠标向右移到左标题栏右侧的控制按钮,因此只需在“ _”的左侧拖动窗口,您将看到窗口位置未居中于鼠标
有问题的代码在第108行:
var mode = $(ui.helper).data("mode");
var oldStyle = JSON.parse($(ui.helper).data("origin"));
newStyle = clone(oldStyle);
newStyle.left = e.pageX - (
parseInt(oldStyle.width.substring(0, oldStyle.width.length - 2)) / 2) + "px";
newStyle.top = e.clientY + "px";
console.log({
old: oldStyle,
new: newStyle
});
$(ui.helper).css(newStyle);
$(ui.helper).data("mode", "");
谁能告诉我为什么窗口然后跳到左上方
当draggable
开始时,将进行一个计算,其中包含click
的生成位置position
以及width
元素的和。这里的问题似乎是click
位置是resize
在元素之前计算的,因此,drag
然后使用该click
位置计算。
您可以在中访问此click
职位,instance
并根据需要对其进行修改。例如,您可以确定s是否click
在窗口的新宽度之外,如果是,则相应地重新放置。像这样:
start: function (e, ui) {
...
//At the end of your start function
//you check the actual position of the click
var clickLeft = $(this).draggable('instance').offset.click.left;
//If this click is out of the window, or in the top right icons
if (clickLeft > ($(ui.helper).width() - 50)) {
//You set the click left to wherever you need
$(this).draggable('instance').offset.click.left = $(ui.helper).width() - 50;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句