我在d3.js中有两个简单的物体,它们应围绕视口的中心盘旋(就像围绕太阳的行星一样).

我是d3.js的新手,我知道我必须使用过渡但是因为行星必须一直循环而不仅仅是进入或退出我不知道在哪里以及如何设置过渡.

这是我目前的代码:

var planets = [
    {d:100,r:2},{d:150,r:4}
];

var w = 500,h = 400,svg,circle;

function init(){

    svg = d3.select("#drawArea").append("svg").attr({width: w,height: h});

    var center = {
        x: Math.floor(w/2),y: Math.floor(h/2)
    };

    svg.append('circle').attr({
        'cx': center.x,'cy': center.y,'r': 10,'class': 'sun'
    });

    circle = svg.selectAll(".planet")
        .data(planets)
        .enter()
            .append("circle")
                .attr("class","planet")
                .attr("r",function(s){return s.r});

    circle.attr({
        // distance from the center
        'cx': function(s){ return center.x - s.d; },// center of the screen
        'cy': function(s){ return center.y; }
    });

}

这里有一个jsfiddle玩.

解决方法

你需要:

>将你的行星放在以g为中心的g组中
>创建一个用于旋转组的d3.timer.

有关使用d3.timer的示例,请参阅Mike Bostocks Epicyclic Gearing示例.使用这个例子,我把类似于你问的东西放在一起:http://bl.ocks.org/4953593

示例的核心:

var w = 800,h = 800;
  var t0 = Date.Now();

  var planets = [
    { R: 300,r:  5,speed: 5,phi0: 90},{ R: 150,r: 10,speed: 2,phi0: 190}
  ];


  var svg = d3.select("#planetarium").insert("svg")
    .attr("width",w).attr("height",h);

  svg.append("circle").attr("r",20).attr("cx",w/2)
    .attr("cy",h/2).attr("class","sun")

  var container = svg.append("g")
    .attr("transform","translate(" + w/2 + "," + h/2 + ")")

  container.selectAll("g.planet").data(planets).enter().append("g")
    .attr("class","planet").each(function(d,i) {
      d3.select(this).append("circle").attr("class","orbit")
        .attr("r",d.R);
      d3.select(this).append("circle").attr("r",d.r).attr("cx",d.R)
        .attr("cy",0).attr("class","planet");
    });

  d3.timer(function() {
    var delta = (Date.Now() - t0);
    svg.selectAll(".planet").attr("transform",function(d) {
      return "rotate(" + d.phi0 + delta * d.speed/200 + ")";
    });
  });

javascript – 如何在d3.js中围绕中心旋转对象的更多相关文章

  1. ios – 如何让SpriteKit Playgrounds在Xcode 8 beta中运行?

    我希望能够在Playgrounds中轻松构建我的SpriteKit代码原型.这在Xcode7中工作正常在Xcode7中,我得到了一个很好的实时视图这在Swift3和Version8.0beta3中不起作用.我需要改变什么?解决方法XCPlayground模块已被PlaygroundSupport取代:

  2. Swift开发教程--如何自定义TabBarItem的图片显示

    在做项目的时候,如果使用系统的UITabBarController的时候,底部的tab自定义图片显示是蓝色和灰色的,这不是我们所想要的效果。如果想显示自定义的按下和弹起的图片效果,这个时候就需要对TabBarItem进行修改。以下就是具体的示例:varitemNameArray:[String]=["down_32","add_32","plane_32","circle_32"]varitemNameSelectArray:[String]=["down_click_32","add_click_32"

  3. swift 2.0 类中的计算属性 & 只读属性

    classCircle{varpoint:varradius:Float//计算属性varperimeter:Float{get{returnFloat}set{print}}//构造函数。init{self.point=pointself.radius=radius;}}varcircle=Circle//我们拿到内部的一个计算属性的值,并打印print//这里感觉是给这个计算属性赋值的感觉,但是其实,我们只是走了这个计算属性内部的一个setter方法,虽然走了这个方法,但是perimeter并不会自动

  4. 23、swift开发iOS——继承

    Swift继承继承我们可以理解为一个类获取了另外一个类的方法和属性。为了指明某个类的超类,将超类名写在子类名的后面,用冒号(:)分隔,语法格式如下classSomeClass:SomeSuperclass{//类的定义}实例以下实例中我们定义了超类StudDetails,然后使用子类Tom继承它:classStudDetails{varmark1:Int;varmark2:Int;init{mark1=stm1;mark2=stm2;}funcshow(){print}}classTom:StudDeta

  5. angular2 – 角度2.0绑定值到样式

    我试图绑定一个颜色属性从我的类来设置我的div的背景颜色。如果我将{{changeBackground()}}放在模板的某处,那么会返回正确的字符串。还可以想到它,我如何看到Circle类内的颜色属性的更改?将风格绑定到字符串不起作用。

  6. objective-c – CABasicAnimation – 设置起始行程位置

    我正在绘制一个基本圆圈的动画.这很好用,除了动画开始在3点位置绘制.有谁知道我怎么能在12点开始?

  7. javascript – 如何在d3.js中围绕中心旋转对象

    我在d3.js中有两个简单的物体,它们应围绕视口的中心盘旋(就像围绕太阳的行星一样).我是d3.js的新手,我知道我必须使用过渡但是因为行星必须一直循环而不仅仅是进入或退出我不知道在哪里以及如何设置过渡.这是我目前的代码:这里有一个jsfiddle玩.解决方法你需要:>将你的行星放在以g为中心的g组中>创建一个用于旋转组的d3.timer.有关使用d3.timer的示例,请参阅MikeBostoc

  8. javascript – d3.js:如何为图表上的散点图添加标签

    我正在尝试将标签添加到此图表上的散点图:http://bost.ocks.org/mike/d3/workshop/dot-chart.html我认为稍微修改这段代码会起作用,但它没有:解决方法迈克罗宾逊,你的榜样帮了忙.对于那些想知道的人,这就是我所做的:我删除了:并补充说:我将“text”标签添加到“g”标签上,而不是将“text”标签附加到“circle”标签上.

  9. jquery – 在span中设置文本

    我有这个跨度我需要将span的文本设置为

  10. javascript – 使用d3转换增加和减少圆的半径

    我试图通过增加和减少其半径来创建一个圆圈的脉冲效应.我希望圈子根据给定的数据集增长和收缩.我只能获得过渡功能,以增加或减少半径,但不能同时增加.d3会自动为数组中的每个值创建一个不同的圆.如何让它使一个圆的半径随着它遍历数组而增长和缩小?

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部