Javascript d3防止特定元件上的阻力

Javascript d3防止特定元件上的阻力,javascript,svg,d3.js,Javascript,Svg,D3.js,我试图在d3中画几个矩形。我有一个数组,它保存矩形属性的JSON对象 var rectObj = { id : 'streams', x : 10, y : 10, height : 50, width : 100, drag:'true' }; 一些矩形具有draggable='true',而其他矩形具有draggable='false' 我想在一个SVG中绘制所有矩形。他们知道我是怎么做的 var rectangles = mainLayo

我试图在d3中画几个矩形。我有一个数组,它保存矩形属性的JSON对象

var rectObj = {
    id : 'streams',
    x : 10,
    y : 10,
    height : 50,
    width : 100, 
    drag:'true'
};
一些矩形具有draggable='true',而其他矩形具有draggable='false'

我想在一个SVG中绘制所有矩形。他们知道我是怎么做的

var rectangles = mainLayout
            .selectAll('rect')
            .data(rectObjects)
            .enter()
            .append('rect');

rectangles
        .attr("x", function (d) { return d.x; })
        .attr("initial-x", function (d) { return d.x; })
        .attr("y", function (d) { return d.y; })
        .attr("initial-y", function (d) { return d.y; })
        .attr("height", function (d) { return d.height; })
        .attr("width", function (d) { return d.width; })
        .attr("fill", function () { return "white"; })
        .attr("stroke", function () { return "black"; })
        .style("stroke-width", function() { return "1 px"; })
        .attr("draggable",function(d){return d.drag;})
        .call(dragStream)
;
在dragStream上,我想停止drag函数的执行。也就是说,这些矩形在拖动时不应该做任何事情

var dragStream= d3.behavior.drag()
                    .on('dragstart', function(){
                        console.log('drg' + d3.select(this).attr('draggable'));
                        if(d3.select(this).attr('draggable') == 'false'){
                           // what should I do here ? 
                        }
                    })
            .on('drag', move /* this function is defined and works well*/)
            .on('dragend', function(){ // I do some stuff here

   });

我应该怎么做才能达到上述要求

您需要在drag事件中进行区分,而不是dragstart

.on('drag', function(d, i) { if(d3.select(this).datum().drag) move.call(this, d, i); }).

如果您使用
.datum()
。那么你就不需要写任何属性了。当d3将数据绑定到存储在DOM元素上的选择时,可以使用
.datum()
访问它。此操作返回的值是对数据数组对象的引用,因此您可以访问那里的
拖动
属性

您需要在
拖动
事件中进行区分,而不是
拖动启动
.on('drag',function(d,i){if(d3.select(this).datum().drag)move.call(this,d,i);})
。如果您使用
.dataum()
。那么你就不需要写任何属性了。我不理解datum()的用法。你能解释一下我如何使用它来满足我的要求吗?你是什么意思?我已经在评论中解释过了。。。试试看。好的,我成功了。谢谢,很好,我在下面的回答中解释了更多,你能接受吗?