d3 mouseover Tips

news/2024/5/11 18:51:13/文章来源:https://blog.csdn.net/weixin_30765577/article/details/102287671

本篇简单介绍d3 mouseover添加tips的实现

绘制曲线

  • 以前几篇的d3曲线为例

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title></head><body><div id="test-svg"></div></body><script src="https://d3js.org/d3.v5.js"></script><script>window.onload = function() {// 数据var data = [{date: new Date(2019, 3, 24),value: 23.24}, {date: new Date(2019, 3, 25),value: 72.15}, {date: new Date(2019, 3, 26),value: 38.84}, {date: new Date(2019, 3, 27),value: 58.62}, {date: new Date(2019, 3, 30),value: 10.80}, {date: new Date(2019, 4, 1),value: 85.47}];var width = 800,height = 400,padding = {top: 40,right: 40,bottom: 40,left: 40};var colors = d3.schemeSet2;var svg = d3.select("#test-svg").append('svg').attr('width', width + 'px').attr('height', height + 'px');// x轴:时间轴var xScale = d3.scaleTime().domain(d3.extent(data, function(d) {return d.date;})).range([padding.left, width - padding.right]);var xAxis = d3.axisBottom().scale(xScale).tickSize(10);var bisect = d3.bisector(function(d) {return d.date;}).left;svg.append('g').call(xAxis).attr("transform", "translate(0," + (height - padding.bottom) + ")").selectAll("text").attr("font-size", "10px").attr("dx", "50px");var ymax = d3.max(data, function(d) {return d.value;});// y轴var yScale = d3.scaleLinear().domain([0, ymax]).range([height - padding.bottom, padding.top]);var yAxis = d3.axisLeft().scale(yScale).ticks(10);svg.append('g').call(yAxis).attr("transform", "translate(" + padding.left + ",0)");var curveLine = d3.line().x(function(d) {return xScale(d.date);}).y(function(d) {return yScale(d.value);}).curve(d3.curveCatmullRom.alpha(0.5));svg.append("path").datum(data).attr("fill", "none").attr("stroke", "steelblue").attr("stroke-width", 1.5).attr("stroke-linejoin", "round").attr("stroke-linecap", "round").attr("d", curveLine);}</script></html>

1487780-20190817105555029-1668514834.png

添加坐标点标识


svg.append("g").selectAll('circle').data(data).join("circle").attr("r", 5).attr("fill", "white").attr("stroke", "steelblue").attr("stroke-width", 1.5).attr("transform", function(item) {return "translate(" + xScale(item.date) + "," + yScale(item.value) + ")";})

1487780-20190817105742202-1865613939.png

添加tips

  • 添加tips,一个圆点及数据文本

var tips = svg.append("g").attr("class", "tips").style("display", "none");tips.append("circle").attr("r", 3);tips.append("text").attr("x", 8).attr("dy", ".35em");

添加事件

  • 添加一个和svg同等大小的透明rect面板用来触发事件

  • 获取坐标


// d3.mouse(this)[0] 获取当前鼠标位置的x坐标
// xScale.invert() 转为曲线上的x坐标
xScale.invert(d3.mouse(this)[0])// d3.bisector() 获取当前曲线上x坐标对应数据中的点序号
var bisect = d3.bisector(function(d) {return d.date;}).left;bisect(data, xdata, 1, data.length - 1);

svg.append("rect").attr("class", "overPlane").attr("width", width).attr("height", height).attr("opacity", 0).on("mouseover", function() {tips.style("display", null);}).on("mouseout", function() {tips.style("display", "none");}).on("mousemove", function() {var xdata = xScale.invert(d3.mouse(this)[0]);var yIndex = bisect(data, xdata, 1, data.length - 1);var d0 = data[yIndex - 1],d1 = data[yIndex],d = xdata - d0.date > d1.date - xdata ? d1 : d0;tips.attr("transform", "translate(" + xScale(d.date) + "," + yScale(d.value) + ")");tips.select("text").text(d.value);});

1487780-20190817145636902-1418829358.gif

线性的数值展示


.on("mousemove", function() {var mouse = d3.mouse(this);var begin = 0,end = line[0].getTotalLength(),target = null;// 已知当前鼠标x轴坐标,求出对应的path上的坐标点while(true) {target = Math.floor((begin + end) / 2);// getPointAtLength 返回给定路径上给定长度的点坐标 pos = line[0].getPointAtLength(target);if((target === end || target === begin) && pos.x !== mouse[0]) {break;}// 当返回的路径的x坐标和鼠标对应的x坐标重合 break;if(pos.x > mouse[0]) end = target;else if(pos.x < mouse[0]) begin = target;else break;}tips.select("text").text(yScale.invert(pos.y).toFixed(2));tips.attr("transform", "translate(" + mouse[0] + "," + pos.y + ")");});

1487780-20190817155444632-454775036.gif

转载于:https://www.cnblogs.com/chenjy1225/p/11368632.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_820091.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习分类,可用网站

学习分类&#xff1a;可用网站&#xff1a;1>enet网络学院转载于:https://blog.51cto.com/18039121638/1285511

JQuery 的跨域方法 可跨任意网站

链接&#xff1a;http://www.cnblogs.com/taven/archive/2010/05/20/1739731.html 因发现有不少博友发园内短信问及JS的跨域问题&#xff0c;我想很多程序员的脑海里面还认为JS是不能跨域的&#xff0c;其实这是一个错误的观点&#xff1b;有很多人在网上找其解决方法&#xff…

网站用户单点登录系统简介-跨域通行证

1 背景 在网站建设的过程中&#xff0c;多个应用系统一般是在不同的时期开发完成的。各应用系统由于功能侧重、设计方法和开发技术有所不同&#xff0c;也就形成了各自独立的用户库和用户认证体系。随着网站的发展&#xff0c;会出现这样的用户群体&#xff1a;以其中的一个用户…

提高网站访问速度的方法汇总

以下方法都有在公司实际项目中应用&#xff0c;的确能够提升客户端体验和访问速度。 1、建议客户端使用Chrome或高版本IE浏览器&#xff1b; 2、能够实现静态化的页面尽量在服务器端保存静态页面&#xff0c;访问动态页面肯定会比静态页面慢。 3、减少HTTP请求 1&#xff09;合…

Joomla 一个实例建站过程

之前就想过写一个用 joomla的virtuemart组件制作外贸b2c零售网店的教程给大家分享&#xff0c;刚好最近要重新部署和策划公司的外贸b2c业务&#xff0c;趁着这个热乎劲&#xff0c;赶紧 把教程赶出来&#xff0c;不趁热打铁&#xff0c;很多事情是做不成的&#xff0c;大家都忙…

Microsoft Azure WebSite创建网站

Microsoft Azure WebSite是Microsoft Azure中PaaS平台既服务到一个重要组件&#xff0c;WebSite具有以下特点&#xff0c;方便我们WEB部署和上线发布l 入门简单&#xff0c;开始简单&#xff0c;可以按照你的想法扩展&#xff0c;无任何的困难。l 编码容易&#xff0c;可以使用…

禁止视频网站使用Flash P2P上传

众所周知中国的网络国情&#xff0c;还有一大部分人活在电信/网通这两个老流氓的adsl线路上。目前中国电信4m的ADSL基本在400k/s的下载速度和50k/s的上传速度&#xff08;这里我就不说bps了&#xff0c;就说大家能看到的下载速度&#xff09;&#xff0c;又由于ADSL的不对称速度…

查询类网站或成站长淘宝客新金矿

流量是玩转互联网的基础&#xff0c;传说的中的大牛一般都是倒腾流量的高手。在大牛眼中抓取流量是一门艺术&#xff0c;背后玩的是五花八门的思路。这篇文章斗胆跟大家分享一个好玩的思路。文章将以剥洋葱的方式展开&#xff0c;希望剥完这颗洋葱会让你有相见恨晚之感。在切入…

linux重装系统到sdb盘,linux怎样重装系统_网站服务器运转保护,linux,重装,系统

Linux体系原有分区/data 有数据&#xff0c;在不格式化/data分区的情况下重装体系需预备一台有/data 分区的虚拟机然后加载ISO 入手下手重装并保存/data分区直接加载到分区界面根据一入手下手得知/data分区是2048MB 所以直接挑选保存此分区免费在线进修视频教程引荐&#xff1a…

一天完成把PC网站改为自适应!原来这么简单!

http://www.webkaka.com/blog/archives/how-to-modify-a-web-page-to-be-responsive.html 一天完成把PC网站改为自适应&#xff01;原来这么简单&#xff01; 作者:Kaka 时间:2015-8-27 11:26:9 浏览:5279 评论:8 网站自适应&#xff0c;很多人都认为是很高级需要很多…

职业相关网站记录

为了便于查阅资料、拓展思路&#xff0c;特记录下与职业相关的网站&#xff0c;持续更新敢问路在何方&#xff1f;7成在努力&#xff0c;3成在觉悟&#xff01; 软件开发 .NET&#xff1a;博客园 http://www.cnblogs.com/ Java: ITEYE http://www.iteye.com/ 综合&#xff1a;C…

seoer在创业团队6个月的故事

今天天气不错&#xff0c;久违的阳光。自一个月前和朋友去踩单车环绕大夫山之后&#xff0c;就一直是雨天&#xff0c;阴天&#xff0c;广州这边春天本来就够潮湿的&#xff0c;春季没有在这边呆过的童鞋绝对无法想象&#xff0c;墙壁上流水&#xff0c;地上返潮是什么概念。今…

非常不错的app和网站

置顶&#xff1a; word、pdf之间相互转换的网站&#xff1a; https://www.addpdf.cn 很棒啊 1. Global Potplayer 这个软件简直了&#xff0c;播放各种视频&#xff0c; 无论是本地的&#xff0c;还是在线的&#xff0c;都非常的清晰还可以调节速度等&#xff0c;值得拥有。 效…

多年前写的一个ASP.NET网站管理系统,到现在有些公司在用

多年前写的一个ASP.NET网站管理系统&#xff0c;到现在有些公司在用 今早上接到一个电话&#xff0c;自已多年前写的一个ASP.NET网站管理系统&#xff0c;一个公司在用&#xff0c;出了点问题&#xff0c; 第一点是惊奇&#xff0c;5&#xff0c;6年前的东东&#xff0c;手机号…

前端开发必备优质网站

一、 平台名称&#xff1a;HTML5 Tricks 推荐指数&#xff1a;⭐⭐⭐⭐⭐ 推荐理由&#xff1a; 该站点发布了优秀的html5动态效果&#xff0c;相当经典&#xff0c;应有尽有&#xff0c;而且&#xff0c;特效超级绚丽&#xff0c;背后的知识点相当庞大&#xff0c;值得好好…

网站使用https协议的数据安全防护之谈

说起https协议&#xff0c;大家都不会太陌生&#xff0c;简单来讲就是SSL证书&#xff0c;当访问我们网站的时候会直接显示绿色的标识&#xff0c;对于用户的访问&#xff0c;以及数据传输都会进行高强度的安全加密&#xff0c;防止用户的数据泄露&#xff0c;数据安全防护也是…

40个学术网站

40个学术网站&#xff0c;满足你的科研需求&#xff01; 2018-03-06 美国留学那点事文&#xff0f;中外学术情报 微信号&#xff1a;Academic_Information 科研工作者每天日常莫过于看文献、做实验、写论文。人生最郁闷的事情不过于是导师说&#xff0c;那个XX&#xff0c;帮我…

网站分析实战--如何以数据驱动决策,提升网站价值(大数据时代的分析利器)...

《网站分析实战--如何以数据驱动决策&#xff0c;提升网站价值》&#xff08;大数据时代的分析利器&#xff09;基本信息作者&#xff1a; 王彦平 吴盛峰 出版社&#xff1a;电子工业出版社ISBN&#xff1a;9787121193125上架时间&#xff1a;2013-1-10出版日期&#xff1a;201…

vue 网站图标favcion.ico图标的处理

1.把.ico图标和index文件放在同级 2.在webpack.dev.conf.js和webpack.prod.conf.js这两个文件中进行如下修改&#xff1a; favicon: resolve(favicon.ico), function resolve(dir) {return path.join(__dirname, .., dir) } plugins: [new webpack.DefinePlugin({process.env:…

一文读懂SSL证书以及https对于网站安全的重要性

什么是https和SSL证书&#xff1f; SSL证书是数字证书的一种&#xff0c;类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上&#xff0c;也称为SSL服务器证书。 SSL 证书就是遵守 SSL协议&#xff0c;由受信任的数字证书颁发机构CA&#xff0c;在验证服务器身份后颁…