我有以下代码(jsfiddled)。我想使用红色 SVG 矩形作为可拖动 div 元素的句柄,但是因为 SVG 元素不是 div 的子元素,所以这是不可能的。这个想法是让手柄(红色矩形)触发 div 的拖动事件,当拖动 div 时,代码会更新红色 SVG 矩形的位置。如何让 SVG 矩形充当 div 的拖动句柄(以便 SVG 元素不是 div 元素的子元素)?
我已经测试过使 SVG 成为 div 的子对象,并使用 SVG rect 作为句柄,这可以正常工作。当我拖动 SVG 矩形时,拖动时会移动 div 和 SVG 矩形。但问题是 SVG 元素本身也被拖动了。但我不希望 SVG 元素本身在拖动时移动,只有 rect 和 div。
编辑:当在 svg rect 上按下鼠标时,某种触发 div 的拖动事件作为一种可能的解决方案出现在我的脑海中,但尚未经过测试。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>jQuery UI Draggable - Handles</title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.9.0/themes/base/jquery-ui.css" />
<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script src="http://code.jquery.com/ui/1.9.0/jquery-ui.js"></script>
<style>
#draggable { position:absolute; opacity:0.5;
width: 100px; height: 100px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
#draggable p { cursor: move; }
#draggable {left:30px;top:0px;z-index:1}
</style>
<script>
$(function() {
$( "#draggable" ).draggable({ handle: "p" });
$( "div, p" ).disableSelection();
});
</script>
</head>
<body>
<div id="draggable" class="ui-widget-content">
<p class="ui-widget-header">I can be dragged only by this handle</p>
</div>
<svg width="500" height="500" style="position:absolute;z-index:-1">
<rect x="0" y="0" width="100" height="100" fill="#FF8888"/>
</svg>
</body>
</html>