d3.js:限制画笔大小

2024-01-19

有没有办法限制画笔的大小,即使范围更大?

我制作了一个只有 x 刻度的画笔,可以移动和调整大小。我希望能够限制用户调整大小的范围(基本上仅限于某个点)。

在以下示例中,当画笔大于最大范围的一半时,画笔函数停止更新。不过,刷子本身仍然可以延长。有没有办法防止这种情况发生?或者有更好的方法来处理这个问题吗?

非常感谢!

请在此处查看此代码的实际操作:http://bl.ocks.org/3691274 http://bl.ocks.org/3691274 (EDIT:这个演示现在可以运行了)

bar = function(range) {

      var x_range = d3.scale.linear()
          .domain([0, range.length])
          .range([0, width]); 

      svg.selectAll("rect.items").remove();

      svg.selectAll("rect.items")
          .data(range)
        .enter().append("svg:rect")
          .attr("class", "items")
          .attr("x", function(d, i) {return x_range(i);})
          .attr("y", 0)
          .attr("width",  width/range.length-2)
          .attr("height", 100)
          .attr("fill", function(d) {return d})
          .attr("title", function(d) {return d});
}

var start = 21;
bar(data.slice(0, start), true);

var control_x_range = d3.scale.linear()
    .domain([0, data.length])
    .range([0, width]); 

controlBar = svg.selectAll("rect.itemsControl")
    .data(data)
  .enter().append("svg:rect")
    .attr("class", "itemsControl")
    .attr("x", function(d, i) {return control_x_range(i);})
    .attr("y", 110)
    .attr("width",  width/data.length-2)
    .attr("height", 20)
    .attr("fill", function(d) {return d});

svg.append("g")
    .attr("class", "brush")
    .call(d3.svg.brush().x(d3.scale.linear().range([0, width]))
    .extent([0,1*start/data.length])
    .on("brush", brush))
  .selectAll("rect")
    .attr("y", 110)
    .attr("height", 20);

function brush() {
    var s = d3.event.target.extent();

    if (s[1]-s[0] < 0.5) {
        var start = Math.round((data.length-1)*s[0]);
        var end = Math.round((data.length-1)*s[1]);

        bar(data.slice(start,end));
    };

}

我最终通过在超出尺寸时将画笔重新绘制到其允许的最大尺寸来解决这个问题:

function brush() {
    var s = d3.event.target.extent();
    if (s[1]-s[0] < 0.5) {
        var start = Math.round((data.length-1)*s[0]);
        var end = Math.round((data.length-1)*s[1]);

        bar(data.slice(start,end));
    }
    else {d3.event.target.extent([s[0],s[0]+0.5]); d3.event.target(d3.select(this));}
} 

Demo: http://bl.ocks.org/3691274 http://bl.ocks.org/3691274

我仍然有兴趣阅读更好的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

d3.js:限制画笔大小 的相关文章

随机推荐

  • 在 .NET 中上传大文件

    我做了很多研究来找到一个 NET 的上传组件 我可以用它来上传大文件 有一个进度条 并且可以恢复大文件的上传 我遇到过一些组件 例如Ajax上传器 http ajaxuploader com 流畅上传 http krystalware co
  • 如何让span占据包含td的整个高度

    我有一个表 在左列中我想为该行添加一个指示器 我使用跨度来渲染指示器 但无法让跨度占据整个高度 table tr td style padding 0px span style height 100 width 5px background
  • 触发 onactivatefile 时向预览图像添加图标/div (Filepond)

    背景 我有一个 django 项目 用户可以上传多个图像 其中一个将是主图像 我正在使用 Filepond 上传和优化图像 Filepond 上传文件的顺序并不总是与用户选择的文件的顺序相同 因此 我尝试为用户提供一个选项 用户单击文件 在
  • Jasmine 在单独的测试项目中

    将 jasmine 测试分离到单独的 Visual Studio 项目中是否实用 可能 我刚刚开始使用角度 并尝试在开始实际的角度实现之前编写我的测试 我将写我的项目视觉工作室2012与厚颜无耻的测试运行者 看这个video http ww
  • iPhone sqlite 应用程序可以附加到其他数据库吗?

    ATTACH DATABASE 命令对于在 sqlite 数据库文件之间传输行非常有用 并允许您跨数据库连接表中的行 例如 sqlite3 BookLoansDB sqlite sqlite gt ATTACH DATABASE Users
  • Android - 使用图像资源背景动态构建 UI 时出现内存泄漏

    我有一个活动 我发誓正在泄漏内存 我正在开发的应用程序需要处理大量图像 因此在直接使用位图时 我必须非常吝惜内存 我添加了一个 Activity 现在如果您使用这个新 Activity 它基本上会让我处于内存使用的边缘 最终抛出 位图超出
  • Ubuntu 中的 .m2 、settings.xml [重复]

    这个问题在这里已经有答案了 在 Windows 环境中 您将在 C Users user name 位置中有 m2 文件夹 您将把 settings xml 文件复制到其中 以便设置代理设置和 Nexus 存储库位置等 那么我必须在 Ubu
  • 多个 CALayers 动画 - 填充模式

    我将屏幕分成小块 然后为每个块设置动画以执行转换 for int x 0 x
  • javascript能区分左移键和右移键吗?

    大多数情况下 这是一个健全性检查 两个 Shift 键的键码都是 16 这是否意味着浏览器中实际上无法区分左移和右移事件 在较新的浏览器中支持DOM3您可以使用event location检查位置 In DOM3 规范 http www w
  • 安装和导入 SendKeys 时出现问题 -- 更新

    我正在尝试安装适用于 Python 的 SendKeys If I use pip install SendKeys 我收到链接错误 sendkeys c 150 warning C4013 Py InitModule undefined
  • 如何在 TypeScript 中使用回调正确处理 let-variables?

    在使用 TypeScript 期间 我对一种常见的 JavaScript 模式有点挣扎 是关于 声明一些 let 变量而不为其设置任何初始值 在某个回调中将此值设置为变量 执行回调后使用此变量 这是代码示例 const wait cb Fu
  • 最小值应匹配过滤查询

    是否可以有这样的查询 query filtered filter terms names Anna Mark Joe execution and 随着 minimum should match 2 陈述 我知道我可以使用一个简单的查询 我已
  • t-sql 求和时间戳之间的差异

    我正在跟踪机器状态 可以是 0 1 和 2 并将该数据与 time stamp 一起存储在 SQL 表中 我在 sql server 中有一个表 其中包含下一个字段 id 整数 时间戳 日期时间 机器状态 int 机器状态与机器状态相关 m
  • ST_MAKELINE 丢弃重复点,即使不连续

    考虑这个简化的例子 SELECT ST MAKELINE ST GEOGPOINT 5 51 ST GEOGPOINT 5 52 ST GEOGPOINT 5 51 我希望这能构建一条包含三个点的线 并在自身上加倍 相反 我得到的是 LIN
  • Django - Ajax 注册

    我正在尝试允许注册 使用此django registration register http docs b list org django registration 0 8 views html registration views reg
  • 应用程序服务器是否为同一用户的每个请求创建新线程?

    这是一个简单的场景 用户从 Web 应用程序的网页触发某些操作 这项手术是一项繁重的手术 需要更多的时间 在服务器端完成操作之前 用户触发使用一些不同参数的相同操作 因此第二个请求的第二个操作也将开始处理 那么在这种情况下 是否有两个不同的
  • 如何避免 jq 截断长小数

    如何防止 jq 截断长十进制值 例如 echo 18302628978110292481 jq 结果 18302628978110292000 Javascript 不支持这么大的数字 所以也不支持jq 整数大小是2 53 Check th
  • 我们如何在 Angularjs 指令之外使用 $compile

    我想用 compile在函数内的控制器中而不是在指令中 是否可以 我正在尝试下面的代码 compile div Cancel div scope 但这会抛出范围未定义的错误 我试图通过 scope在函数内部 但它不起作用 Angular 如
  • 为什么 Docker 中的 pg_restore 出现段错误?

    我正在 docker 容器内测试 postgres 数据库的备份 恢复过程 我像这样转储我的数据库 docker exec ti my postgres container pg dump Fc U postgres gt db dump
  • d3.js:限制画笔大小

    有没有办法限制画笔的大小 即使范围更大 我制作了一个只有 x 刻度的画笔 可以移动和调整大小 我希望能够限制用户调整大小的范围 基本上仅限于某个点 在以下示例中 当画笔大于最大范围的一半时 画笔函数停止更新 不过 刷子本身仍然可以延长 有没