Javascript d3:是否有一种方法可以通过编程方式停止拖动项目
Javascript d3: Is there a way to programmatically stop dragging an item?
当我点击并拖动一个项目时。有没有一种方法可以在不松开鼠标按钮的情况下强制使其停止可拖动?
例如,如果我将一个项目拖过某个边界框,我可以让它放开被拖的项目吗?
jsfield示例。我从另一个用户那里继承了一个拖拽示例,在代码中添加了一个工作边界。点击创建一个圆圈,然后将它拖到蓝色框上,看看它是否工作。
这里的概念是观察x &当一个对象被拖动时,在d3.event
中的y坐标,然后触发"停止"事件,如下所示。缺点是,在拖动事件接收到mouseUp之前,它会在仍按下鼠标时抛出错误。
// Define drag beavior
var drag = d3.behavior.drag()
.on("drag", dragmove);
function dragmove(d) {
// if the event.x goes over a boundry, trigger "dragend"
if(d3.event.x > 200){
// using D3
drag.dragend();
// or using jquery
drag.trigger("dragend");
}
var x = d3.event.x;
var y = d3.event.y;
d3.select(this).attr("transform", "translate(" + x + "," + y + ")");
}
这里的边界基于一个变量- x位置,但可以扩展为基于形状的表面积。
Drag被用作这个事件的命名空间,D3为这个事件创建了一个dispatcher对象(参见D3库代码)。可以通过调用事件名称(例如)
来访问。drag.on("eventName", functionToDo)
drag.eventName();
或者如果你想使用JQuery
,那么触发器可以使用:
drag.trigger("dragend")
将鼠标悬停事件附加到"边界框"上不起作用,因为被拖动的对象将位于鼠标和框之间。也许这里也有变通的办法。我已经包含了另一个较小的红框(打开控制台,看到这个没有工作)。
来源:
https://github.com/mbostock/d3/wiki/Drag-Behaviorhttps://github.com/mbostock/d3/wiki/Internals dispatch_on
http://api.jquery.com/trigger/相关文章:
- jquery动画可以通过编程链接吗
- 在Highcharts中,我们可以通过任何方式在渲染图表之前获得plotWidth和plotHeight
- 我可以通过JQuery将CSS类交换为一个特殊的元素集吗
- 是否可以通过Chrome扩展内容脚本打开Chrome外部协议请求
- 有没有一种方法可以通过只引用JavaScript来执行代码
- 当一些事情可以通过JS或CSS完成时,我应该选择哪种方式
- 响应式图片库,每个图片都可以通过锚链接访问
- window.open:是否可以通过修改DOM来打开一个新窗口
- 可以通过ClassName在多个画布上绘制
- 我可以通过点击html文件中的按钮来记录我的屏幕/网页吗
- 为什么无法根据谷歌地图地理编码geometry.bounds找到位置,但可以通过MongoDB中的geometry.vi
- 可以通过编程方式在javascript或jquery中单击箭头键
- 有没有一种方法可以通过编程方式按下键盘键
- 有没有任何方法可以通过编程将浏览器选项卡放在前面(跨浏览器)
- 是否可以通过编程方式控制svg
- 是否有一种方法可以通过编程触发TAB键将焦点移动到下一个可聚焦的元素
- Javascript d3:是否有一种方法可以通过编程方式停止拖动项目
- 我可以通过编程在Firefox上启用WebGL反锯齿吗?
- 我可以通过编程将网页的一部分保存为图像吗?
- 在JavaScript中,可以通过编程方式启动文件浏览器对话框