You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

适配移动端的点击触发信息卡片显示/隐藏JavaScript方案咨询

适配移动端的点击触发信息卡片显示/隐藏JavaScript方案咨询

嘿,我来请教个前端适配的问题:我做了一张地图,桌面端用户鼠标悬停在数字上时,会弹出一个信息卡片;点击数字的话,会跳转到对应信息的官网。但这个逻辑在移动端完全行不通,毕竟移动端没有鼠标悬停的操作。

我现在想实现的效果是:在移动端点击数字时弹出信息卡片,再次点击就隐藏卡片;或者有没有更优的方案,能同时适配桌面端和移动端的交互?

我搜了一圈没找到和我现有JS代码类似的解决方案,而且我本身对JavaScript不太熟悉,现在的代码是参考其他示例拼凑出来的。之前看到过一篇《Jquery show on hover hide on click》的帖子,但好像不太适配我的场景。

下面是我的现有JavaScript逻辑:

let paths      = document.querySelectorAll("path");
let cardWidth  = card.getBoundingClientRect().width;
let cardHeight = card.getBoundingClientRect().height;

paths.forEach((p) => {
  p.addEventListener("mouseleave", (evt) => {
    card.style.visibility = "hidden";
  });
  p.addEventListener("mousemove", (evt) => {
    let pos  = oMousePos(svg, evt);
    let text = p.dataset.text;
    card.style.visibility = "visible";
    card.style.top = pos.y + "px";
    card.style.left = pos.x + "px";
    card.innerHTML = text;
  });
});

function oMousePos(element, evt) {
  let ClientRect = element.getBoundingClientRect();
  let currentX   = Math.round(evt.clientX - ClientRect.left);
  let currentY   = Math.round(evt.clientY - ClientRect.top);

  //close to right
  if (evt.clientX + cardWidth >= ClientRect.right) {
    currentX = Math.round(evt.clientX - ClientRect.left - cardWidth);
  }
  //close to bottom
  if (evt.clientY + cardHeight >= ClientRect.bottom) {
    currentY = Math.round(evt.clientY - ClientRect.top - cardHeight);
  }
  return {
    x: currentX,
    y: currentY
  };
}

有没有大佬能帮忙调整下代码,或者给个适配两端的思路呀?万分感谢!

备注:内容来源于stack exchange,提问作者camster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 13:14:37