今天在用js做一个简单的抽奖效果时显示有问题,代码在下面,希望大神指点
抽奖
一等奖
二等奖
三等奖
谢谢参与
点击抽奖
一等奖
三等奖
二等奖
谢谢参与
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
你想要的是什么效果?外围一圈奖项转圈依次亮起,亮完一圈之后结束吗?
补充答案:
首先这段代码肯定是实现不了你要的效果。
你设置了一个数组储存对应dom。
然后新建了一个函数_loop,循环了一遍数组,对各种情况进行了判断。(第二种情况也应该是<=15,否则最后一项永远不会active)。
最后用了一个setTimeout定时器,效果是500ms后执行_loop,而_loop就是一个瞬间完成的循环,最后i=14时active了arr[14]。
你自己实际写的时候肯定还会遇到很多问题,最有可能的是把setTimeout放到for循环中之后,发现i没法传递到计时器里,这就是个闭包或者说块状作用域的问题,相关资料很多,看完答案一定要搞懂。
用闭包解决:
闭包解决的也是块状作用域的问题,在es6标准下,可以用更语义化的let解决:
在你的代码的基础上改了一下,你自己对比一下修改的地方吧。;)
总体来说代码还是有点不忍直视的,加油学习吧。
使用setTimeout只会被调用一次,想做成动画效果需要重复调用。