如何使用图像映射写入区域的文本中心?
How to write text center of the area using imagemap?
我使用了 map 和 area attr,为了给它们设置样式,我使用了 maphighlight.js 即 jquery。当我悬停时,它会显示边框和颜色填充等。
现在我想把用坐标确定的每个区域的文本中心。页面加载时,我想在区域 "without hover" 中心看到文本,悬停后我想看到边框、颜色等。感谢您的帮助。
这是我的代码。 1)地图
$(document).ready(function(){
$('.map').maphilight();
});
2)我尝试写文本但无法正常工作
$(function() {
$('area').each(function(){
var txt=$(this).data('name');
var coor=$(this).attr('coords');
var coorA=coor.split(',');
var left=coorA[0];
var top=coorA[1];
var $span=$('<span class="map_title">'+txt+'</span>');
$span.css({top: top+'px', left: left+'px', position:'absolute'});
$span.appendTo('.content');
})
})
这是映射
<div class="content">
<img src="ozak.jpg" alt="" class="map" width="2000" height="2000" border="0" usemap="#demo">
</div>
<map name="demo">
<area id="51" alt="D1" class ="tooltip" title="3+1 150 m² Deniz Manzaralı " href="javascript: alert('Daire 5127 Satılmıştır!')" coords="588,271,816,369" shape="rect" data-maphilight='{"strokeColor":"000000","strokeWidth":5,"fillColor":"F72E06","fillOpacity":0.7}' data-name="Daire1">
<area alt="" title="" href="javascript: alert('Daire 5287 Satılıktır!')" coords="1251,278,1374,367" shape="rect" data-maphilight='{"strokeColor":"000000","strokeWidth":5,"fillColor":"00BD06","fillOpacity":0.7}' data-name="Daire2">
<area alt="" title="" href="javascript: alert('Daire 8692 Satılmıştır!')" coords="600,469,807,554" shape="rect" data-maphilight='{"strokeColor":"000000","strokeWidth":5,"fillColor":"F72E06","fillOpacity":0.7}' data-name="Daire3">
</map>
CSS
#map {
position:relative
}
.map_title {
position:absolute;
}
首先是我使用了自己的图片
coords="588,271,816,369"
的工作原理:
- 这里是x1,y1,x2,y2,其中x1,y1代表区域的左上角,x2,y2代表区域的右下角。
- 第二件事是您需要将这些坐标解析为整数以计算文本的 top/left 属性。
- 现在,您可以使用此公式计算左属性。
parseInt(coorA[0])+((parseInt(coorA[2])-parseInt(coorA[0]))/2)
。和 top 一样
请注意,我在这里计算的点是您的 rect
的确切中心,但它出现在右侧,因为它是从确切的中心点开始的。您可以应用更多数学知识来使其完全居中对齐。
编辑
您可以计算跨度的宽度并获取其宽度。之后,除以 2 将为您提供需要减去的像素,以使您的标签准确地位于中心。在这里,我假设在边框中使用了一些像素,所以我有 9 个像素作为调整。感觉还行的话可以去掉。
$(function() {
$('.map').maphilight();
$('area').each(function(){
var txt=$(this).data('name');
var coor=$(this).attr('coords');
var coorA=coor.split(',');
var left=parseInt(coorA[0])+((parseInt(coorA[2])-parseInt(coorA[0]))/2);
var top=parseInt(coorA[1])+((parseInt(coorA[3])-parseInt(coorA[1]))/2)
var $span=$('<span class="map_title">'+txt+'</span>');
$span.css({top: top+'px', left: left+'px', position:'absolute'});
$span.appendTo('.content');
$span.css({left:(left-Math.ceil($span.width()/2)+9)+'px'})
})
});
#map {
position:relative
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/maphilight/1.4.0/jquery.maphilight.min.js" integrity="sha256-nUK4JHJVwdj7H1SYkkMcuE2unpjH5vYOe3mGEVu/69Q=" crossorigin="anonymous"></script>
<div class="content">
<img src="https://i.picsum.photos/id/372/200/300.jpg" alt="" class="map" width="2000" height="2000" border="0" usemap="#demo">
</div>
<map name="demo">
<area id="51" alt="D1" class ="tooltip" title="3+1 150 m² Deniz Manzaralı " href="javascript: alert('Daire 5127 Satılmıştır!')" coords="588,271,816,369" shape="rect" data-maphilight='{"strokeColor":"000000","strokeWidth":5,"fillColor":"F72E06","fillOpacity":0.7}' data-name="Daire1">
<area alt="" title="" href="javascript: alert('Daire 5287 Satılıktır!')" coords="1251,278,1374,367" shape="rect" data-maphilight='{"strokeColor":"000000","strokeWidth":5,"fillColor":"00BD06","fillOpacity":0.7}' data-name="Daire2">
<area alt="" title="" href="javascript: alert('Daire 8692 Satılmıştır!')" coords="600,469,807,554" shape="rect" data-maphilight='{"strokeColor":"000000","strokeWidth":5,"fillColor":"F72E06","fillOpacity":0.7}' data-name="Daire3">
</map>
我使用了 map 和 area attr,为了给它们设置样式,我使用了 maphighlight.js 即 jquery。当我悬停时,它会显示边框和颜色填充等。
现在我想把用坐标确定的每个区域的文本中心。页面加载时,我想在区域 "without hover" 中心看到文本,悬停后我想看到边框、颜色等。感谢您的帮助。 这是我的代码。 1)地图
$(document).ready(function(){
$('.map').maphilight();
});
2)我尝试写文本但无法正常工作
$(function() {
$('area').each(function(){
var txt=$(this).data('name');
var coor=$(this).attr('coords');
var coorA=coor.split(',');
var left=coorA[0];
var top=coorA[1];
var $span=$('<span class="map_title">'+txt+'</span>');
$span.css({top: top+'px', left: left+'px', position:'absolute'});
$span.appendTo('.content');
})
})
这是映射
<div class="content">
<img src="ozak.jpg" alt="" class="map" width="2000" height="2000" border="0" usemap="#demo">
</div>
<map name="demo">
<area id="51" alt="D1" class ="tooltip" title="3+1 150 m² Deniz Manzaralı " href="javascript: alert('Daire 5127 Satılmıştır!')" coords="588,271,816,369" shape="rect" data-maphilight='{"strokeColor":"000000","strokeWidth":5,"fillColor":"F72E06","fillOpacity":0.7}' data-name="Daire1">
<area alt="" title="" href="javascript: alert('Daire 5287 Satılıktır!')" coords="1251,278,1374,367" shape="rect" data-maphilight='{"strokeColor":"000000","strokeWidth":5,"fillColor":"00BD06","fillOpacity":0.7}' data-name="Daire2">
<area alt="" title="" href="javascript: alert('Daire 8692 Satılmıştır!')" coords="600,469,807,554" shape="rect" data-maphilight='{"strokeColor":"000000","strokeWidth":5,"fillColor":"F72E06","fillOpacity":0.7}' data-name="Daire3">
</map>
CSS
#map {
position:relative
}
.map_title {
position:absolute;
}
首先是我使用了自己的图片
coords="588,271,816,369"
的工作原理:
- 这里是x1,y1,x2,y2,其中x1,y1代表区域的左上角,x2,y2代表区域的右下角。
- 第二件事是您需要将这些坐标解析为整数以计算文本的 top/left 属性。
- 现在,您可以使用此公式计算左属性。
parseInt(coorA[0])+((parseInt(coorA[2])-parseInt(coorA[0]))/2)
。和 top 一样
请注意,我在这里计算的点是您的 rect
的确切中心,但它出现在右侧,因为它是从确切的中心点开始的。您可以应用更多数学知识来使其完全居中对齐。
编辑
您可以计算跨度的宽度并获取其宽度。之后,除以 2 将为您提供需要减去的像素,以使您的标签准确地位于中心。在这里,我假设在边框中使用了一些像素,所以我有 9 个像素作为调整。感觉还行的话可以去掉。
$(function() {
$('.map').maphilight();
$('area').each(function(){
var txt=$(this).data('name');
var coor=$(this).attr('coords');
var coorA=coor.split(',');
var left=parseInt(coorA[0])+((parseInt(coorA[2])-parseInt(coorA[0]))/2);
var top=parseInt(coorA[1])+((parseInt(coorA[3])-parseInt(coorA[1]))/2)
var $span=$('<span class="map_title">'+txt+'</span>');
$span.css({top: top+'px', left: left+'px', position:'absolute'});
$span.appendTo('.content');
$span.css({left:(left-Math.ceil($span.width()/2)+9)+'px'})
})
});
#map {
position:relative
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/maphilight/1.4.0/jquery.maphilight.min.js" integrity="sha256-nUK4JHJVwdj7H1SYkkMcuE2unpjH5vYOe3mGEVu/69Q=" crossorigin="anonymous"></script>
<div class="content">
<img src="https://i.picsum.photos/id/372/200/300.jpg" alt="" class="map" width="2000" height="2000" border="0" usemap="#demo">
</div>
<map name="demo">
<area id="51" alt="D1" class ="tooltip" title="3+1 150 m² Deniz Manzaralı " href="javascript: alert('Daire 5127 Satılmıştır!')" coords="588,271,816,369" shape="rect" data-maphilight='{"strokeColor":"000000","strokeWidth":5,"fillColor":"F72E06","fillOpacity":0.7}' data-name="Daire1">
<area alt="" title="" href="javascript: alert('Daire 5287 Satılıktır!')" coords="1251,278,1374,367" shape="rect" data-maphilight='{"strokeColor":"000000","strokeWidth":5,"fillColor":"00BD06","fillOpacity":0.7}' data-name="Daire2">
<area alt="" title="" href="javascript: alert('Daire 8692 Satılmıştır!')" coords="600,469,807,554" shape="rect" data-maphilight='{"strokeColor":"000000","strokeWidth":5,"fillColor":"F72E06","fillOpacity":0.7}' data-name="Daire3">
</map>