javascript - 自动随机播放数组 5 次
问题描述
我已经编写了 JavaScript 函数,以随机播放一组 div onClick。
// Function to shuffle 3 divs
shuffle = () => {
const shuffled = this.state.divs.sort(() => Math.random() - .50);
this.setState([...shuffled]);
};
// Button as an FYI
<button onClick={this.shuffle} className="has-text-black">shuffle hats</button>
这工作得很好,每次我点击按钮时都会随机化。
但是,我希望 div 自动排序/随机播放 5 次,onClick。
(IE = 我不想点击 5 次,洗牌 5 次)。
这样做的最佳方法是什么?
(我已经搜索过,但没有找到任何可以重复对元素进行改组的内容)。
我想过使用异步等待/设置超时,重复this.state.divs.sort(() => Math.random() - .50)
5次?
更新:
要添加上下文,这里是一个代码框... https://codesandbox.io/s/distracted-shape-ifsiv
当我单击随机播放按钮时,您可以看到帽子只交换一次位置。不是5次。
解决方案
这是使用javascript的一种可行方法。
hats
对象被洗牌 5 次,第二次转换时间为 200 毫秒。
当然很简单,对象是用来扩展的!
let hats = [
{content: `<h6>1</h6>`},
{content: `<h3>2</h3>`},
{content: `<h1>3</h1>`},
{content: `<h2>4</h2>`},
{content: `<h4>5</h4>`}
];
let timer;
function loop5(){
let i = 0
clearInterval(timer)
timer = setInterval(function(){
shuffle()
if (i >= 5){
clearInterval(timer)
}
i++
}, 200)
}
function shuffle(){
hats.sort(() => Math.random() - 0.5)
out.innerHTML = hats.map(e => e.content).join("")
}
div {display: flex; font-size: xx-large }
<button onclick="loop5()">shuffle hats</button>
<div id="out"></div>
推荐阅读
- scala - 在具有协变类型的 Scala 参数化类中实现方法
- python - 获取相关模型的数量
- c++ - 关于包含新课程的基本 cmake 问题
- javascript - Google Maps API - 基于复选框状态的 loadGeoJson
- java - Recyclerview 在“搜索”或“过滤”之后不是“排序”
- r - 使用 cpp 代码编译和链接 R 包时出现奇怪的 SHLIB 行为
- asp.net-core - ASP.NET Core 中每页的权限
- qt - Qt - 如何使用带参数的 SQL SELECT COUNT?
- python - scrapy 和 selenium 似乎相互干预
- ios - 组合不同的 UIView 类