d3js缩放+拖动导致冲突

法赞

我正在尝试将缩放行为应用于svg,其中svg中的某些元素已经绑定了拖动行为。如果没有缩放行为,则拖动工作正常,如果没有拖动行为,则缩放工作正常。当我同时拥有它们时,就会发生冲突。当我拖动一个圆时,所有其他圆都开始随之拖动。

这是小提琴

谁能帮我解决这个问题?

<svg height="600" width="600" style="background: black">

<g>
    <rect x="0" y="0" , width="600" height="40" style="fill:gold;"></rect>
    <circle id='drag' cx="15" cy="20" init-cx="15" init-cy="20" r="10"
            style="stroke: white; stroke-width: 2px; fill:blue"/>

</g>

<g id="playground">
    <g>
        <circle class='top' cx="180" cy="120" r="30" style="stroke: white; stroke-width: 2px; fill:white"/>
    </g>
    <g>
        <circle class='top' cx="200" cy="220" r="30" style="stroke: white; stroke-width: 2px; fill:white"/>
    </g>
    <g>
        <circle class='top' cx="320" cy="150" r="50" style="stroke: white; stroke-width: 2px; fill:white"/>
    </g>
</g>

var zoom = d3.behavior.zoom()
        .scaleExtent([-1, 8])
        .on("zoom", function () {

            var graph = d3.select('svg');

            graph
                .select('#playground')
                .selectAll('circle')
                .select(function () {
                    return this.parentNode;
                })
                .attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
        });


    var move = d3.behavior.drag()

        .on('drag', function () {

            console.log('dragging');

            var curr = d3.select(this)
                .attr({
                    cx: d3.mouse(this)[0],
                    cy: d3.mouse(this)[1]
                })


        })
        .on('dragend', function () {

            var curr = d3.select(this);

            d3.select('#playground')
                .append('circle')
                .attr({
                    cx: curr.attr('cx'),
                    cy: curr.attr('cy'),
                    r: curr.attr('r')
                })
                .style({
                    fill: 'white',
                    stroke: 'red',
                    'stroke-width': '2px'
                })
            ;

            curr.attr({
                cx: curr.attr('init-cx'),
                cy: curr.attr('init-cx')
            });
        })
        ;


    d3.select('#drag').call(move);

    d3.select('.top')
        .call(d3.behavior.drag().on('drag', function () {
            d3.select(this)
                .attr({
                    cx: d3.mouse(this)[0],
                    cy: d3.mouse(this)[1]
                })
            ;
        }));
    d3.select('svg').call(zoom);
吉尔莎

我实现了单独拖动节点以及整体缩放和平移功能。stopPropagationdragstart圈子事件中用于事件。

希望这可以帮助。

var move = d3.behavior.drag()
    .on("dragstart", function() {
        d3.event.sourceEvent.stopPropagation();
    });

工作中的JSFiddle

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在中标记节点会导致D3JS中的缩放故障

来自分类Dev

rect冲突检测d3js

来自分类Dev

在d3js气泡图中拖动气泡

来自分类Dev

D3js的节点和链接拖动行为

来自分类Dev

如何使用d3js拖动完整的svg?

来自分类Dev

D3js重置拖动行为的来源

来自分类Dev

在d3js气泡图中拖动气泡

来自分类Dev

D3js:拖动滑块可触摸

来自分类Dev

d3强制布局缩放和平移与节点拖动冲突

来自分类Dev

d3拖动事件导致TypeError

来自分类Dev

D3js:在每个条形图上缩放轴

来自分类Dev

D3js手动绘制圆缩放

来自分类Dev

D3JS缩放和过渡性能

来自分类Dev

d3js图形的时间解析和缩放

来自分类Dev

d3js散点图中的缩放功能

来自分类Dev

d3.js:将缩放与强制布局配合使用时,拖动被禁用

来自分类Dev

在d3.js中使用弧形链接在背景布局中拖动背景以进行缩放

来自分类Dev

使用d3拖动和缩放图表

来自分类Dev

覆盖CSS会导致D3JS树路径链接在节点扩展或折叠后可见

来自分类Dev

使用d3fc-label-layout向d3js地图添加缩放

来自分类Dev

jQuery由于与prototype.js冲突而导致路由错误

来自分类Dev

jQuery由于与prototype.js冲突而导致路由错误

来自分类Dev

d3js:有两个y轴时进行缩放

来自分类Dev

d3js多折线图,具有焦点+上下文缩放

来自分类Dev

如何实现只有完全缩放d3js才能单击气泡

来自分类Dev

d3js在一个方向上缩放,在两个方向上平移

来自分类Dev

d3js:在有两个y轴时进行缩放

来自分类Dev

在D3js中使用缩放/平移添加多个y轴

来自分类Dev

使用d3js从笔刷缩放恢复为原始图形