ult*_*oid 33 html javascript image map
我正在尝试在我的网站上制作一个根据窗口大小调整大小的图像映射...我想知道是否有任何方式使用HTML来执行此操作或者我是否必须使用Javascript或其他方法执行此操作语言.
<div style="text-align:center; width:1920px; margin-left:auto; margin-right:auto;">
<img id="Image-Maps_5201211070133251" src="Site.png" usemap="#Image-Maps_5201211070133251" border="0" width="1920" height="1080" alt="" />
<map id="_Image-Maps_5201211070133251" name="Image-Maps_5201211070133251">
<area shape="poly" coords="737,116,1149,118,944,473," href="http://essper.bandcamp.com" alt="Bandcamp" title="Bandcamp" />
<area shape="poly" coords="1006,589,1418,590,1211,945," href="http://soundcloud.com/essper" alt="Soundcloud" title="Soundcloud" />
<area shape="poly" coords="502,590,910,591,708,944," href="http://facebook.com/the.essper" alt="Facebook" title="Facebook" />
</map>
Run Code Online (Sandbox Code Playgroud)
Tee*_*emu 42
如果你最终做JavaScript的任务,这里是一个跨浏览器codesnippet来调整在各领域的MAP元素.
window.onload = function () {
var ImageMap = function (map) {
var n,
areas = map.getElementsByTagName('area'),
len = areas.length,
coords = [],
previousWidth = 1920;
for (n = 0; n < len; n++) {
coords[n] = areas[n].coords.split(',');
}
this.resize = function () {
var n, m, clen,
x = document.body.clientWidth / previousWidth;
for (n = 0; n < len; n++) {
clen = coords[n].length;
for (m = 0; m < clen; m++) {
coords[n][m] *= x;
}
areas[n].coords = coords[n].join(',');
}
previousWidth = document.body.clientWidth;
return true;
};
window.onresize = this.resize;
},
imageMap = new ImageMap(document.getElementById('map_ID'));
imageMap.resize();
}
Run Code Online (Sandbox Code Playgroud)
previousWidth必须等于原始图像的宽度.您还需要在HTML中使用一些相对单位:
<div style="width:100%;">
<img id="Image-Maps_5201211070133251" src="Site.png" usemap="#Image-Maps_5201211070133251" border="0" width="100%" alt="" />
Run Code Online (Sandbox Code Playgroud)
在jsFiddle上工作演示.如果你在IE中打开小提琴,你可以AREA在点击时看到s.
Dav*_*haw 41
我写了一个小的lib来保持imageMap缩放到可调整大小的图像,因此图像在图像缩放时保持同步.想要映射百分比缩放图像等时很有用
它可以与jQuery一起使用或不与jQuery一起使用.
https://github.com/davidjbradshaw/imagemap-resizer
你可以看到它在工作.
http://davidjbradshaw.com/imagemap-resizer/example/
这是我最简单的解决方案。不需要 jquery 或任何插件。注意,此解决方案不处理标记中的任何错误或大小不成比例的图像。
function mapResizer(maps) {
if (!maps) {maps = document.getElementsByTagName('map');}
for (const map of maps) {
map.img = document.querySelectorAll(`[usemap="#${map.name}"]`)[0];
map.areas = map.getElementsByTagName('area');
for (const area of map.areas) {
area.coordArr = area.coords.split(',');
}
}
function resizeMaps() {
for (const map of maps) {
const scale = map.img.offsetWidth / (map.img.naturalWidth || map.img.width);
for (const area of map.areas) {
area.coords = area.coordArr.map(coord => Math.round(coord * scale)).join(',');
}
}
}
window.addEventListener('resize', () => resizeMaps());
resizeMaps();
}
if (document.readyState == 'complete') {
mapResizer();
} else {
window.addEventListener('load', () => mapResizer());
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65241 次 |
| 最近记录: |