有没有一种方法可以单击svg中的任何位置,并将元素捕捉到该位置,同时开始拖动?
我得到的最接近的是下面的代码。拖动圆可以工作,单击其他位置可以使圆移动到该位置,但我不知道如何在不释放鼠标并直接单击圆的情况下开始拖动。
更一般地说,如何在不直接与被拖动元素交互的情况下启动拖动行为?
http://jsfiddle.net/Hj44M/1/
var width = 200,
height = 200,
radius = 10;
var drag = d3.behavior.drag()
.origin(function(d) { return d; })
.on("dragstart", function(){
d3.event.sourceEvent.stopPropagation()
})
.on("drag", dragmove);
var svg = d3.select("body")
.data([{x: 100, y : 100}])
.append('svg')
.attr("height", 200)
.attr("widht", 200)
.on("mousedown", function(){
circle.each(dragmove)
});
var circle = svg.append("circle")
.attr("r", radius)
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; })
.call(drag);
function dragmove(d) {
d3.select(this)
.attr("cx", d.x = Math.max(radius, Math.min(width - radius, d3.event.x)))
.attr("cy", d.y = Math.max(radius, Math.min(height - radius, d3.event.y)));
}
更新
我已经用一种蛮力解决方案解决了这个问题:我删除了拖动行为,只是在svg画布上添加了mousedown、mousemove和mouseup处理程序。这是我想要的功能,但我仍然更喜欢使用d3的拖动行为。如果有人有更优雅的解决方案,一定要告诉我。
http://jsfiddle.net/Hj44M/5/
var width = 200,
height = 200,
radius = 10;
var isDown = false;
var svg = d3.select("body")
.data([{x: 100, y : 100}])
.append('svg')
.attr("height", 200)
.attr("width", 200)
.on("mousedown", function(){
isDown = true;
var coordinates = d3.mouse(this);
circle.each(function(d){
circle.attr("cx", d.x = coordinates[0])
circle.attr("cy", d.y = coordinates[1])
})
})
.on("mousemove", function(){
if(isDown) {
var coordinates = d3.mouse(this);
circle.each(function(d){
circle.attr("cx", d.x = coordinates[0])
circle.attr("cy", d.y = coordinates[1])
})
}
})
.on("mouseup", function(){
isDown = false;
});
var circle = svg.append("circle")
.attr("r", radius)
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
我尝试了几乎所有的方法,但是鼠标拖动事件没有触发,就像这里解释的那样: https://openjfx.io/javadoc/11/javafx.graphics/javafx/scene/input/MouseDragEvent.html 下面是一个简单的示例,您可以尝试一下(我在JavaFX11.0.2中使用Java11): 我想通过在或中获取的引用。有许多嵌套窗格等,因为我想保持原来的项目布
问题内容: 因此,正如标题所述,我想在鼠标拖动时移动椭圆。我先声明了椭圆并将其画出(因为我有8个椭圆,它们带有不同的颜色信息。四个是白色,另一个是红色)。我尝试做我对矩形所做的事情: 但这似乎不起作用。它给我一个错误 我有点困惑,因为我已经阅读了文档,并且Ellipse2D.Double存在这样的变量。 这是一个MCVE: 那么是否有替代算法,或者我只是在语法上缺少什么?我想知道解决方案。谢谢。
本文向大家介绍支持IE,firefxo,chrome浏览器下鼠标拖动和拖拽的鼠标指针特效,包括了支持IE,firefxo,chrome浏览器下鼠标拖动和拖拽的鼠标指针特效的使用技巧和注意事项,需要的朋友参考一下 核心代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv
当鼠标按下拖拽某div时,位置会跳一下,这个怎么解决? https://play.vuejs.org/#eNqlV29v20QY/yqHVamOlDmFl6GtxjQESExIE...
拖放(Drag’n’Drop)是一个很赞的界面解决方案。取某件东西并将其拖放是执行许多东西的一种简单明了的方式,从复制和移动文档(如在文件管理器中)到订购(将物品放入购物车)。 在现代 HTML 标准中有一个 关于拖放的部分,其中包含了例如 dragstart 和 dragend 等特殊事件。 这些事件使我们能够支持特殊类型的拖放,例如处理从 OS 文件管理器中拖动文件,并将其拖放到浏览器窗口中。
我创建了一个简单的GUI,一个JComboBox和JButton。JButton用testString类的对象填充JComboBox。当鼠标悬停在JComboBox上时,它几乎触发了testString类的toString()25次。为什么会这样?我们怎样才能阻止它? 以下是代码: 图形用户界面输出