2017-10-12 30 views
1

這裏缺少一些東西,因爲當筆刷被移除時(您單擊筆刷而不是拖動)?活動選擇不會重置(例如,畫筆未被移除)。d3筆刷在清除時不重置

任何想法如何解決?

乾杯!

// Handles a brush event, toggling the display of foreground lines. 
function brush_parallel_chart() {  
    for(var i=0;i<dimensions.length;++i){ 
     if(d3.event.target==y[dimensions[i]].brush) { 
      extents[i]=d3.event.selection.map(y[dimensions[i]].invert,y[dimensions[i]]); 
     } 
    } 

    foreground.style("display", function(d) { 
     return dimensions.every(function(p, i) { 
      if(extents[i][0]==0 && extents[i][0]==0) { 
       return true; 
      } 
      return extents[i][1] <= d[p] && d[p] <= extents[i][0]; 
     }) ? null : "none"; 
    }); 
} 

http://plnkr.co/edit/RkWBgQ6oi584H3212WrM?p=preview

這種情況發生時,我們徹底清除刷在啓動:

enter image description here

回答

2

我叉你的代碼。看看這個 - http://plnkr.co/edit/oYhx6DSjQHI3E3nmE97h?p=preview 它是你需要的行爲嗎?

g.append("g") 
    .attr("class", "brush") 
    .each(function(d) { 
    d3.select(this).call(y[d].brush = d3.brushY().extent([[-8, 0], [8,height]]) 
    .on("start", brushstart) // <-- !! 
    .on("brush", gobrush) 
    .on("brush", brush_parallel_chart)); 
    }) 
    .selectAll("rect") 
    .attr("x", -8) 
    .attr("width", 16); 

我改名爲你brushstart功能gobrush。並創建了新的brushstart功能。我在選擇開始事件上添加了新的brushstart功能。在這個功能中,我設置了適當的樣式,這會重置選擇。

function brushstart(selectionName) { 
    foreground.style("display", "none") 

    var dimensionsIndex = dimensions.indexOf(selectionName); 

    extents[dimensionsIndex] = [0, 0]; 

    foreground.style("display", function(d) { 
    return dimensions.every(function(p, i) { 
     if(extents[i][0]==0 && extents[i][0]==0) { 
      return true; 
     } 
     return extents[i][1] <= d[p] && d[p] <= extents[i][0]; 
    }) ? null : "none"; 
    }); 
} 
+1

但是會發生什麼情況是所有畫筆選擇都會重置。如果我應用了兩個刷子並僅移除了一個刷子,那麼過濾依然應該解決剩下的另一個。請查看我剛發佈的圖像。 – konrad

+1

@ konrad哦,我沒有注意到這是可能的,同時設置了兩個或更多的選擇。我更新了答案,看看plnkr上的新鏈接。 –