圆形图像叠加

时间:2009-02-03 21:43:19

标签: javascript css

我有一个圆圈形状的图像。

将圆圈分成3个相等的部分。

我有整个圈子的图像。

我有3张其他图片,每张图片只有一块圆圈,但颜色为绿色。

我必须做以下事情:

  1. 显示原始圆圈图像。

  2. 屏幕上有3个按钮,每个按钮链接到圆圈的3个部分。 单击时,它会将绿色图像覆盖在圆上。 因此,如果您单击所有3个按钮,则整个圆圈将为绿色。 如果您只点击了第一个按钮,则只有该圆圈的那一部分为绿色。

  3. 我该如何实现? 是否可以一次叠加2张图像?我必须在这里玩x和y定位吗? (当前绿色图像部分,如果将​​它们放在原始图像上,将与原始圆形图像完全一致。

3 个答案:

答案 0 :(得分:3)

这是一个直接JavaScript和jQuery的解决方案 直接的JavaScript使用按钮的DOM0 onclick处理程序,这是正常的,因为它们只触发一个事件。窗口的onload处理程序更是一个问题:每个文档只能有一个 正如您所见,jQuery解决方案要短得多,但您必须包含jQuery库。 $( function(){} )取代了窗口onload处理程序,但你可以拥有任意多个。

图像sector1.gif,sector2.gif和sector3.gif除了对它们可见的圆圈之外是透明的。你也可以使用.png,但是如果没有一些推文就不会在ie6中使用。

<!-- the markup -->
<div id="circle">
    <div id="sector1"></div>
    <div id="sector2"></div>
    <div id="sector3"></div>
</div>
<input type="button" id="button1" value="Sector 1">
<input type="button" id="button2" value="Sector 2">
<input type="button" id="button3" value="Sector 3">

_

/* the style */
#circle{
    width: 100px;
    height 100px;
    position: relative;
    background: url( images/circle.gif );
}

#sector1, #sector1, #sector1 {
    width: 100px;
    height 100px;
    top: 0;
    left: 0;
    position: absolute;
    display: none;
}
#sector1 {
    background: url( images/sector1.gif );
}
#sector2 {
    background: url( images/sector2.gif );
}
#sector2 {
    background: url( images/sector3.gif );
}

_

//basic javascript solution
window.onload = function() {
    // get references to the buttons
    var b1 = document.getElementById( 'button1' );
    var b2 = document.getElementById( 'button2' );
    var b3 = document.getElementById( 'button3' );

    // get references to the sectors
    var s1 = document.getElementById( 'button1' );
    var s2 = document.getElementById( 'button2' );
    var s3 = document.getElementById( 'button3' );

    // add onclick events to the buttons which display the sectors
    b1.onclick = function() { s1.style.display = 'block'; }
    b2.onclick = function() { s2.style.display = 'block'; }
    b3.onclick = function() { s3.style.display = 'block'; }
}


//jQuery solution
$(function() {
    $('#button1').click( function() { $('#sector1').show() } );
    $('#button2').click( function() { $('#sector2').show() } );
    $('#button3').click( function() { $('#sector3').show() } );
});

答案 1 :(得分:1)

对于非绿色的部分,带有部分圆的3个图像应该是透明的。然后可以始终覆盖所有4个图像,按钮可以更改堆叠顺序。那些“显示”将在实心圆圈的顶部,而其他的将在它下面。

答案 2 :(得分:0)

你也可以使用完整的图像作为div的背景,然后使用绿色,叠加或其他方法对其进行3次划分,然后只需切换叠加层的可见性或类别。

我不会说比上面更好或更差,但不同。