这段代码应该通过淡化最顶层的元素直到只有第一个元素可见,然后淡入最顶层来从堆叠的列表元素中制作幻灯片(我注释掉了 CSS,以便我可以看到发生了什么)元素和其余部分并重新开始。如果我将脚本放在 <body>
中我的内容下方并扔掉 $(function() {
它工作得很好,但在 <head>
什么都没发生。昨天写的,今天还是看不出有什么错误,所以贴在这里。
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
ul {
position: relative;
}
ul li {
/*position: absolute;
left: 0;
top: 0;*/
}
</style>
<script src="jquery-1.5.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
var i = 0;
var count = $('ul li').size();
function fade() {
if (i < count-1) {
$('ul li:nth-child('+(count-i)+')').fadeOut(300);
i++;
} else {
$('ul li:nth-child('+count+')').fadeIn(300, function(){$('ul li').show();});
i = 0;
}
}
$('button').click(function() {
setInterval('fade()', 1000);
});
});
</script>
</head>
<body>
<button>Slideshow GO!</button>
<ul id="slider">
<li><img src="1.jpg" /></li>
<li><img src="2.jpg" /></li>
<li><img src="3.jpg" /></li>
<li><img src="4.jpg" /></li>
</ul>
</body>
</html>
谢谢
最佳答案
不同之处在于,将代码包装在 $(function () {})
中会导致 fade
函数在本地 声明,并且不是全局。 setTimeout
在全局范围内计算 'fade()'
,因此找不到函数。
无论如何给 setTimeout
一个字符串通常是不好的做法,所以用指向函数的指针替换它:
setTimeout(fade, 1000);
我前不久回答过类似的问题here ,但该问题还依赖于从 setTimeout 中访问局部变量。
关于javascript - jQuery 在 <head> 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5229739/