【发布时间】:2016-10-13 16:37:32
【问题描述】:
我正在尝试编写一个脚本来更改 3 个图像的 z-index。基本上,脚本应该针对当前图像并在下一张图像上应用更高的 z-index,就像一种轮播,但使用 z-index 而不是活动类。挑战是在特定时间间隔后设置 z-index。问题是显示第一张图像,然后显示最后一张。这是我的代码:
HTML:
<div class="changingimages">
<img src="#" data-time="3000" width="100%" class="alternateimage alternateimage1">
<img src="#" data-time="2000" width="100%" class="alternateimage alternateimage2">
<img src="#" data-time="4000" width="100%" class="alternateimage alternateimage3">
</div>
jQuery 脚本
<script type="text/javascript">
jQuery(document).ready(function(){
var changeImg = function(i, time, currentImg) {
setTimeout(function(){
jQuery(currentImg).next().css("z-index", i);
}, time);
};
var numberOfChilds = jQuery(".changingimages").children().length;
var currentIndexClass;
var currentImg;
var time;
for (var i=1; i<=numberOfChilds; i++) {
currentIndexClass = '.alternateimage' + i;
currentImg = jQuery(currentIndexClass);
time = jQuery(currentIndexClass).attr("data-time");
changeImg(i, time, currentImg);
}
});
我认为循环内的闭包存在一些问题,但不确定!
【问题讨论】:
-
什么您遇到的问题是什么?什么不起作用?
-
@DavinTryon:不,仔细看一下代码。
-
@M.Simon 这是预期的,是的:两秒钟内,没有 z-index;然后将 2 的 z-index 应用于最后一张图像(然后在 3 秒后,将 z-index 1 应用于第二张图像,并在 4 秒后将 z-index 3 应用于无图像)。代码实际上应该做什么?也许您想删除
.next()? -
您是否真的希望您的
data-time属性不按顺序排列?我们不知道您是打算从初始函数调用还是从之前的 setTimeout 开始持续时间 -
setTimeout不会暂停脚本。实际上,2000ms计时器将首先执行,然后是3000ms计时器,最后是4000ms计时器。所以最后一个发生在你的循环后总共 4 秒,而不是 9 秒。呼叫的顺序无关紧要。虽然下面的答案提供了一个解决方案,但我倾向于只调用第一个,然后从setTimeout中进行递归调用。
标签: javascript jquery for-loop settimeout