我很难问这个,因为这是一个非常简单的问题。我希望cycleBackground函数在changeBackground("#firstbg", img.src)
和changeBackground("#secondbg", img.src)
cycleBackground = ()->
img = new Image()
img.src = '/assets/'+Math.floor(Math.random()*50)+'.jpg)'
img.onLoad = ()->
changeBackground("#firstbg", img.src)
我正打算创建一个名为“selected”的全局var 并使其等于“#firstbg”,如果选择“#firstbg”,则将其更改为“#secondbg”,以便每次调用cycleBackground时,它都会更改尚未更改的元素的背景。我知道这是糟糕的编码实践,什么是更好的解决方案?
答案 0 :(得分:2)
只需在与函数相同的范围内创建一个新变量; cycleBackground
或changeBackground
,无论哪个。这完全没问题。 CoffeeScript将整个编译文件包装在IIFE中,除非您将它们显式附加到全局对象(例如window.selected = ...
),否则不会引入任何全局变量。
selected = 'first'
cycleBackground = ()->
img = new Image()
img.src = '/assets/'+Math.floor(Math.random()*50)+'.jpg)'
img.onLoad = ()->
selected = (if selected == 'first' then 'second' else 'first')
changeBackground("##{selected}bg", img.src)
答案 1 :(得分:0)
您可以引入一个变量x
来保存您当前正在查看的图像,并执行以下操作:
x = 0;
img.onLoad = ()->
x = Math.abs(x-1); # toggle
changeBackground("#" + ['firstbg','secondbg'][x], img.src);
注意:我不知道x
会在哪里生活,因为我对CoffeeScript一无所知。