【问题标题】:angular.js and d3.js - geometric exampleangular.js 和 d3.js - 几何示例
【发布时间】:2013-03-02 08:12:46
【问题描述】:

我用d3.js 画了一个Limaçon(见jsfiddle)。当您沿 x 轴移动该点时(我将此变量称为 px,形状会发生一些变化。


(来自 MathWorld - Wolfram 网络资源:wolfram.com

我想复制一个 angular.js 示例(jsfiddle,使用滑块更改 div 的 RGB 颜色);滑块与我的 d3.js 代码中的 px 变量绑定。

如何修改我的 jsfiddle 以添加此用户交互?是不是像onclick()

我想四处移动滑块并更改脚本中的变量“px”,以水平移动一个点。然后我必须重新计算一堆圆的半径。


我知道这里有一点:D3 within an AngularJS app

【问题讨论】:

    标签: javascript angularjs geometry d3.js


    【解决方案1】:

    您可以在此处查看工作示例:http://jsfiddle.net/fRgtF/3/ 基本上,您需要在控制器内针对范围执行所有操作:

    function Controller($scope){
        $scope.$watch("px",function(){
            d3.select('svg').remove();
            var limacon = d3.select(".limacon").append("svg");
    
    x0 = 300;
    y0 = 250;
    
    r = 50;
    px = $scope.px;
    
    limacon.append("circle")
        .attr("cx", x0)
        .attr("cy", y0)
        .attr("r", r)
        .attr("stroke", "#FFCC66")
        .attr("stroke-width", 2)
        .attr("fill", "none");
    
    for (var k = 0; k < 20; k++) {
        limacon.append("circle")
            .attr("cx", x0 + r * Math.cos(2 * Math.PI * 0.05 * k))
            .attr("cy", y0 + r * Math.sin(2 * Math.PI * 0.05 * k))
            .attr("r", r * Math.sqrt(Math.sin(2 * Math.PI * 0.05 * k) * Math.sin(2 * Math.PI * 0.05 * k) + (Math.cos(2 * Math.PI * 0.05 * k) - px / r) * (Math.cos(2 * Math.PI * 0.05 * k) - px / r)))
            .attr("stroke", "steelblue")
            .attr("stroke-width", 1)
            .attr("fill", "none");
    }
    
    limacon.append("circle")
        .attr("cx", x0 + px)
        .attr("cy", y0)
        .attr("r", 1)
        .attr("stroke", "#66CC66")
        .attr("stroke-width", 2)
        .attr("fill", "#66CC66");
        });
    
    }
    

    您的滑块正在修改示波器上的 px 值,这就是我们使用的值。我们在示波器上观察 px 值,并根据新的 px 值重做 d3 工作。

    【讨论】:

    • 您不应该像这样修改控制器内部的 DOM。这种类型的代码属于指令。
    • 是的,这将是最佳做法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2012-11-09
    相关资源
    最近更新 更多