d3.js——选择集与数据绑定模板应用

var dataset = [30,43,120,87,99,167,142]
var width = 500,
    height = 500;
var rectWidth = 30,
    rectStep= 35;
var svg = d3.select("body").append("svg")
.attr("width",width)
.attr("height",height)


一、分别获取rect的update、enter、exit部分:

 //获取矩形的update部分
    var rectUpdate = svg.selectAll("rect")
        .data(dataset)
    //获取矩形的enter部分
    var rectEnter = rectUpdate.enter()
    //获取矩形的exit部分
    var rectExit = rectUpdate.exit()
二、分别对rect的update、enter、exit进行操作

 //rectUpdate处理
    rectUpdate.attr("fill","steelblue")
        .attr("x", function (d,i) {
            return i*rectStep
        })
        .attr("y",function(d){return height-d})
        .attr("width",rectWidth)
        .attr("height",function(d){return d})
    //rectEnter处理
    rectEnter.append("rect")
        .attr("fill","steelblue")
        .attr("x", function (d,i) {
            return i*rectStep;
        })
        .attr("y", function (d) {
            return height-d;
        })
        .attr("width",rectWidth)
        .attr("height",function(d){return d})
    //rectExit处理
rectExit.remove()


从上述的代码可以就很清楚地明白如何将其模板应用起来了。完整代码如下:

/**
 * Created by Silence_C on 2016/5/11.
 */
var dataset = [30,43,120,87,99,167,142]
var width = 500,
    height = 500;
var rectWidth = 30,
    rectStep= 35;
var svg = d3.select("body").append("svg")
.attr("width",width)
.attr("height",height)

function draw(){
    //获取矩形的update部分
    var rectUpdate = svg.selectAll("rect")
        .data(dataset)
    //获取矩形的enter部分
    var rectEnter = rectUpdate.enter()
    //获取矩形的exit部分
    var rectExit = rectUpdate.exit()
    //rectUpdate处理
    rectUpdate.attr("fill","steelblue")
        .attr("x", function (d,i) {
            return i*rectStep
        })
        .attr("y",function(d){return height-d})
        .attr("width",rectWidth)
        .attr("height",function(d){return d})
    //rectEnter处理
    rectEnter.append("rect")
        .attr("fill","steelblue")
        .attr("x", function (d,i) {
            return i*rectStep;
        })
        .attr("y", function (d) {
            return height-d;
        })
        .attr("width",rectWidth)
        .attr("height",function(d){return d})
    //rectExit处理
rectExit.remove()
    //获取文字的update
    var textUpdate = svg.selectAll("text")
        .data(dataset)
    //获取文字enter部分
    var textEnter = textUpdate.enter()
    //获取文字的exit部分
    var textExit = textUpdate.exit()
    //textUpdate处理
    textUpdate.attr("fill","white")
        .attr("font-size","16px")
        .attr("text-anchor","middle")
        .attr("x",function(d,i){return i*rectStep})
        .attr("y",function(d){return height-d})
        .attr("dx",rectWidth/2)
        .attr("dy","1em")
        .text(function(d){
            return d
        })
    //textEnter处理
    textEnter.append("text")
        .attr("fill","white")
        .attr("font-size","14px")
        .attr("text-anchor","middle")
        .attr("x",function(d,i){return i*rectStep})
        .attr("y",function(d){return height-d})
        .attr("dx",rectWidth/2)
        .attr("dy","1em")
        .text(function(d){
            return d
        })
    //textExit处理
    textExit.remove();
}
draw()
function myadd(){
    dataset.push(Math.floor(Math.random()*100));
    draw()
}
function  mysort(){
    dataset.sort(d3.ascending)
    draw()
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>update\enter\exit的应用</title>
</head>
<body>
<script src="d3.js"></script>
<script src="js/datatrect.js"></script>
<br/>
       
<button type="button" οnclick="mysort()">   排序  </button>
<button type="button" οnclick="myadd()">   增加数据  </button>

</body>
</html>

运行结果如下:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
d3.js和three.js是两个非常流行的JavaScript库,用于数据可视化和3D图形渲染。它们各自有一些优劣势,我来为你介绍一下: d3.js的优势: 1. 数据驱动:d3.js是一个强大的数据可视化库,它提供了丰富的API和功能,可以将数据与图形进行绑定,实现动态的数据可视化效果。 2. 灵活性:d3.js提供了很多底层的绘图功能,可以通过编写自定义代码来实现各种复杂的可视化效果。它不仅可以创建常见的图表,还可以创建独特的、定制化的可视化图形。 3. 社区支持:d3.js拥有庞大的社区,有很多开发者分享了自己的经验和代码示例,可以帮助你解决问题和学习新的技术。 d3.js的劣势: 1. 学习曲线陡峭:由于d3.js提供了很多底层的API和功能,学习起来可能需要一些时间和精力。对于初学者来说,上手可能会有一定的难度。 2. 复杂性:由于d3.js的灵活性,编写复杂的可视化代码可能会变得复杂和冗长。需要一定的编程经验和技巧来处理复杂的数据可视化需求。 three.js的优势: 1. 3D图形渲染:three.js是一个强大的3D图形库,可以在网页中创建各种精美的3D场景和动画效果。它提供了丰富的3D渲染功能,可以轻松创建逼真的3D图形。 2. 简单易用:相对于d3.js来说,three.js的学习曲线相对较平缓。它提供了简单易用的API和示例代码,使得开发者可以快速上手并创建出令人惊叹的3D效果。 3. 跨平台支持:three.js可以在多个平台上运行,包括Web、移动设备和桌面应用程序。这使得它成为开发跨平台3D应用程序的理想选择。 three.js的劣势: 1. 2D图形限制:相对于d3.js来说,three.js在2D图形方面的功能相对较弱。如果你主要需要创建2D图表和可视化效果,可能会觉得使用three.js有些过于复杂。 2. 缺乏数据驱动:与d3.js不同,three.js并没有专门为数据可视化设计的功能。如果你需要将数据与图形进行绑定并实现动态效果,可能需要自己编写一些额外的代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值