D3js-三种图表tooltip提示框总结介绍

参考资料:

1. 交互图表之提示条

2. 交互式之提示框

效果图:

源码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>d3-提示框tooltip</title>

	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  <script type="text/javascript" src="js/d3/d3.js"></script>
  <script type="text/javascript" src="js/d3/d3.min.js"></script>

  <!--position:absolute;设置绝对路径很重要,要是没有设置的话,
  	   提示框的div就无法根据鼠标移到的位置而在不同位置显示(没有设置只会在图片的下方显示) -->
  <style type="text/css">
  		.tooltip{
  			font-family:simsun;
  			font-size:16px;
  			width:120;
  			height:auto;
  			position:absolute;
  			text-align:center;
  			border-style:solid;
  			border-width:1px;
  			background-color:white;
  			border-radius:5px;
  		}

  </style>

  </head>

  <body>
    <script type="text/javascript">
    	var width = 600;
    	var height = 600;

    	//设置 饼图的内半径 和外半径(如果 内半径不为0的话,显示的是圆环图)
    	var outerRadius = width/3;
    	var innerRadius = 0;

    	var dataset =[["小米",200],["华为",400],["联想",300],["魅族",100],["WP",230]];
    	//新建一个svg图片
    	var svg = d3.select("body").append("svg")
					.attr("width",width)
					.attr("height",height);
		//转换数据
    	var pie = d3.layout.pie()
    						.value(function(d){
    						 return d[1];
    						 });
    	var piedata =pie(dataset);

    	//创建弧生成器
    	var arc = d3.svg.arc()
    					.outerRadius(outerRadius)
    					.innerRadius(innerRadius);

    	//颜色(20种颜色可自动选择)
    	var color = d3.scale.category20();

    	//添加对应数目的弧
    	var arcs=svg.selectAll("g")
    			.data(piedata)
    			.enter()
    			.append("g")
    			//圆心坐标
    			.attr("transform","translate("+outerRadius+","+outerRadius+")");

    	//通过路径绘制弧
    	arcs.append("path")
    		.attr("fill",function(d,i) //设置弧填充的颜色
    		{
    			return color(i);
    		})
    		.attr("d",function(d) //按数据生成对应的弧
    		{
    			return arc(d);
    		}
    		);

    	//绘制弧内的文字
    	arcs.append("text")
    		//位置
    		.attr("transform",function(d,i)
    		{
    			//centroid(d)是取弧的重心
    			var x = arc.centroid(d)[0]*1.5;
    			var y = arc.centroid(d)[1]*1.5;

    			//返回文字显示的坐标
    			return "translate("+x+","+y+")";
    		})
    		.attr("text-anchor","middle")
    		.style("font-size",16)
    		.text(function(d,i)
    		{
    			//求所占百分比
    			var percent =Number(d.value)/d3.sum(dataset,function(d){return d[1];})*100;

    			//toFixed(num) 四舍五入为规定小数的位数,num为小数位数
    			return percent.toFixed(1)+"%";

    		});

    	//---------------------------------1.d3中的title标签提示框
    		arcs.append("title")
    		.text(function(d)
    		{
    			return d.data[0]+"销售量是"+d.data[1]+"百万台";
    		});

    	//------------------------------------2.div提示框,通过设置透明度(opacity属性)实现 显示和隐藏
    		//添加提示框的div
    		var tooltip = d3.select("body").append("div")
    					.attr("class","tooltip") //用于css设置类样式
    					.attr("opacity",0.0);

    		//响应事件
    			//-鼠标移入事件
    	arcs.on("mouseover",function(d)
    		{
    			//设置tooltip文字
    			tooltip.html(d.data[0]+"销售额为"+"<br/>"+d.data[1]+"百万台")
    			//设置tooltip的位置(left,top 相对于页面的距离)
    					.style("left",(d3.event.pageX)+"px")
    					.style("top",(d3.event.pageY+20)+"px")
    					.style("opacity",1.0);
    		})
    		//--鼠标移出事件
    		.on("mouseout",function(d)
    		{
    			tooltip.style("opacity",0.0);
    		}); 

    		//-----------------------------------3.svg中的text标签提示框

    	 	arcs.on("mouseover",function(d)
    		{

    			//var x = parseFloat(d3.select(this).attr("x")); 这个我的无法获得他们的值
    			//var y =parseFloat(d3.select(this).attr("y")+20);

    			var x =d3.event.pageX;
    			var y =d3.event.pageY+30;
				//添加标签
    			svg.append("text")
    				.attr("id","tooltip")
    				.attr("x",x)
    				.attr("y",y)
    				.attr("text-anchor","middle")
					.attr("font-family","sans-setif")
					.attr("font-size","11px")
					.attr("font-weight","bold")
					.attr("fill","black")
					//文本内容
    				.text("销售量为"+d.value); 							

    		})
    		//鼠标移出时通过ID移除标签
    	 	.on("mouseout",function(d)
    		{
    			d3.select("#tooltip").remove();
    		});  

    </script>

  </body>
</html>

以上就是三种图表交互的方法。

时间: 2024-10-25 19:34:46

D3js-三种图表tooltip提示框总结介绍的相关文章

纯CSS实现tooltip提示框,CSS箭头及形状之续篇--给整个tooltip提示框加个边框

在前面一篇中我们介绍了纯CSS实现tooltip提示框,通俗的讲也就是CSS箭头及形状 不过注意一点是,他始终是一个元素,只是通过CSS实现的,今天我们要说的是给这个“tooltip提示框”整体加一个边框,下面是是一篇完成的截图(不了解的可以看看:纯CSS实现tooltip提示框,CSS箭头及形状): 首先像:after一样我们介绍另外一个CSS中“ :before ”选择器 定义和用法:(参考w3school:before选择器) :before 选择器在被选元素的内容前面插入内容,使用 co

原生js实现tooltip提示框的效果

在js的世界里面,每一个小的特效都那么微不足道,却又那么的令人向往与好奇.前端工程师的任务特别高大上,因为他们的一个小小的设计就会激发别人的求知欲.比如说我,只是随机一瞟,便看到了这个tooltip的特效,就有一种想要征服它的愿望. 比如这个tooltip的效果展示: 这个便是tooltip提示框的效果. 在Hbulider上的代码展示: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8

第一百九十六节,jQuery EasyUI,Tooltip(提示框)组件

jQuery EasyUI,Tooltip(提示框)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Tooltip(提示框)组件的使用方法,,这个组件不依赖于其 他组件. 一.加载方式 //class 加载方式 <a href="http://www.ycku.com" title="这是一个提示信息!" class="easyui-tooltip">Hover Me <

MFC中添加ToolTip提示框

PART 1 MFC 对话框中的 Buttton添加提示 例如我们想在一个对话框中的一个button控件添加tooltip,实现的方法如下: 1. 在该对话框的类中添加一个CToolTipCtrl类型成员,并在适当的地方将其初始化如下: m_ToolTipCtrl.Create(this); m_ToolTipCtrl.AddTool(GetDlgItem(IDC_BUTTON1), _T("This is ToolTip")); m_ToolTipCtrl.SetMaxTipWidt

CSS3实现Tooltip提示框飞入飞出动画

我们见过很多利用背景图片制作的Tooltip提示框,但是缺点是扩展比较麻烦,要经常改动图片.还有就是利用多层CSS的叠加实现,但是效果比较生硬,外观不怎么好看.今天我来分享一下利用CSS3快速实现既美观又实用的Tooltip提示框,提示框伴有飞入飞出的动画效果.先来看看效果图. 看上去还简单吧,其实实现的思路的确很简单. 具体效果我们可以在这里查看在线演示. 接下来我们来简单分析一下这个Tooltip实现的CSS3代码. 首先是HTML代码,主要是构造了3个小图标菜单以及对应的Tooltip提示

tooltip提示框组件

Tooltip 提示框组件 可独立于其他组件通过$.fn.tooltip.defaults重写默认的defaults.当用户移动鼠标指针在某个元素上时,出现提示信息窗口来显示额外信息.提示内容可以包含任何来自页面的或者通过ajax生成的html元素. 1.创建提示框 从标记创建提示框(tooltip),添加'easyui-tooltip' class到元素,不需要任何的javascript代码 <a href="#" title="This is the tooltip

纯CSS实现tooltip提示框,CSS箭头及形状

原文:纯CSS实现tooltip提示框,CSS箭头及形状 本片介绍仅用CSS做出tooltip那样的提示框及箭头等形状! 首先介绍一下CSS:after选择器 定义和用法:(参考w3school:after选择器) :after选择器在被选元素的内容后面插入内容,使用content属性来指定要插入的内容 例: p:after { content:"台词:-"; background-color:yellow; color:red; font-weight:bold; } 具体大家可以参

使用css实现全兼容tooltip提示框

在上一篇文章中,使用css实现了一个全兼容的三角形图标,这个三角型图标可以使用于多种场景,比如下拉图标.多级菜单等,这篇文章我们使用这个图标通过纯css来实现一个我们常见的tooltip提示框. 最终效果图: 基本原理 先设定一个背景色的普通div盒子,然后使用上篇post得到的三角型图标,把div盒子设置为相对定位模式,三角型图标设置为绝对定位,位置相对于div盒子,调整到合适的位置.这样就得到一个基本的tooltip,但是没有边框看起来总是不舒服,我们可以给div盒子设置一个边框,这没什么难

echarts中tooltip提示框位置控制

option = { title: { text: '折线图堆叠' }, tooltip: { trigger: 'axis', position: function(point, params, dom, rect, size){ //其中point为当前鼠标的位置,size中有两个属性:viewSize和contentSize,分别为外层div和tooltip提示框的大小 var x = point[0];// var y = point[1]; var viewWidth = size.v