在鼠标悬停在画布上的形状/位置(坐标)上时显示工具提示

2024-01-25

当鼠标悬停在画布上的某些位置时,我试图显示相应的工具提示。例如,当鼠标在画布上的坐标为(100,100)时,显示tooltip1。当鼠标位置在(200,200)时,显示tooltip2等,

我已经添加了事件侦听器来检测鼠标移动并获取鼠标位置。这是我的部分:

window.addEventListener('mousemove',hover,false);
function getMousePos (canvas, event) {
    var rect = canvas.getBoundingClientRect();
    return {
        x: event.clientX - rect.left,
        y: event.clientY - rect.top
    };
}
function hover (event){
    pos = getMousePos(canvas,event);
    if (condition to detect mouse hover)
    //display tooltip_function (this is the function that I don't know how to implement)
}

您可以测试鼠标是否位于圆形热点之一上,如下所示:

var hotspots=[
    {x:100,y:100,radius:20,tip:'You are over 100,100'},
    {x:100,y:200,radius:20,tip:'You are over 100,200'},
];

var dx=mouseX-hotspot[0].x;
var dy=mouseY-hotspot[0].y;

if (dx * dx + dy * dy < hotspot[0].radius * hotspot[0].radius) {
  // it's over hotspot[0]
}

这是示例代码和演示:

注意:您不需要像演示中那样显示圆形热点 - 这仅适用于本演示

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var cw = canvas.width;
var ch = canvas.height;
function reOffset() {
  var BB = canvas.getBoundingClientRect();
  offsetX = BB.left;
  offsetY = BB.top;
}
var offsetX, offsetY;
reOffset();
window.onscroll = function (e) {
  reOffset();
};
window.onresize = function (e) {
  reOffset();
};

var hotspots = [
  { x: 100, y: 100, radius: 20, tip: "You are over 100,100" },
  { x: 100, y: 200, radius: 20, tip: "You are over 100,200" },
];

draw();

$("#canvas").mousemove(function (e) {
  handleMouseMove(e);
});

function draw() {
  for (var i = 0; i < hotspots.length; i++) {
    var h = hotspots[i];
    ctx.beginPath();
    ctx.arc(h.x, h.y, h.radius, 0, Math.PI * 2);
    ctx.closePath();
    ctx.stroke();
  }
}

function handleMouseMove(e) {
  // tell the browser we're handling this event
  e.preventDefault();
  e.stopPropagation();

  mouseX = parseInt(e.clientX - offsetX);
  mouseY = parseInt(e.clientY - offsetY);

  ctx.clearRect(0, 0, cw, ch);
  draw();
  for (var i = 0; i < hotspots.length; i++) {
    var h = hotspots[i];
    var dx = mouseX - h.x;
    var dy = mouseY - h.y;
    if (dx * dx + dy * dy < h.radius * h.radius) {
      ctx.fillText(h.tip, h.x, h.y);
    }
  }
}
body{ background-color: ivory; }
#canvas{border:1px solid red; margin:0 auto; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<h4>Hover over a hotspot circle</h4>
<canvas id="canvas" width=300 height=300></canvas>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在鼠标悬停在画布上的形状/位置(坐标)上时显示工具提示 的相关文章

  • 使用 jQuery inputmask 插件范围 0-100

    如何创建 0 到 100 范围内的掩码 document ready function masked inputmask 您可以使用jquery inputmask regex extensions js为了那个原因 你可以找到带有所有扩展
  • 如何显示接下来的三个图像单击加载更多按钮

    我需要一个加载更多按钮来显示图像 页面加载时 我显示 3 个图像 单击 加载更多 按钮后 接下来的 3 个图像将显示在屏幕上 我尝试了下面的代码 但它不起作用 你能帮我解决这个问题吗 function item slice 0 2 show
  • 我应该创建一个块还是一个元素 BEM CSS?

    Bem官网说 创建一个块如果一段代码可以被重用并且它不依赖于正在实现的其他页面组件 创建一个元素如果一段代码在没有父实体 块 的情况下无法单独使用 我有一个 关于部分 块 它的元素依赖于父级并且不能在网站中重复使用 如何根据 bem 这段代
  • 将 html 文本框的值分配给 div 的标题

    line 1
  • 如何从前端将ASP.net dropdownlist索引设置为0

    我在 ASP net 页面中有以下代码
  • 提升变焦不起作用

    我正在使用带有苹果风格幻灯片画廊的提升缩放功能 一切正常 然而 缩放功能会放大被滑块隐藏的隐藏图像 直到单击缩略图时它们变得可见 启动缩放插件的原始代码是 zoom 01 elevateZoom 我从其他问题中得到了下面的 JavaScri
  • 如何在javascript中获取基本url

    我正在建立一个网站代码点火器 http ellislab com codeigniter 我有各种资源 我用base url http ellislab com codeigniter user guide helpers url help
  • Chrome“请匹配请求的格式”验证消息

    我正在研究 HTML 5 验证和本地化 并设法让一些代码正常工作 使我能够本地化 HTML 5 验证错误消息 见下文 我的问题是 在 Chrome 中 当与模式匹配时 您仍然会弹出英语 或者我猜您 Chrome 设置的任何语言 的弹出窗口
  • 如何使用 bootstrap-select 在每个选择选项上添加工具提示

    我正在尝试使用 bootstrap select 将工具提示添加到每个选择选项 当我检查时 似乎 select js 将 select 标签转换为 ul 我不知道这是我的代码不起作用的原因 html div class form group
  • 在 Javascript 中访问表格单元格的内容

    我有一个嵌套在 HTML 表格单元格元素内的复选框 如何从 Javascript 访问内部复选框 我见过的所有示例都改变了内部 HTML 本身或视觉属性 这不是我感兴趣的 我尝试过 childNodes 数组 但显然它是空的 如果你不使用
  • QtWebEngine Quicknano 在嵌入式 Linux 中没有声音

    我已将 QtWebEngine 编译到我的 i MX6 嵌入式设备中 当我尝试使用 Quicknanobrowser 播放 YouTube 视频时 视频会播放 但没有声音 事实上 当我尝试播放音频文件时没有声音hpr dogphilosop
  • 推荐的 HTML 格式化程序脚本/实用程序? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何精确缩放已翻译的d3地图

    我有一张已翻译的地图 以使其正确适合画布 我正在尝试实现一种缩放它的方法 它确实有效 但是当您放大时它会远离中心 而不是以鼠标甚至画布为中心 这是我的代码 function map data total views var xy d3 ge
  • 如何在单页应用程序中使用 #-URL?

    本文 http danwebb net 2011 5 28 it is about the hashbangs提出了一个非常令人信服的论点 因为 URL 是长期存在的 它们被添加书签并传递 所以它们应该是有意义的 并且使用哈希进行真正的路由
  • 通过php变量的值设置输入字段的值

    我有一个简单的 php 计算器 代码是 h1 align center This is PHP Calculator h1
  • 为什么在缩放的 html5 画布中可以看到伪像?

    我见过this https stackoverflow com questions 7615009 disable interpolation when scaling a canvas and this https stackoverfl
  • Python 模块 BeautifulSoup 提取锚点 href

    我正在使用 BeautifulSoup 模块通过以下方式从 html 选择所有 href def extract links html soup BeautifulSoup html anchors soup findAll a print
  • HTML/CSS:页面左侧的导航栏

    我发现创建这样具有良好语义的布局很尴尬 左侧是大约 150 像素宽的列 其中包含导航元素 我想将网站这部分的 HTML 放在 HTML 代码的开头 然后有一个简单的方法来强制页面的其余部分不侵占左侧的区域 150 像素列 我考虑过一些选择
  • 电子邮件模板中的剪贴板功能

    我想在电子邮件模板中发送优惠券代码 一个小按钮 用于复制剪贴板上输入元素的内容 通过电子邮件模板 我的意思是我想发送一封电子邮件 其中包含优惠券代码 并且电子邮件模板中会有一个按钮 允许我将其复制到剪贴板 这可以做到吗 任何帮助将不胜感激
  • 文件和目录条目 API 在 Chrome 中损坏?

    我正在尝试使用文件和目录条目 API 创建一个文件上传器工具 该工具允许我将文件和目录的任意组合放入浏览器窗口中 以供读取和上传 我完全意识到 可以通过使用文件输入元素来实现类似的功能webkitdirectory已启用 但我正在测试一个用

随机推荐

  • Android的RelativeLayout低于2个视图

    我有一个RelativeLayout像这样
  • C# 在属性被命中之前运行一段代码

    我有一个方法 我希望始终在属性的 get 访问器之前运行 如果不手动运行 get 中的方法 这可能吗 这是我想要工作的一个例子 private string someString private string someOtherString
  • 无法在非聚合查询中的未定义结果变量上添加条件

    我正在实体存储库中执行此查询并不断获取 无法在未定义的结果变量上添加条件 但查询根本没有聚合 为什么这种事会发生在我身上 public function getPersonalizableItemsByOwner User owner qb
  • Xcode/iOS——摆脱特定常量的弃用警告?

    我的项目中有一些已弃用的常量 他们需要留下来 我不想收到关于它们的警告 但是如果稍后在我的项目中出现其他已弃用的常量 我确实希望收到警告 Apple 的标头将它们声明如下 extern NSString const NameOfString
  • 按钮文本位置与浏览器不同

    无论是在 firefox chrome 还是 opera ie 中 按钮文本位置都不同 我有一个按钮和文字 在 Opera 中 它比在 Firefox 中低一点 HTML
  • 如何使用户控件部分类了解基类中声明的控件?

    我们是否必须做一些特殊的事情才能让 ASP NET 分部类了解在用户控件的基类中声明的控件 分部类不断为基类中的控件生成声明 这意味着基类中的控件被隐藏并且为空 CodeFileBaseClass 属性可应用于 Page http msdn
  • PostgreSQL 检查数组是否包含左侧数组中的任何元素

    我知道在 PostgreSQL 中你可以运行如下查询 SELECT 1 ANY 1 3 4 7 int AS result检查右侧数组是否包含该元素1 我想知道是否有一种简单的方法来检查右侧数组是否包含来自左手大批 就像是 SELECT 2
  • 使用主干js加载模板

    我开始进行 javascript 开发 并使用 node js 作为休息 API 和使用主干的客户端做了一个简单的项目 一切看起来都很完美 直到我想从我的 js 中获取模板 我发现了不同的方法 其中一些需要一段时间 例如一年 但我不明白哪种
  • 使用 Ember Data 处理服务器端验证

    我在使用 Ember 和 Ember Data 处理服务器端验证时遇到问题 当发生验证错误时 API 返回代码 422 然后 Ember 数据会触发becameInvalid模型上的回调 从这里开始 我不确定处理我遇到的错误的最佳方法是什么
  • $(e.currentTarget) 和 $(this) 之间有区别吗?

    下面两种方法有什么区别吗 1 比 2 快吗 1 selector on click function this do stuff with clicked element and 2 selector on click function e
  • 将参数传递给 IIFE

    将参数传递给存储在变量中的 IIFE 的正确语法是什么 下面的例子告诉我foo未定义 无论我是否调用该函数 var bar function foo return getFoo function return foo foo console
  • 错误 440“数组索引越界”

    我正在尝试下载带有主题关键字的 Excel 附件 我设法创建了一个代码 但有时它给出了错误440 Array Index out of Bounds 代码就卡在这部分了 If Items i Class Outlook OlObjectCl
  • d3.js v4.0 中 d3.scale.category10() 的等效项是什么?

    我正在尝试通过交互式 Web 可视化一书来学习 d3 但 4 0 版本发生了很多变化 我真的无法弄清楚的一件事是是否有 d3 scale category10 的等效项来轻松映射到颜色 新版本中是否有类似的东西 或者我们需要使用 math
  • 向函数传递两个指向同一联合成员​​的指针是否违反了严格的别名规则? [复制]

    这个问题在这里已经有答案了 注意 学习严格的别名规则 请耐心等待 代码示例 t935 c include
  • 使 Loopback API Ember.js 兼容

    我正在尝试使用 Loopback 来获取与 Ember 对话的 API Ember 要求 JSON 包含在 键 中 例如对于一个帐户 account domain domain com subdomain test title test d
  • Alpine 操作系统上的 Php7 Redis 客户端

    我使用 alpine 3 5 作为基础镜像制作了一个 docker 镜像 我希望我的 php 应用程序在容器内运行以与 redis 服务器通信 但我在 Alpine 中找不到任何 php7 redis 客户端 有解决办法吗 我尝试使用pec
  • 将图像分成3*3的块

    我有一个矩阵 它的维度恰好不是 3 的倍数 或者可能是 3 的倍数 我们怎样才能将整个图像分成3 3矩阵块 可以忽略最后不属于3 3倍数的 另外 3 3矩阵可以保存在数组中 a 3 b 3 window size x size f 1 a
  • 在文本框中输入文本

    谁能告诉我为什么会这样jsFiddle http jsfiddle net 4NwZ9 不起作用 这个想法很简单 只是假设将选定的文本输入到文本框中 HTML
  • 配置 Qt Creator 以与 GDB 一起使用

    我的机器上有 GDB 和 CDB 我的 Qt 创建者正在使用 CDB 进行调试 我试图指向GDB路径 但它不起作用 如何设置 Qt Creator 使用 GDB 进行调试 确保您已将 Qt Creator 设置为 调试 构建配置 构建菜单
  • 在鼠标悬停在画布上的形状/位置(坐标)上时显示工具提示

    当鼠标悬停在画布上的某些位置时 我试图显示相应的工具提示 例如 当鼠标在画布上的坐标为 100 100 时 显示tooltip1 当鼠标位置在 200 200 时 显示tooltip2等 我已经添加了事件侦听器来检测鼠标移动并获取鼠标位置