D3js中each与call使用区别

D3js中each与call使用区别

2019-01-10 14:31:35 骤逝 阅读数 504更多

在对选集中的对象进行操作的时候,each和call都可以使用,通过如下代码具体分析他们使用的区别:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../d3.min.js"></script>
    <style type="text/css">
        .red {
            background-color: red;
        }

        .box {
            height: 100px;
            width: 100px;
        }

        .blue {
            background-color: blue;
        }
    </style>
</head>
<body>
<span id="eachSelect">
        <div></div>
        <div></div>
        <div></div>
        </span>

<span id="callSelect">
        <div></div>
        <div></div>
        <div></div>
        </span>

<script type="text/javascript">

    // 1-code
    d3.select("#eachSelect").selectAll("div")
        .attr("class", "red box")
        .each(function (d, i) {
            d3.select(this).append("h1").text(i);
        });

    // 2-code
    d3.select("#callSelect").selectAll("div")
        .attr("class", "blue box")
        .call(function (d, i) {
            d.append("h1").text(i);
            //this.append("h1").text(i);
        }, "1");

    // 3-code

    // d3.select("#callSelect").selectAll("div")
    //     .attr("class", "blue box")
    //     .call(function (d) {
    //         d.each(function (d, i) {
    //             d3.select(this).append("h1").text(i);
    //         });
    //     });


</script>
</body>
</html>

1.code中使用的each,可以看出来他的作用是对选集中的对象进行遍历操作,其中参数d为undefined,参数i为遍历元素的下标,this表示当前操作的对象;
2.code中使用的call,可以看出来其中的d参数就是选集中的对象与this一样,d之后的参数由用户自定义传递;
如果您使用了call也可以变通的实现each的操作过程,例如3-code的例子。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
d3.js库的lasso工具可以用于选择散点图的数据点。要使用lasso工具,需要先在d3.js引入相应的库,然后在散点图的绘制代码加入相应的代码。具体步骤如下: 1. 引入库: ```javascript <script src="https://d3js.org/d3.v5.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/d3-lasso/2.0.0/d3-lasso.min.js"></script> ``` 2. 创建lasso: ```javascript var lasso = d3.lasso() .closePathSelect(true) .closePathDistance(100) .items(scatter.selectAll("circle")) .targetArea(svg); ``` 3. 绑定lasso事件: ```javascript scatter.call(lasso); lasso.on("start", function() { lasso.items() .attr("r", 7) // 设置被选的点的大小 .classed("not_possible", true) .classed("selected", false); }); lasso.on("draw", function() { lasso.items().filter(function(d) { return d.possible === true }) .classed("not_possible", false) .classed("possible", true); lasso.items().filter(function(d) { return d.possible === false }) .classed("not_possible", true) .classed("possible", false); }); lasso.on("end", function() { lasso.items() .classed("not_possible", false) .classed("possible", false); var selectedItems = lasso.items().filter(function(d) { return d.selected === true }); var unselectedItems = lasso.items().filter(function(d) { return d.selected === false }); selectedItems.attr("class", "selected"); unselectedItems.attr("class", ""); }); ``` 上述代码,`scatter`是散点图的容器,`svg`是整个SVG画布的容器。`lasso()`函数可以设置lasso的一些参数,如是否闭合选区、闭合距离等等。`lasso.items()`函数可以设置lasso要选择的元素,这里是散点图的所有圆点。`lasso.on()`函数可以设置lasso的事件,如鼠标按下、移动、松开等等。`lasso.items().filter()`函数可以根据元素的属性进行筛选,这里是根据是否被选来进行筛选。在`end`事件,可以根据lasso选的元素进行相应的操作,如改变它们的样式等等。 以上就是在d3.js散点图使用lasso工具的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值