html - 在鼠标输入时设置标签固定位置
问题描述
我正在尝试使用 jquery 在圆圈上创建简单的悬停效果,但我陷入了执行这个简单任务的过程中,问题是,当鼠标到达红色圆圈时,标签是城市重叠圆圈区域的位置,并且标签围绕圆圈移动,我希望标签固定在红色圆圈的顶部。PS当我试图写简短的命名城市标签重叠的描述时,被忽略了。例如
const regionObject = {"philadelphia" : "Philadelphia",}
在此处输入代码
$(function(){
$('circle').mouseenter(function(e){
const circleId = $(this).attr('id');
const regionObject = {
"philadelphia" : "Philadelphia, sity in pennsylvania",
}
var div = $(`<div class="current_region">
<div class="current_region_box">
<p>${regionObject[circleId]}</p>
</div>
<div class="region_pointer"></div>
</div>`)
.css({
"display": "block",
"left": (e.pageX - 40) + 'px',
"top": (e.pageY - 45) + 'px'
})
.appendTo(document.body);
}).mouseout(function(){
$('body').find('.current_region').remove();
});
});
.current_region {
position: absolute;
}
.current_region_box {
position: relative;
z-index: 10;
border-radius: 30px;
background: white;
box-shadow: 0px 2px 6px 1px rgba(18, 40, 112, 0.5);
padding: 4px 12px;
}
.current_region_box p {
font-family: firagolight;
font-size: 15px;
}
.current_region_box {
position: relative;
z-index: 10;
border-radius: 30px;
background: white;
box-shadow: 0px 2px 6px 1px rgba(18, 40, 112, 0.5);
padding: 4px 12px;
}
.current_region_box p {
font-family: firagolight;
font-size: 15px;
}
.region_pointer {
position: absolute;
z-index: 9;
bottom: -9px;
right: 3px;
left: 0;
margin: auto;
width: 25px;
height: 25px;
background: white;
border-radius: 5px;
transform: rotate(45deg);
box-shadow: 0px 0px 4px -1px grey;
}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<!-- Font Awesome -->
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<!-- Developer CSS -->
<link rel="stylesheet" type="text/css" href="./map.css">
<!-- Jquery-->
<script src="js/jquery-3.4.1.min.js"></script>
</head>
<body>
<div class="example" style="text-align: center; padding-top: 50px; cursor: pointer; " >
<svg height="100" width="100">
<circle id="philadelphia" cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
Sorry, your browser does not support inline SVG.
</svg>
</div>
<!--Boostrap JS-->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity=" sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity=" sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script src="./map.js"></script>
</body>
</html>
解决方案
您可以使用这个纯 CSS 解决方案,在其中使用 ::after 伪类,它在悬停元素时显示。您可以通过 top 和 left 属性定位工具提示。
body { margin: 50px }
#circle {
width: 200px;
height: 200px;
background-color: red;
border-radius: 50%;
position: relative;
border: 3px solid black;
}
#circle:after {
content: "This is tooltip";
position: absolute;
top: -20px;
left: 50%;
display:none;
/* these are just to make it prettier */
background-color: black;
padding: 10px;
color: white;
border-radius: 5px;
opacity: .7; /* erase this if you dont want it transparent */
}
#circle:hover:after {
display: block;
}
<div id="circle"></div>
工具提示的值可以取自圆形元素的任何属性,例如标题。在 css 中,您将使用:
content: attr(title)
推荐阅读
- java - 在 Streamsets DataCollector 的 Groovy Evaluator 中导入外部 Java 库的问题
- angular - 如何将 Angular 构建文件从 Github 部署到自托管服务器?
- javascript - JS ES6 解构,分配整个对象并同时解构其属性
- python - 根据条件python pandas向数据框添加新行
- java - 两个不同时区之间的时差计算?
- django - React-Danjo REST 框架:无法使用外键将数据发布到模型
- docker - 从其中一个应用程序容器中发出的 docker 引擎调用应该是什么样子
- string - 循环并移动字符串中的变量
- c - 为什么我不能在c中将字符串转换为int
- okta - OKTA 不同的 okta 域用于不同的请求