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

点击图片热点区域(area map)时,如何在对应位置显示div/CSS内容

解决图片热点区域点击后在对应坐标显示内容的问题

看起来你已经有了基础的显示切换逻辑,但核心问题是没有将内容定位到点击的热点坐标上。我来帮你完善代码,实现点击热点时在对应位置展示/隐藏指定div的效果:

首先,先确认你的HTML结构大概是这样(如果不是可以调整选择器):

<!-- 带热点的图片 -->
<img src="your-image-url.jpg" usemap="#image-map" class="list-group">
<map name="image-map">
  <area id="area-1" shape="rect" coords="50,50,150,150" alt="热点区域1">
  <area id="area-2" shape="circle" coords="300,200,60" alt="热点区域2">
</map>

<!-- 对应每个热点的内容容器 -->
<div class="dropdowntest-content area-1">这是热点1的专属内容</div>
<div class="dropdowntest-content area-2">这是热点2的专属内容</div>

然后是CSS部分(补充完整你的样式):

.dropdowntest-content {
  position: absolute;
  display: none;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px rgba(0,0,0,0.2);
  padding: 12px 16px;
  z-index: 999; /* 确保内容在最上层 */
}
/* 显示状态的类 */
.dropdowntest-content.show {
  display: block;
}

接下来是关键的JavaScript代码,我修改并增强了你的逻辑:

(function($) {
  // 绑定热点点击事件
  $('.list-group area').on('click', function(e) {
    e.preventDefault(); // 阻止area默认的跳转行为(如果设置了href)
    const targetContent = $('.' + this.id);
    
    // 先隐藏所有其他热点的内容,避免同时显示多个
    $('.dropdowntest-content').not(targetContent).removeClass('show');
    
    // 切换当前内容的显示/隐藏状态
    targetContent.toggleClass('show');
    
    // 如果当前是显示状态,把内容定位到点击的坐标
    if (targetContent.hasClass('show')) {
      // 可以自定义偏移量,防止内容挡住鼠标指针
      const offsetX = 10;
      const offsetY = 10;
      targetContent.css({
        top: `${e.clientY + offsetY}px`,
        left: `${e.clientX + offsetX}px`
      });
    }
  });

  // 点击页面其他区域时,关闭所有显示的内容(提升用户体验)
  $(document).on('click', function(e) {
    const isArea = $('.list-group area').is(e.target);
    const isContent = $('.dropdowntest-content').is(e.target);
    const isContentChild = $('.dropdowntest-content').has(e.target).length > 0;
    
    if (!isArea && !isContent && !isContentChild) {
      $('.dropdowntest-content').removeClass('show');
    }
  });
})(jQuery);

关键改进点说明:

  • 坐标定位:通过e.clientX和e.clientY获取点击的视窗坐标,设置内容容器的top和left,确保内容出现在点击位置附近。
  • 排他性显示:点击新热点时自动隐藏其他热点的内容,避免界面混乱。
  • 阻止默认行为:如果你的<area>标签设置了href,点击会跳转,用e.preventDefault()阻止这个行为。
  • 外部点击关闭:点击页面空白处或其他非热点/非内容区域时,自动隐藏所有内容,符合用户操作习惯。

可选优化:相对于图片定位

如果你的图片不是固定在视窗顶部,而是在页面中有偏移,你可以改成相对于图片的位置来计算坐标,这样即使页面滚动,内容也会跟着图片热点走:

// 在设置坐标的地方替换成这段代码
const $img = $('.list-group');
const imgOffset = $img.offset();
// 计算点击位置相对于图片左上角的坐标
const relativeX = e.pageX - imgOffset.left;
const relativeY = e.pageY - imgOffset.top;
// 设置内容位置为图片偏移 + 相对坐标 + 自定义偏移
targetContent.css({
  top: `${imgOffset.top + relativeY + offsetY}px`,
  left: `${imgOffset.left + relativeX + offsetX}px`
});

这样调整后,不管图片在页面的哪个位置,内容都会准确出现在热点点击的位置啦!

内容的提问来源于stack exchange,提问作者user7158897

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:09:44