How to make absolute positioned image area maps clickable with mouse?

梦想的初衷 提交于 2019-12-05 02:38:47

You can place a single, completely transparent image on top of all individual images, and attach all imagemap areas to that image. It will act as a capturing element for the mouse events, and you can still change all individual images.

It's not a direct answer/solution...

Why don't you use a canvas/SVG to do the drawing? There is plenty of libraries which make the task easy. One of them is RaphaëlJS (check this example). The advantage of this library is that it allows mouse interactivity.

Another library you may consider is EaselJS, but it doesn't work in the browsers not supporting <canvas>, so no IE < 9 support.

It works only if the images don't overlap (see figure). In your case all the images have exactly the same size and are stacking upon each other. Since Browsers treat images as solid objects (they don't bother about transparency), there is no way how it could determine, which image you want to hover at the moment?

  +-----------+-----------+
  |           |           |
  |   img1    |   img2    |
  |           |           |
  |           |           |
  +-----------+-----------+
  |           |           |
  |   img3    |   img4    |
  |           |           |
  |           |           |
  +-----------+-----------+

However, you can work around this:

Just use a single imagemap on one of the images which contains all areas, and with a little javascript you can trigger the hover-effects on all the other images.

$("area").hover(function(){
    var $target = $("#"+$(this).data("target")); // getting the target image
    $target.attr("src",$target.attr("src").replace("slice","slice-focus")); //replacing the src with the src of the hover image
},function(){
    var $target = $("#"+$(this).data("target"));
    $target.attr("src",$target.attr("src").replace("focus-","")); //revert the changes
});​

Working example based on your code: jsFiddle-Demo

You can also palace transparent div with fixed height and width that will have onclick() event with binded function. somehing like:

<div style="position: absolute; top: 10px; left: 10px; width: 100px; height: 100px;" onclick="dosomething();"></div>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!