Icicle partition,这里的点击事件很厉害。


<!DOCTYPE html>
<html>
<head>
<title>Icicle</title>

<script type="text/javascript" src="../d3.min.js"></script>
<script type="text/javascript" src="Icicle.json"></script>
<style type="text/css">
rect {
stroke: #fff;
}

</style>
</head>
<body>
<script type="text/javascript">
//svg
var w=900,h=500;
var svg=d3.select(‘body‘)
.append(‘svg‘)
.attr({
‘width‘:w
,‘height‘:h
})
;
//scale
var x=d3.scale.linear()
.range([0,w])
;
var y=d3.scale.linear()
.range([0,h])
;

//color
var color=d3.scale.category20c();

//partition
var partition=d3.layout.partition()
.children(function(d){
return isNaN(d.value)?d3.entries(d.value):null;//d.value是object,isNaN 为 true;var entry = d3.entries({ foo: 42 }); returns [{key: "foo", value: 42}];
})
.value(function(d){
return d.value; //此d与之上的d不同,
})
;

//rect
var rect=svg.selectAll(‘rect‘);
var root=json;
rect=rect.data(partition(d3.entries(root)[0])) //d3.entries(root) return all entry;partition()转为分区函数。一定要赋值
.enter()
.append(‘rect‘)
.attr({
‘x‘:function(d){
return x(d.x);
}
,‘y‘:function(d){
return y(d.y);
}
,‘width‘:function(d){
return x(d.dx);
}
,‘height‘:function(d){
return y(d.dy);
}
,‘fill‘:function(d){
return color((d.children ? d : d.parent).key);
}
})
.on(‘click‘,clicked)
;

function clicked(d) {
x.domain([d.x, d.x + d.dx]);
y.domain([d.y, 1]).range([d.y ? 20 : 0, h]);

rect.transition()
.duration(750)
.attr("x", function(d) { return x(d.x); })
.attr("y", function(d) { return y(d.y); })
.attr("width", function(d) { return x(d.x + d.dx) - x(d.x); })
.attr("height", function(d) { return y(d.y + d.dy) - y(d.y); });
}
</script>
</body>
</html>

注:我用的是最简化的数据。

如果想加text,也很简单,只是在clicked中会重新定义y,所以在更新text时需要x(d.x+d.dx/2);(大概),刚开始定义时也可这样写,因为没有变scale,所以x(d.x)+x(d.dx)/2;也行。

Icicle partition,这里的点击事件很厉害。,布布扣,bubuko.com

时间: 2024-08-07 00:18:52

Icicle partition,这里的点击事件很厉害。的相关文章

popwindow,弹出框,popwindow点击事件冲突问题很好的解决

尽量自己百度,莫问同事切记切记----最近的感叹,可能太急于求成了,所以以后要有耐心坚决自己搜自己找!!!! 今天说的是比较简单的popwindow,弹出框,这个其实挺简单的主要是有个地方比较可能会出问题就是点击事件 private void initPopWindow(final TextView tview) { final String[] name = { "份", "斤", "个", "人", "桌&quo

很简单的点击事件

这里只写了几个点击事件,就单击,双击,两只手指同时放在屏幕上( 一般是放大缩小等事件,需要自行构建内容 ) var which; var isPress = 0; var main = document.getElementById('main'); //这边自己改自己的地址就行 main.ontouchstart = function (event) { event.preventDefault(); var e = window.event || event; if( isPress ==

Android中点击事件的来源

转载请注明出处: http://blog.csdn.net/a992036795/article/details/51690303 本文将分以下在步骤寻找android中事件的来源: 一.activity启动时 创建window以及windowManager的过程. 二.调用setContentView设置布局的过程 三.Activity在onResume之后创建ViewRootImp将window和DecorView关联的过程 四.创建InputChanel 发送给InputManagerSe

移动端点击事件全攻略,有你知道与不知道的各种坑

看标题的时候你可能会想,点击事件有什么好说的,还写一篇攻略?哈哈,如果你这么想,只能说明你too young to simple. 接触过移动端开发的同学可能都会面临点击事件的第一个问题:click事件的300ms延迟响应.不能立即响应给体验造成了很大的困扰,因此解决这个问题就成为了必然. 这个问题的解决方案就是: zepto.js的tap事件.tap事件可以理解为在移动端的click事件,而zepto.js因为几乎完全复制jQuery的api,因此常常被用在h5的开发上用来取代jquery.

android中多次点击事件的实现

1.在android系统中,设置里面->关于手机->安卓版本(即android version),三击后会出现android该个版本的版本号,以及一些动图,算是一个彩蛋吧! 2.导入setting源代码,ctrl+h搜索文件(关键字Android Version),搜索到了之后打开xml文件 3.是一个strings.xml文件,再次找到关键字firmware_version,再搜索.找到src下的源代码文件 4.又找到一个关键字KEY_FIRMWARE_VERSION,翻一翻找到关于多次点击

.Net程序员快速学习安卓开发-布局和点击事件的写法

关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 本系列课程 致力于老手程序员可以快速入门学习安卓开发.系统全面的从一个.Net程序员的角度一步步学习总结安卓开发. 上篇课程:全栈工程师必备:安卓移动端手机开发,第六课 主要内容: 布局 点击事件 布局 说到安卓前台页面的开发,就不得不说安卓的布局.也就是具体那个控件应该摆放的位置. 1.1相对布局 我们新建一个layout布局文件时,默认就是相对布局.相对布局是相对于非相对布局来说的.顾名思义,相对布

注意:MainActivity的oncreate方法里不要再inflate布局了(MainActivity里的点击事件无响应)

activity_main已经通过setContentView(R.layout.activity_main);设置给MainActivity, 不要再inflate出新布局,然后findviewbyid,然后得出控件,再对控件进行其他设置,包括设置点击事件等等. 错误做法: 1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setC

【lushengduan】03、点击事件的四种实现方式

好吧,首先我们来解释一下什么“点击事件”,所谓“点击事件”就是当我们点击(注意是单击)手机屏幕时,系统做出相应的响应:举个例子哈,你去朋友家里,要告诉你的朋友你到了,你是不是要敲一敲门,然后你朋友听到了就来给你开门了,这个就和我们点击屏幕上的Button很类似,点击的操作相当于敲门,至于“朋友听到”和“开门”这两个行为动作,就是我们今天要探讨的内容了. 手机没有耳朵,不可能“听到”我们点击了屏幕,因此,需要给Button绑定一个监听器,每当Button被点击了,就去执行某些特定的操作,常用的点击

Android 防止多次点击事件

恐怕大家都会遇到这样的问题,一个点击事件多次触发,导致,同样的内容提交了多次,或者说弹出多个页面... 下面是简单的方案,大家可以试一试 原理很简单,当我们第一次点击的时候,把按钮变成不可点击状态. 然后设置 5s 的定时器来恢复点击事件. public static void disabledView(final View v) { v.setClickable(false); // 延迟5秒,恢复点击事件 new Handler().postDelayed(new Runnable() {