让 div 跟随光标在特定的 div 父级中

Posted

技术标签:

【中文标题】让 div 跟随光标在特定的 div 父级中【英文标题】:Keep div follow cursor in specific div parent 【发布时间】:2021-11-30 04:52:47 【问题描述】:

如何在其父 div ($(this)) 中制作弹出跟随光标? 我试过这个,但是每次当我悬停一个元素时它的位置发生变化时,popin 都不会跟随光标。

const $divs = $(".domtom-container .svg-container");
let dept = , total = ;
$divs.each(function (i) 
    var popup_topo = $("<div class='popup_topo'>" + dept + "<br/>" + total + " parrainages</div>");
    
    $(this).on('mousemove', function (event) 
     const x = event.clientX;
      const y = event.clientY;

      $(this).append(popup_topo);
      popup_topo.css(
        top: `$ypx`,
        lef: `$xpx`,
      );
    ).on('mouseleave', function (event) 
      popup_topo.remove();
    );
);

html

 <div class="domtom-container">
   <div class="svg-container svg-topo">
      <svg  > </svg>
      <p> Nouvelle-Calédonie </p>
   </div>
   <div class="svg-container svg-topo">
      <svg  ></svg>
      <p> Guyane </p>
   </div>
   <div class="svg-container svg-topo">
      <svg  > </svg>

      <p> Polynésie française </p>
   </div>
   <div class="svg-container">
      <svg  > </svg>
      <p> Parlement européen </p>
   </div>
   <div class="svg-container svg-topo">
      <svg  ></svg>
      <p> La Réunion </p>
   </div>
</div>

CSS:

.svg-container 
        &.svg-topo 
            position: relative;
            .popup_topo 
                position: absolute;
                font-size: 1.4rem;
                background-color: #1E2382;
                color: #FFF;
                padding: .5rem;
                transition: .1s;
                transform: translate(-50%, -50%);
                z-index: 999;
            
            &:hover 
                svg 
                    path 
                        fill : #1E2382!important;
                    
                
            
            svg 
                min-height: 5rem;
            
        
    

我认为popin位置的计算做得不好,但我不知道如何。 请检查下面的屏幕截图(GIF)

PS:我正在使用 Datamaps 插件:https://github.com/markmarkoh/datamaps/blob/master/README.md#using-custom-maps

【问题讨论】:

popup_topo 的 CSS 是什么? $(this) 是什么元素? 请提供您的代码Minimal, Reproducible Example。另外,你的问题不是很清楚。 @epascarello,我更新了我的帖子 @Rojo,把所有的代码都放出来不容易,因为它来自插件,我尽力了(更新后):/ 您将 div 附加到 svg-topo div,但位置基于页面,而不是 svg-topo div。您需要将弹出窗口附加到 div 或调整 x/y 位置,使其基于悬停元素而不是页面的顶部。 【参考方案1】:

这是因为 clientX 和 ClientY 是根据 SVG 元素的位置计算的。你想要的是屏幕上的绝对点。

考虑,

const $divs = $(".domtom-container .svg-container");
const x = $divs.offset().left - event.clientX;
const y = $divs.offset().top - event.clientY;

now pass this value to the css.
 popup_topo.css(
        top: `$ypx`,
        lef: `$xpx`,
      );

【讨论】:

这不起作用,我在 DOM 中有 popin,但我没有在旁边看到它。

以上是关于让 div 跟随光标在特定的 div 父级中的主要内容,如果未能解决你的问题,请参考以下文章

Div以光标为中心

如何让div跟随jQuery顺利滚动?

在 iframe 父级中访问 div

在 iframe 父级中访问 div

仅展开父级中的子级 div

父级中的div高度溢出[重复]