Echarts 散点图的 tooltip设置跟随鼠标移动,并将显示位置固定在指定大小区域

2023-11-08

问题:

在散点图中设置了tooltip后,不设置position,使用默认的配置,toolt的显示位置是跟随鼠标移动的,但是会出现显示不全的情况,如下图。

 

 这产品肯定不能忍啦,必须改!!!于是我去看了echarts的文档,看到tooltip的position属性,可以把位置设置大概分成两部分,一部分是固定位置,一部分是跟随鼠标移动。

1.固定位置

(1)使用px设置绝对位置

  // 绝对位置,相对于容器左侧 10px, 上侧 10 px
  position: [10, 10]

(2)使用百分比设置相对位置

  // 相对位置,放置在容器正中间
  position: ['50%', '50%']

2.跟随鼠标移动

使用function回调函数的方法,带5个参数,分别是:

  • point: 鼠标位置,如 [20, 40]。
  • params: 同 formatter 的参数相同。
  • dom: tooltip 的 dom 对象。
  • rect: 只有鼠标在图形上时有效,是一个用xywidthheight四个属性表达的图形包围盒。
  • size: 包括 dom 的尺寸和 echarts 容器的当前尺寸,例如:{contentSize: [width, height], viewSize: [width, height]}。 

返回值可以是一个表示 tooltip 位置的数组,数组值可以是绝对的像素值,也可以是相 百分比。
也可以是一个对象,如:{left: 10, top: 30},或者 {right: '20%', bottom: 40}。 

以上部分来自Echarts配置文档,详见Ecahrts

以下代码改编自sleepwalker_1992的一篇文章,针对这些代码进行简单的修改,防止数据点被tooltip覆盖。主要思路是:把显示不下分成两种情况,上边放不下,和左边放不下,在分别针对这两种情况,自己设定一个x或y坐标值,防止出屏问题。代码如下:

position: function (point, params, dom, rect, size) {
    // 鼠标坐标和提示框位置的参考坐标系是:以外层div的左上角那一点为原点,x轴向右,y轴向下
    // 提示框位置
    var x = 0; // x坐标位置
    var y = 0; // y坐标位置
    
    // 当前鼠标位置
    var pointX = point[0];
    var pointY = point[1];
    
    // 外层div大小
    // var viewWidth = size.viewSize[0];
    // var viewHeight = size.viewSize[1];
    
    // 提示框大小
    var boxWidth = size.contentSize[0];
    var boxHeight = size.contentSize[1];
    
    // boxWidth > pointX 说明鼠标左边放不下提示框
    if (boxWidth > pointX) {
        x = 5;  // 自己定个x坐标值,以防出屏
        y -= 15; // 防止点被覆盖住,可根据情况自行调节 
    } else { // 左边放的下
        x = pointX - boxWidth - 15;
    }
    
    // boxHeight > pointY 说明鼠标上边放不下提示框
    if (boxHeight + 20 > pointY) {
        y = pointY + 15;
    } else if (boxHeight > pointY) {
        y = 5;
    } else { // 上边放得下
        y += pointY - boxHeight;
    }
    return [x, y];
}

 效果图如下:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Echarts 散点图的 tooltip设置跟随鼠标移动,并将显示位置固定在指定大小区域 的相关文章

  • 责任链模式在项目中的引入使用

    责任链模式是一种设计模式 在责任链模式里 很多对象由每一个对象对其下家的引用而连接起来形成一条链 请求在这个链上传递 直到链上的某一个对象决定处理此请求 发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求 这使得系统可以在不影响客

随机推荐

  • mybatisPlus 枚举类注解 @EnumValue @JsonValue

    1 概要说明 创建枚举类 在需要存储数据库的属性上添加 EnumValue注解 在需要前端展示的属性上添加 JsonValue注解 2 示例实践 public enum SexEnum MAN 1 男 WOMAN 2 女 EnumValue
  • 使用FormData对象

    使用FormData对象 TABLE OF CONTENTS 创建一个FormData对象 使用HTML表单来初始化一个FormData对象 使用FormData对象发送文件 TAGS 文件 利用FormData对象 你可以使用一系列的键值
  • swagger介绍及使用

    文章目录 Swagger 概述 1 maven导入Swagger包 2 配置开启swagger2 3 测试swagger 4 配置swagger信息 5 配置swagger扫描接口 6 swagger分组与接口注释 Swagger 概述 S
  • rockemq创建topic

    sh mqadmin updateTopic n sms pro 007 9876 sms pro 008 9876 c DefaultCluster t smsFrontSmsMq 10 w 4 r 4
  • Java 每日面试题6( BufferReader, 对象序列化)

    BufferReader属于哪种流 主要是用来做什么 里面有哪些方法 BufferReader属于处理流中的缓冲流 可以将读取的内容存在内存里面 比Reader类多了一个readLine 方法 这篇博文提供了BufferReader类的详细
  • 传输层 —— TCP协议

    一 TCP 二 TCP报文段首部格式 1 序号 在一个TCP连接中传送的字节流中的每一个字节都按顺序编号 本字段表示本报文段所发送数据的第一个字节的序号 2 确认号 期望收到对方下一个报文段的第一
  • 【HTML】HTML5给网页音频带来的变化

    HTML HTML5给网页音频带来的变化 引言 内容速递 看了本文您能了解到的知识 音乐播放 相信大家都很熟悉 但是早在之前的音乐播放之前 你的浏览器会问你 是否下载flash插件 然而现在 估计一些年轻的开发者都不用了解flash是啥了
  • Jmeter压测接口全流程详解

    Jmeter压测接口全流程详解 描述 内容包含Jmeter压测软件的安装 环境变量配置 具体实例参数的配置 动态参数构建 元件引入 函数引入 监控插件引入 在京东云上的引用等 第一部分 Jmeter应用下载 一 Jmeter下载 进入官网
  • 一起学nRF51xx 8 -  Time

    前言 Nrf518xx的TIMER有以下几部分组成 nrf51822有三个定时器 time0 1 2 1 计数时钟源 有1M 16M 2种时钟源 2 时钟源分频器 用来设置分频 范围是2的0 9次方 3 定时 计数模式选择 用来配置TIME
  • 百度翻译爬虫-使用execjs库逆向解析百度翻译

    本文目标破解百度翻译接口 抓取翻译结果数据 python3安装execjs方法 pip install pyexecjs 检查页面 使用Chrome浏览器打开百度翻译 观察界面 右键查看源代码 发现密密麻麻全是看不懂JS代码 初步判定为是异
  • CVE-2017-11882漏洞复现

    本文记录一下针对CVE 2017 11882的漏洞复现 0x00 前言 参考backlion师傅的PDF 记录一下这个过程 2017年11月14日 微软发布了11月份的安全补丁更新 其中比较引人关注的莫过于悄然修复了潜伏17年之久的Offi
  • 详解c++---优先级队列和仿函数

    目录标题 什么是仿函数 如何定义一个仿函数 什么是优先级队列 优先级队列的使用 模拟实现priority queue 准备工作 top函数的实现 size函数的实现 empty函数的实现 adjustup函数的实现 push函数的实现 po
  • Opencv图像处理(全)

    文章目录 博主精品专栏导航 备注 以下源码均可运行 不同项目涉及的函数均有详细分析说明 11 图像项目实战 一 银行卡号识别 sort contours resize 二 文档扫描OCR识别 cv2 getPerspectiveTransf
  • IntelliJ IDEA 修改 idea64.exe.vmoptions文件修改错误导致软件打不开

    如果修改了idea64 exe vmoptions文件中的参数 然后导致idea打不开 那么此文一定能帮你解决问题 有的小伙伴出现此类问题之后 可能尝试的重装IntelliJ IDEA的方法 但是重装之后发现还是解决不了问题 还是会弹出如下
  • iOS开发判断版本号不同

    判断是否是第一次启动或者版本号不同时 NSString key CFBundleVersion 上一次打开的版本号 存储在沙盒中的版本号 NSString lastVersion NSUserDefaults standardUserDef
  • 串口接收数据分包问题处理(QT上位机/单片机等)

    串口数据出现分包如何正确完整接收 提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 设计思路 二 代码参考 总结 前言 串口通信在QT上位机以及单片机或者安卓串口等使用情况下 经常容易出现一包数据分成几包
  • 基于VS2019 C++的跨平台(Linux)开发——引入

    一 前言 先声明我的服务器是Ubuntu16 04 由标题可知 我的开发工具采用Visual Studio2019 使用c 语言来实现windows linux的跨平台开发 二 关于跨平台 1 什么是跨平台 由百度百科可知 跨平台概念是软件
  • 【Redis】Redis 常用命令

    文章目录 String List Set Hash Zset Geospatial Hyperloglog Bitmap String key value 结构 value 除了字符串还可以是数字 整型 浮点型 set key value
  • 链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)

    这篇文章分析一下链表的各种排序方法 以下排序算法的正确性都可以在LeetCode的链表排序这一题检测 本文用到的链表结构如下 排序算法都是传入链表头指针作为参数 返回排序后的头指针 struct ListNode int val ListN
  • Echarts 散点图的 tooltip设置跟随鼠标移动,并将显示位置固定在指定大小区域

    问题 在散点图中设置了tooltip后 不设置position 使用默认的配置 toolt的显示位置是跟随鼠标移动的 但是会出现显示不全的情况 如下图 这产品肯定不能忍啦 必须改 于是我去看了echarts的文档 看到tooltip的pos