不规则可点击形状的图案

时间:2017-06-01 08:23:16

标签: javascript html css css3 svg

我需要制作许多非矩形形状的模式。每个形状必须是互动的,并在点击时显示图像 要求是拍摄彩色玻璃的图像并将其转换为填充图像的网页。每个窗格必须是可点击的,类似于您在教堂中看到的那些,但在第一次加载时,每个形状都是黑白的,点击它会显示玻璃的颜色。

我想这个解决方案将包含两个部分,整个彩色玻璃图像的彩色版本和它上面的黑白版本。然后不知何故,点击时每个小玻璃窗都需要隐藏它下面的黑白部分,以显示下面的彩色图像。

我不知道最好的解决办法是什么,并且找不到任何有用的东西来帮助做一些与形状和随机互动区域类似的东西。我在结果下方插入了一个示例,想象每个玻璃部分都是可点击的,点击后会显示颜色。

白线只表示每个窗格的行为独立于其他窗格。

Random shaped interactive, clackable areas

4 个答案:

答案 0 :(得分:86)

要制作不规则可点击多边形的模式,您可以使用内联 SVG

它允许您设计任何可点击的形状并使其响应。

以下是您可以使用悬停和焦点状态来使形状交互的示例:

svg {
  display:block;
  width:40%; height:auto;
  margin:0 auto;
}
polygon {  
  fill:#ccc;
  stroke:#fff; stroke-width:0.3;
  transition: fill .15s;
}
a:hover .teal { fill:teal; }
a:hover .pink { fill:pink; }
a:focus .teal, 
a:focus .pink { fill:orange; }
<svg viewbox="0 0 20 19">
  <a xlink:href="#"><polygon class="teal" points="0 0 10 5 8 10 0 5" /></a>
  <a xlink:href="#"><polygon class="pink" points="0 0 10 5 15 0" /></a>
  <a xlink:href="#"><polygon class="teal" points="0 5 8 10 0 15" /></a>
  <a xlink:href="#"><polygon class="teal" points="15 0 10 5 20 19" /></a>
  <a xlink:href="#"><polygon class="pink" points="20 19 10 5 8 10" /></a>
  <a xlink:href="#"><polygon class="teal" points="20 19 8 10 0 15 8 13" /></a>
  <a xlink:href="#"><polygon class="pink" points="20 19 0 19 0 15 8 13" /></a>
  <a xlink:href="#"><polygon class="pink" points="15 0 20 19 20 20 20 0" /></a>
  <a xlink:href="#"><polygon class="teal" points="20 17 18 16 16 17 17 20 20 20" /></a>
</svg>

多边形元素仅允许多边形。如果您的目标是制作弯曲的形状,则需要将path元素与curve commands一起使用。

答案 1 :(得分:9)

图像区域地图当然可以帮到你。

查看this网站,这是一个非常方便的工具!

实施例

<img src="url/to/your/image.jpg" alt="" usemap="#Map" />
<map name="Map" id="Map">
    <area alt="" title="" href="LINK1" shape="poly" coords="380,163,448,127,515,163,457,205" />
    <area alt="" title="" href="LINK2" shape="poly" coords="140,13,48,1,55,13,47,12" />
</map>

基本上,您可以为图像的某些部分指定具有不同链接的不同区域。它更容易做而不是解释它! :)

答案 2 :(得分:2)

这是一项漫长的工作,但是,这可以帮助您:http://imagemap-generator.dariodomi.de/

&#13;
&#13;
function helloWorld(area) {
  console.log('You\'ve clicked the right part') 
}
&#13;
#container { position: relative; }
#info { 
  position: absolute;
  bottom: 90px;
  left: 85px;
  background: yellow;
  display: inline-block;
}
&#13;
<section id="container">
<img src="https://i.stack.imgur.com/4KmlR.jpg" alt="" usemap="#Map" />
<map name="Map" id="Map">
    <area alt="" title="" href="javascript:helloWorld()" shape="poly" coords="66,282,73,284,79,303,78,320,49,328,48,317" />
    [...]
</map>

<span id="info">&lt;== click here</span>
</section>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您好像在寻找<map> - tag

这只会创建要点击的矩形区域。但是,您可以使用javascript的onclick方法检查鼠标是否在某个区域。这样,您还可以检查圆形区域,三角形区域或基本上任何形状的区域。