我想讓用戶使用brush
來選擇一系列值。但是,在我的應用程序中只有離散值是有意義的,所以我想限制畫筆到這些離散值(整數,比方說)。將畫筆限制在離散範圍
這樣做的一種方法是使用Ordinal Brushing中描述的方法。在這個例子中,刷子本身可以取連續值,然後將其映射到序數標度的離散值。
我想得到一個畫筆,當用戶刷或拖動畫筆時,它會捕捉離散值。我想出了一些基本的工作原理:四捨五入target.extent
,然後重新選擇圓角範圍(Fiddle):
function brush() {
var s = d3.event.target.extent();
if (d3.event.mode === "move") {
var extentlength = Math.round(s[1] - s[0])
d3.event.target.extent([Math.round(s[0] + 0.5) - 0.5,
Math.round(s[0] + 0.5) - 0.5 + extentlength])
} else {
d3.event.target.extent([Math.round(s[0] + 0.5) - 0.5,
Math.round(s[1] + 0.5) - 0.5])
}
d3.event.target(d3.select(this))
}
但是,這感覺有點笨重,而且它會導致不良行爲當用戶拖動畫筆時,光標可以懸停在畫筆邊緣,將光標符號從「拖拽」狀態變爲「調整尺寸」 - 箭頭。
是否有一種更優雅和可靠的方式獲取只允許選擇離散範圍的筆刷?
我認爲你是在正確的軌道上。我試着改變你的小提琴使用「brushend」事件,而不是「brush」,並且我覺得它有點笨重(平滑幻燈片和發佈時的快照),但這是有爭議的。 –