Javascript 慢慢停止随机化

Javascript 慢慢停止随机化,javascript,jquery,html,Javascript,Jquery,Html,我有一个不断循环的名字列表,并呈现到h1标签#randomName。按下#pickName按钮时,会从名称列表中随机选择一个名称(然后删除) 就我想做的而言,这很好,但我希望能够做到的是,当点击#pickName链接时,让屏幕上循环的名称列表慢慢变慢(比如3秒),然后确定其中一个名称(并在警报中使用) 常量名称=数组('Craig O Mahony','Nick Farmer','Stuart Lister','Lee Rogers','Mick O Connor','Paul Alexand

我有一个不断循环的名字列表,并呈现到
h1
标签
#randomName
。按下
#pickName
按钮时,会从名称列表中随机选择一个名称(然后删除)

就我想做的而言,这很好,但我希望能够做到的是,当点击
#pickName
链接时,让屏幕上循环的名称列表慢慢变慢(比如3秒),然后确定其中一个名称(并在警报中使用)

常量名称=数组('Craig O Mahony','Nick Farmer','Stuart Lister','Lee Rogers','Mick O Connor','Paul Alexander','Robin Allison','Neil Bellion','Tom Tim/Mitch','Steve Casey','Ian Condley','Ken Dovey','Dave Field James Field Steve Fuller','Jim Harrison','Ray Harrison','Mick Hennessey','John Hodges','Shaun Hopper','Phil Large'“,”史蒂夫·洛“,”内文·麦克德莫特“,”托尼·麦克唐纳“,”史蒂夫·奈“,”保罗·里德“,”韦恩·罗杰斯“,”皮特·西尔斯“,”皮特·史密斯“,”戴夫·拉弗特“,”罗布·怀亚特“,);
常量h1$=$('#randomName');
var currentMatch=“匹配”;
var计数器=1;
设idx=0;
设置间隔(()=>{
h1$.text(名称[idx++%names.length]);
}, 100);
$(“#pickName”)。在('click',function()上{
const name=names[Math.floor(Math.random()*names.length)];
警报(名称);
名称.拼接($.inArray(名称,名称),1);
//$('#'+name).remove();
});

平局球员

您可以通过将
slow=100
time<1000
更改为您喜欢的值来调整此效果,您甚至可以在
显示中操纵
slow

常量名称=数组('Craig O Mahony','Nick Farmer','Stuart Lister','Lee Rogers','Mick O Connor','Paul Alexander','Robin Allison','Neil Bellion','Tom Tim/Mitch','Steve Casey','Ian Condley','Ken Dovey','Dave Field James Field Steve Fuller','Jim Harrison','Ray Harrison','Mick Hennessey','John Hodges','Shaun Hopper','Phil Large'“,”史蒂夫·洛“,”内文·麦克德莫特“,”托尼·麦克唐纳“,”史蒂夫·奈“,”保罗·里德“,”韦恩·罗杰斯“,”皮特·西尔斯“,”皮特·史密斯“,”戴夫·拉弗特“,”罗布·怀亚特“,);
常量h1$=$('#randomName');
var currentMatch=“匹配”;
var计数器=1;
var时间=100;
设idx=0;
var慢=0;
$(“#pickName”)。在('click',function()上{
慢=25;
});
函数显示(){
如果(时间<500){
h1$.text(名称[idx++%names.length]);
慢*=2;
时间+=慢;
设置超时(显示,时间);
}否则{
const name=h1$.text();
警报(名称);
}
}
display();

平局球员

要实现这一点,您可以在单击按钮时清除间隔,然后递归创建一个新的超时,该超时最长持续3秒,最后选择在该时间段结束时显示在
h1
中的名称,如下所示:

常量名称=数组('Craig O Mahony','Nick Farmer','Stuart Lister','Lee Rogers','Mick O Connor','Paul Alexander','Robin Allison','Neil Bellion','Tom Tim/Mitch','Steve Casey','Ian Condley','Ken Dovey','Dave Field James Field Steve Fuller','Jim Harrison','Ray Harrison','Mick Hennessey','John Hodges','Shaun Hopper','Phil Large'“,”史蒂夫·洛“,”内文·麦克德莫特“,”托尼·麦克唐纳“,”史蒂夫·奈“,”保罗·里德“,”韦恩·罗杰斯“,”皮特·西尔斯“,”皮特·史密斯“,”戴夫·拉弗特“,”罗布·怀亚特“,);
常量$h1=$(“#随机名称”);
设idx=0;
让backoffMs=75;
var interval=setInterval(()=>{
$h1.text(名称[idx++%names.length]);
}, 100);
$(“#pickName”)。在('click',function()上{
$(this.off();
间隔时间;
reduceInterval(新日期(),100);
});
功能缩减区间(启动、延迟){
设置超时(()=>{
$h1.text(名称[idx++%names.length]);
var dif=start.getTime()-new Date().getTime();
var secs=数学绝对值(dif/1000);
如果(秒<3){
缩短间隔(启动、延迟+后退);
}否则{
getName();
}
},延迟+退避);
}
函数getName(){
log($h1.text());
}
h1{
字号:4em;
填充顶部:15px;
}

平局球员

这里有一个通用解决方案,它使用
setTimeout
setInterval
定义了
setDeceleratingInterval

常量名称=[《克雷格·奥马奥尼》,《尼克·法默》,《斯图尔特·李斯特》,《李·罗杰斯》,《米克·奥康纳》,《保罗·亚历山大》,《罗宾·艾利森》,《尼尔·贝利恩》,《汤姆/蒂姆/米奇》,《史蒂夫·凯西》,《伊恩·康德利》,《肯·多维》,《托尼·多伊尔》,《戴夫·菲尔德》,《詹姆斯·菲尔德》,《史蒂夫·富勒》,《吉姆·哈里森》,《雷·哈里森》,《米克·亨尼西》,《约翰·霍奇斯》,《肖恩·霍珀》,《菲尔·拉格》,《史蒂夫·洛文》,《内文》麦克德莫特’、‘托尼·麦克唐纳’、‘史蒂夫·奈’、‘保罗·里德’、‘韦恩·罗杰斯’、‘皮特·西尔斯’、‘皮特·史密斯’、‘戴夫·拉弗特’、‘罗伯·怀亚特’;
常量h1$=$('#randomName');
设idx=0;
const randomizeH1=()=>h1$.text(名称[++idx%names.length]);
让定时器=设置间隔(随机数为1100);
常量showName=()=>{
常量名称=名称[idx%names.length];
警报(名称);
名称.接头(idx,1);
定时器=设置间隔(随机数为1100);
};
函数设置减速间期(cb、cb2、dtInit、系数、总计){
剩余=总计;
设dt=dtInit;
常量内部计时器=()=>{
剩余-=dt;
dt*=系数;
如果(剩余>=0){
设置超时(内部定时器,dt);
cb();
}否则{
cb2();
}
};
内部定时器();
}
$(“#pickName”)。在('单击',()=>{
清除间隔(计时器);
setDeceleratingInterval(随机数为1,显示名称为100,1.1,3000);
});


Draw Player
减速需要更多的工作,但是要让它选择当前屏幕上的播放器,难道你不能只获取
#randomName
标题的当前
文本
值,然后选择/删除该标题,而不是随机进行吗?我可能可以,是的,这是我真正想要的减速部分s代表杯赛抽签,将在b上显示