美文网首页收藏
[D3]时间映射

[D3]时间映射

作者: alue | 来源:发表于2022-04-02 22:10 被阅读0次

    例如想绘制下面的日期选择器,每一个小线段代表一个颜色,一个可以滑动的时间窗口用来标记当前的时间范围。


    滑动时间窗口

    如果不用借助D3,我们会面临一个问题,每个线段的长度都需要计算,每个月的天数都不同,所以对应的长度也不同,而且还需要做闰年判断。另外,还需要监听页面大小变动的事件。

    有了D3,这些就是几句话的事情

      d3.scaleTime().domain([
              new Date(year, 1, 1),
              new Date(year, 12, 31),
            ])
            .range([0,totalWidth])
    

    上面这句话就定义了一个时间上的线性映射,让1月1日映射为0,12月31日映射为总长度。

    后面就好办了,例如每个月的第一天的坐标就可以一行代码得到:

    d3.range(12).map((idx) => scale(new Date(year.value, idx, 1)))
    

    可以看出D3不仅仅是绘图库,它的好处在于,D3把绘图常见情景的数据处理都封装好了,的确是很方便。

    p.s.
    JS原生的 Date 好坑,new Date(2022,1,1) 居然对应的是2月1日,太反人类了!

    相关文章

      网友评论

        本文标题:[D3]时间映射

        本文链接:https://www.haomeiwen.com/subject/aodxsrtx.html