javascript - 禁用清除 D3.js 画笔

标签 javascript user-interface d3.js brush

我想使用 D3.js 画笔来允许用户在轴上选择一系列值。默认情况下,在画笔外部单击会将其清除,因此不会选择任何范围。

但是,我想调整此行为,以便在画笔外部单击不会改变画笔范围。实际上,应该没有办法清除画笔,应该始终选择一些范围。

我相信我必须 Hook brush event以某种方式禁用清除,但我真的不知道该怎么做。

这是我正在谈论的那种接口(interface)的示例 ( Fiddle )。当您单击黑色条的左侧或右侧时,画笔被清除并且条消失。

如何禁用此行为?

最佳答案

一旦用户在画笔元素上按下鼠标(即在“mousedown.brush”事件上),d3 画笔设计就会调用“brushmove()”。 如果有效导致重置以前的刷子范围。

一种可能的解决方法是将原始的 mousedown.brush 处理程序替换为自定义处理程序。一旦鼠标在初始 mousedown 后移动,自定义处理程序将仅调用原始处理程序。

var brushNode = chart.append("g")
    .call(brush);

brushNode
    .selectAll("rect")
    .attr("y", -10)
    .attr("height", 10);

// store the reference to the original handler
var oldMousedown = brushNode.on('mousedown.brush');

// and replace it with our custom handler
brushNode.on('mousedown.brush', function () {
    brushNode.on('mouseup.brush', function () {
        clearHandlers();
    });

    brushNode.on('mousemove.brush', function () {
        clearHandlers();
        oldMousedown.call(this);
        brushNode.on('mousemove.brush').call(this);
    });

    function clearHandlers() {
        brushNode.on('mousemove.brush', null);
        brushNode.on('mouseup.brush', null);
    }
})

参见 demo .

关于javascript - 禁用清除 D3.js 画笔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18036836/

相关文章:

qt - 如何摆脱处理程序拖动延迟?

javascript - 如何将两个一维频率分布图放在一起?

d3.js - 仅选择使用 d3.js 更新元素

javascript - CSV 颜色数据未呈现

javascript - 为什么 Object.keys 不能与 DOM 节点一起使用?

winforms - .net 中的主从 GUI

javascript - 如何扩展文本区域以垂直和水平适应文本?

html - 自定义 HTML 选择创建

javascript - Template.foo.rendered 应用于所有 'foo'

javascript - 为什么 JQuery 不传递替换 div 中的 post_id 和 post_type