2017-04-04 110 views
0

我想做一个函数,当你点击其中一个骰子元素时,它将重新掷骰子,并且它的左边的每个元素都重新滚动。Javascript数组随机化元素到选定的元素

目前我已经有了它,当你加载页面,骰子编号1-6,当你点击一个骰子,它重新卷。试图找出如何使所选元素更改左侧的所有元素都有点麻烦。

这是我的。

(function() { 
    var dieElements; 

    dieElements = Array.prototype.slice.call(document.querySelectorAll('#dice div')); 

    dieElements.forEach(function (dieElement, whichDie) { 

    dieElement.textContent = whichDie + 1; 

    dieElement.addEventListener('click', function() { 
     dieElement.textContent = Math.floor(Math.random() * 6) + 1; 
    }, false); 
    }); 
}()); 

继承人的HTML

<fieldset id="dice-area"> 
<legend>Dice</legend> 
<div class="box-of-dice" id="dice"> 
    <div></div> 
    <div></div> 
    <div></div> 
    <div></div> 
    <div></div> 
    <div></div> 
</div> 
</fieldset> 
+0

你可以张贴一些HTML? –

回答

2

您已经拥有了模具的指数点击并被困在一个封闭的所有骰子的阵列。您只需要使用它们(轻松)是这样的:

(function() { 
 
    var dieElements; 
 

 
    dieElements = Array.prototype.slice.call(document.querySelectorAll('#dice div')); 
 

 
    dieElements.forEach(function(dieElement, whichDie) { 
 
    dieElement.textContent = whichDie + 1; 
 

 
    dieElement.addEventListener('click', function() {     // when this die is clicked 
 
     for(var i = 0; i <= whichDie; i++)         // loop over all the elements in dieElements array from index 0 to index whichDie (included) 
 
     dieElements[i].textContent = Math.floor(Math.random() * 6) + 1; // change their textContent 
 
    }, false); 
 
    }); 
 
}());
#dice div { 
 
    display: inline-block; 
 
    border: 1px solid black; 
 
    padding: 5px; 
 
    margin: 5px; 
 
    width: 30px; 
 
    height: 30px; 
 
    text-align: center; 
 
    cursor: pointer; 
 
}
<div id="dice"> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
</div>

+0

删除我的答案,因为这是一个更直接的方法。 –

+0

@ RobM.Yours也很好,因为您将逻辑分为不同的功能。我只是尽量保持它尽可能接近OP的容易程度,以显示它是多么容易! –