假设您有三个元素,全白或根本不应用颜色。如果单击/选择任何元素,它会变为红色,如果单击/选择任何两个元素,它们是红色和绿色。如果单击/选择所有三个元素,它们是红色、绿色、蓝色。现在,当第二次单击任何元素时,它会变回白色,但无论如何它们仍然需要遵循这些规则。
1 个元素 = 红色
2 元素 = 红色、绿色
3 元素 = 红、绿、蓝
到目前为止,在帮助下,我想出了这段代码,但无法弄清楚如何根据所需条件使事件做出反应。例如,如果所有三个都被单击并且我们单击以删除绿色,那么蓝色将需要为绿色。 jsFiddle 类示例
css
.container {
background-color: #ffffff;
border: 1px solid blue;
border-radius: 10px;
width: 100px;
height: 50px;
}
.red { background-color: #ff0000; }
.green { background-color: #00ff00; }
.blue { background-color: #0000ff; }
元素
<div class='container' id='1' style='margin: 150px 0 0 75px; float: left;'></div>
<div class='container' id='2' style='margin: 150px 0 0 175px; float: left;'></div>
<div class='container' id='3' style='margin: 150px 0 0 220px; float: left;'></div>
Javascript
window.onload=function () {
// set color classes into an array
var classes = ["red", "green", "blue"];
var nextClass = 0;
var element = document.querySelectorAll( ".container" );
// loop through container class elements one at a time onclick run changeClass
for ( var i = 0; i < element.length; i++ )
{
element[i].addEventListener( "click", changeClass );
}
function changeClass ( eventListener )
{
var element = eventListener.currentTarget;
var currentClass = hasClass( element, classes );
if ( currentClass )
{
element.classList.remove( currentClass )
}
else
{
element.classList.add( classes[nextClass] );
nextClass = (nextClass + 1 ) % classes.length;
}
}//end function
function hasClass( element, classes )
{
// loop through classes array
for ( var i = 0; i < classes.length; i++ )
{
// onclick if all classes applied return currentClass
if ( element.classList.contains( classes[i] ) )
{
return classes[i];
}
}
}// end function
}//end onload
有没有办法根据需要的条件加载这些类?
也可以使用 加载内联颜色element.style.backgroundColor
,但仍然无济于事。最后一个帮助我的人非常有才华,我希望得到同样的帮助:)......到目前为止已经学到了很多东西,但仍然卡住了,接近但无法做到正确。
这是我想出的代码: 实际查看我更新的代码 jsFiddle
window.onload=function () {
var classes = ["red", "green", "blue"];
var nextClass = 0;
var element = document.querySelectorAll( ".container" );
for ( var i = 0; i < element.length; i++ )
{
element[i].addEventListener( "click", changeClass );
}
function changeClass ( eventListener )
{
var elementG = document.querySelector( '.green' );
var elementB = document.querySelector( '.blue' );
var elementR = document.querySelector( '.red' );
var element = eventListener.currentTarget;
var currentClass = hasClass( element, classes );
var red = removeRed( element, classes );
var green = removeGreen( element, classes );
if ( currentClass )
{
element.classList.remove( currentClass )
nextClass--;
if (nextClass < 0)
{
nextClass += classes.length;
}
}
else
{
element.classList.add( classes[nextClass] );
nextClass = (nextClass + 1 ) % classes.length;
}
if ( red && elementB != null )
{
elementB.classList.add( 'red' );
elementB.classList.remove( 'blue' );
}
else if ( red && elementB == null && elementG != null)
{
elementG.classList.add( 'red' );
elementG.classList.remove( 'green' )
}
if ( green && elementB != null )
{
elementB.classList.add( 'green' );
elementB.classList.remove( 'blue' );
}
}//end function
function hasClass( element, classes )
{
// loop through classes array
for ( var i = 0; i < classes.length; i++ )
{
// if all three classes
if ( element.classList.contains( classes[i] ) )
{
return classes[i];
}
}
}// end function
function removeRed( element, classes )
{
if ( element.classList.contains( classes[0] ) )
{
return classes[0];
}
}// end function
function removeGreen( element, classes )
{
if ( element.classList.contains( classes[1] ) )
{
return classes[1]
}
}
}//end onload