Jquery可拖动和可resize
function makeResourceDrag(arrIndexID) { $('#imgA' + arrIndexID).resizable(); $('#imgA' + arrIndexID).draggable({ start: function(event, ui) { isDraggingMedia = true; }, stop: function(event, ui) { isDraggingMedia = false; // Set new x and y resourceData[arrIndexID][4] = Math.round($('#imgA' + arrIndexID).position().left / currentScale); resourceData[arrIndexID][5] = Math.round($('#imgA' + arrIndexID).position().top / currentScale); } }); }
如果可以调整可resize的行,这可以正常工作,但我希望这些图像可拖动并可resize,如果我尝试使相同的元素具有这两个属性,我会得到有趣的行为,有没有人知道如何使这个工作?
谢谢!
看起来是因为你是在上做的,jqueryui包含在
,然后图像的可拖动组件发生在包装
。
尝试将包装在
(如果样式display:inline-block
,将“拥抱”x和y轴上图像的大小),使
可拖动(因此包含也将如此),并使
可resize(因为div拥抱图像,所有这些都很好)。
工作示例: http : //jsfiddle.net/vrUgs/2/
可resize和可拖动对我来说导致各种DOM转换问题。 这个行为有一个错误 ; 临时修复是应用以下CSS,这对我有用:
.element { position: absolute !important; }
我很好奇,这里是可拖动和可resize的工作代码。 jQuery的:
jQuery(document).ready(function(event){ jQuery(".img").draggable().find("img").resizable(); });
HTML:
我注意到的其他东西,接受或离开它,因为我不知道改变你的JS所涉及的工作。
首先,被拖动的所有’draggables’都会得到一个’.ui-draggable-dragging’类,你可以将它用于你的’isDraggingMedia’逻辑。
第二,为了准确地获得当前位置,我建议使用ui.offset {top:“”,left:“”},可能会更改ui.position {top:“”,left:“”}描述位置相对于被拖动项目的“助手”对象。
$('#div holding imgA+arrindexid').draggable({stop:function(event, ui){ //isDraggingMedia = true; //replace this with a $().is(ui-draggable-dragging) check if possible where it matters in //your other javascript. // Set new x and y resourceData[arrIndexID][4] = Math.round(ui.offset.left / currentScale); resourceData[arrIndexID][5] = Math.round(ui.offset.top / currentScale); }}).find('img').resizable();
根据这个问题: jquery中可resize的可拖动对象。 可能? 如果你只是包含jquery-ui.css它会工作。 当这些都没有时,它解决了我的问题。 我的代码很简单:
$(element).resizable().draggable();
这是可拖动但不可resize。 没有其他工作。 添加CSS允许resize而不需要额外的div或代码。
如果您首先应用可resize,则可以将draggable应用于img的父级; 这是通过应用resizable创建的新div。
chartImg.resizable({ animate: true, ghost: true, handles: 'n,s,e,w,ne,se,nw,sw', start: function (event, ui) { startResize(event, ui); }, resize: function (event, ui) { monitorResize(event, ui); }, stop: function (event, ui) { stopResize(event, ui); } }).parent().draggable({ containment: $(".chartPane") });
负责这个的代码是其他东西的解决方法: Github链接指向Bug 1749 。
// bugfix for http://dev.jquery.com/ticket/1749 if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) { el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left }); }
修复本身从一开始就存在: Github Bug修复了Jquery的链接
// bugfix #1749 if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) { // sOffset decides if document scrollOffset will be added to the top/left of the resizable element var sOffset = $.browser.msie && !o.containment && (/absolute/).test(el.css('position')) && !(/relative/).test(el.parent().css('position')); var dscrollt = sOffset ? o.documentScroll.top : 0, dscrolll = sOffset ? o.documentScroll.left : 0; el.css({ position: 'absolute', top: (iniPos.top + dscrollt), left: (iniPos.left + dscrolll) }); }
并且实际上只是更新了一次,7年前: 更新了链接
// bugfix #1749 // bugfix for http://dev.jquery.com/ticket/1749 if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) { // sOffset decides if document scrollOffset will be added to the top/left of the resizable element var sOffset = $.browser.msie && !o.containment && (/absolute/).test(el.css('position')) && !(/relative/).test(el.parent().css('position')); var dscrollt = sOffset ? this.documentScroll.top : 0, dscrolll = sOffset ? this.documentScroll.left : 0; el.css({ position: 'absolute', top: (iniPos.top + dscrollt), left: (iniPos.left + dscrolll) }); el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left }); }
参考: jquery链接