我正在尝试在div中设置背景图像,以便使用setTimer()每秒或更换一次;我设置它,它说我有
'Invalid left-hand side in assignment'
不确定我在做什么,这是错的。有人可以帮忙吗?
<html><body>
<div class="box">
<div id="b1"></div>
</div>
<input id = 'spin' type="button" value="Spin" onclick='changeIcons()' />
<script>
var arr = new Array();
arr[0] = '1.png';
arr[1] = '2.png';
arr[2] = '3.png';
var first = document.getElementById('b1');
function changeIcons(){
for(var spinIcons= 0; spinIcons < 10; spinIcons++){
arr.sort(function() {return 0.5 - Math.random()});
var v1 = setTimeout(function(){first.style.background-image= 'url(arr[0])'}, 1000);
}
}
</script>
</body>
</html>
这最终结束了工作,它有时间问题,我需要为背景图片制作一个有框架的位置,但它正在工作:
<div class="first"></div>
<script>
for(var i=0; i<11; i++){
$("div.first").slideUp(300).delay(100).fadeIn(400);
}
</script>
感谢T.J.CROWDER设置我直接!!!
答案 0 :(得分:3)
有两个问题。
导致你提到的错误的是:
// here ------v
var v1 = setTimeout(function(){first.style.background-image= 'url(arr[0])'}, 1000);
这使得引擎认为您正在尝试分配表达式(background - image
)的结果,该表达式在赋值的左侧无效。在JavaScript中,属性名称中不能包含破折号。您可以使用camelCase版本backgroundImage
代替。
另外,您始终将背景图像设置为字符串'url(arr[0])'
,而不是将arr[0]
中的值设置为字符串。您需要调整报价:
所以:
var v1 = setTimeout(function(){first.style.backgroundImage= "url(" + arr[0] + ")"}, 1000);
其他一些说明:
您在循环中设置了setTimeout
,因此您计划将其安排10次。但是那些10次将一个接一个地发生,一秒钟之后,他们都会做同样的事情:将背景图像设置为当时arr[0]
中的任何内容。你之前10次改变数组顺序这一事实没有任何区别,因为当你安排它时,该函数没有收到arr[0]
值的副本,它接收对数组的持久引用,它在运行时使用。更多:Closures are not complicated
对数组进行排序并使用索引0似乎是从数组中随机选取的一种相当低效的方法。