使用d3.behavior.drag,如何使拖动图像在svg元素外部可见

吉恩·皮埃尔·卢格拉特

使用d3.behavior.drag(),有一种方法可以使拖动的图像在其父svg元素边界之外可见

在我的应用程序中,我有一个基于HTML网格的顶部布局(使用flexBox),并且每个网格单元中都有几个D3.js图。每个图都以SVG元素及其子元素构建。

我需要拖放功能才能在这些图之间复制/移动元素。像现在一样,该功能正常工作,但是当我越过源图的边界时拖动图像消失了。

<!DOCTYPE html>
<meta charset="utf-8">
<style>

    svg {
        float: left;
        border-bottom: solid 1px #ccc;
        border-right: solid 1px #ccc;
        margin-right: -1px;
        margin-bottom: -1px;
    }

</style>
<body>
<script src="//d3js.org/d3.v3.min.js"></script>
<script>

    var width = 240,
            height = 125,
            radius = 20;

    var overSVG;

    var drag = d3.behavior.drag()
            .origin(function (d) {
                return d;
            })
            .on("drag", dragmove)
            .on("dragend", dragend);

    var svg = d3.select("body").append("div").selectAll("svg")
            .data(d3.range(2).map(function (v, i) {
                return {
                    svgElement: i,
                    x    : width / 2,
                    y    : height / 2
                };
            }))
            .enter().append("svg")
            .attr("width", width)
            .attr("height", height)
            .attr("id", function (d, i) {
                return "svg_" + i
            })
            .on("mouseover", over)
            .on("mouseout", out);

    svg.append("circle")
            .attr("r", radius)
            .attr("cx", function (d) {
                return d.x;
            })
            .attr("cy", function (d) {
                return d.y;
            })
            .attr("svgElement", function (d, i) {
                return i;
            })
            .call(drag);

    function over(d, i) {
        overSVG = d;
        var selectedNodeId = "#svg_" + i;
        d3.select(selectedNodeId)
                .attr("fill", 'red');
    }
    function out(d, i) {
        overSVG = "";
        var selectedNodeId = "#svg_" + i;
        d3.select(selectedNodeId)
                .attr("fill", 'blue');
    }

    function dragmove(d) {
        d3.select(this)
                .attr("cx", d.x = d3.event.x)
                .attr("cy", d.y = d3.event.y);

        console.log("drag move", this, d3.event.x, ' ', d3.event.y);
    }
    function dragend(d) {
        console.log("==>drag Ended :");
        console.log("   dragged circle", this);
        console.log("   from svg ", d);
        console.log("   to",  overSVG);
    }

</script>

命令

默认情况下,svg元素的overflow属性设置为hidden您可以尝试将overflow属性设置visible

svg {
   overflow: visible;
}

同样,在没有看到有效的示例的情况下,很难说这是否对您有用,但是也许可以帮上忙。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用d3.behavior.drag,如何使拖动图像在svg元素外部可见

来自分类Dev

使用d3.behavior.drag()时,拖动时的鬼影消失。

来自分类Dev

d3.behavior.drag + keydown事件

来自分类Dev

如何使用d3旋转?

来自分类Dev

ReactJS - 使用 D3 嵌入 Svg 图像

来自分类Dev

如何使用d3找到SVG的左上角?

来自分类Dev

如何使用D3在非常特定的位置插入元素

来自分类Dev

如何使用D3在非常特定的位置插入元素

来自分类Dev

使用D3制作水平可拖动图形

来自分类Dev

使用d3拖动和缩放图表

来自分类Dev

如何删除d3.behavior.drag()。on(“ drag”,...)事件处理程序

来自分类Dev

如何在使用d3.behavior.zoom()进行平移时删除“跳动”

来自分类Dev

使用外部JSON文件填充D3图表

来自分类Dev

使用D3 DataMaps选择SVG项目?

来自分类Dev

在传单上使用d3使SVG透明

来自分类Dev

在d3中的变量中使用SVG属性

来自分类Dev

使用d3修改HTML中的SVG

来自分类Dev

在传单上使用d3使SVG透明

来自分类Dev

D3使用图案用图像填充形状

来自分类Dev

使用jQuery使图像在div中可见

来自分类Dev

使用d3扣除文字元素的高度

来自分类Dev

使用d3定位伪元素-有可能吗?

来自分类Dev

如何使用React创建d3力布局图

来自分类Dev

您如何使用D3访问对象数组?

来自分类Dev

如何使用函数在D3中绑定数据

来自分类Dev

如何使用d3动态更新嵌套列表?

来自分类Dev

如何使用d3更新文本输入的内容?

来自分类Dev

如何使用D3防止小形状的前卫阴影

来自分类Dev

如何使用d3设置Javascript按钮的样式?