【问题标题】:Image layering, click on icon without hitting background图像分层,点击图标而不点击背景
【发布时间】:2015-10-23 23:50:29
【问题描述】:

我在 Rails 中使用 HTML、CSS、JavaScript。 我的图像存储在我的 app/assets/images 文件夹中。 我的音频(用于 onClick 事件监听器)存储在我的 public/audios 文件夹中。

我希望将图像叠加在一起,这样我就可以针对每个单独的图像设置不同的 JavaScript onClick 事件侦听器,但是这些图像是用不可见的背景呈现的吗?这会干扰点击它所在的图像。

独立,我的图标 (gif) 没有背景。 无背景图标示例供参考:http://findicons.com/search/gif

为了突出显示图像有一个不可见的背景,

the bottom icon, this is the icon highlighted, clicking in the background of the icon (it's highlighted) also initiates the JavaScript onClick event listener

我使用 rails 命令在我的页面上呈现图像。

<div id="id3">
  <%= image_tag "gif_file.png" %>
</div>

我的 css 以 div 为目标

#id3 {
  position:absolute;
}

为了减少文本数量和混乱,我省略了显示分层图标的代码。

我的 .js 文件

var soundright = '<audio autoplay="autoplay" src="/audios/hello.wav"></audio>'
var sound = document.getElementById('sound');

var icon = document.getElementById('id3');

$(icon).click(function(){
  $(sound).html(soundright);
});

请告知我如何单击每个可见分层的渲染图像(JavaScript onClick 事件侦听器添加到每个单独的图像),而不会碰到分层图像的不可见背景。

消除不可见的背景是我一直无法找到的解决方案。

我正在尝试通过将图像相互叠加来制作飞镖靶,并使飞镖靶的每个部分都可点击(onClick 事件侦听器)。

编辑:刚刚编辑了我的最后 3 段以使其更易于理解

【问题讨论】:

  • 谢谢你们!您的回答使我下载了 Adob​​e Fireworks 以使用其图像映射功能快速制作我可以分配 JS onClick 函数的图像映射!我研究了画布解决方案,但我认为这将花费我更多的时间来学习!我知道我会在某个时候进入那个......如果你有任何特别有用的指南,请告诉我!谢谢!

标签: javascript css ruby-on-rails-4


【解决方案1】:

除了消除背景,使用JS,还有HTML的解决方案。

将您的图像合并为一张图像,然后使用&lt;map&gt; 在其上创建“图像映射”。这意味着创建&lt;area&gt;标签来定义可点击区域,每个区域(每张图片)可以触发不同的JS事件监听器。

要更好地了解如何使用它,请参阅 w3schools 提供的example(这很简单,您可以使用其他工具创建更复杂的工具):

<img src="planets.gif" width="145" height="126" alt="Planets" usemap="#planetmap">

<map name="planetmap">
    <area shape="rect" coords="0,0,82,126" alt="Sun" href="sun.htm">
    <area shape="circle" coords="90,58,3" alt="Mercury" href="mercur.htm">
    <area shape="circle" coords="124,58,8" alt="Venus" href="venus.htm">
</map>

还有很多工具可以创建图像地图(因此您不必查找坐标并手动输入),例如https://www.image-maps.com/

图像地图是解决这个特定问题的一个非常酷的解决方案!

【讨论】:

    【解决方案2】:

    这是&lt;img&gt; 标签的预期行为。他们总是有一个矩形的碰撞箱。

    有一个 &lt;map&gt; 标记可以提供您正在寻找的行为(经过一些配置),但这已经过时了。

    您需要使用 HTML5 的 &lt;canvas&gt; 或(不寒而栗)Flash 重新构想您的解决方案。

    哎呀,如果您想弄得一团糟,您甚至可以使用带有一个 onClick 处理程序的图像,该处理程序从 event 参数(提示:e.clientXe.clientY)中获取鼠标坐标。 :)

    【讨论】:

    • 嘿,停止复制! =)
    • @jlam55555 哈哈,相差 20 秒...但 &lt;map&gt;s 是老新闻了 - HTML5 画布是要走的路!
    • 是的,地图很旧。但我不知道如何使用&lt;canvas&gt;。你能举个例子吗?
    • &lt;canvas&gt; 可能是一个非常深入的话题 - rgraph 的博客有一个关于多边形和命中区域的不错的条目:rgraph.net/blog/2012/october/…
    • @fly:浏览器对命中区域的支持似乎相当差,至少如果developer.mozilla.org/en-US/docs/Web/API/… 是最新的。
    猜你喜欢
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    相关资源
    最近更新 更多