好吧,如果你检查你的脚本控制台(F12为大多数的浏览器),你会看到functionlist[array[x]]()
抛出一个错误是这样的:
Object has no method "smooch"
这是因为array[x]
等于“接吻”,而且functionlist["smooch"]
是不确定的,所以它的错误了它,它让你的x++
之前。
其他的事情在这个代码怎么回事:
- x被宣告你的函数里面,因此它在使用它的时间永远是0。
- 即使它是在你的函数之外声明的,当你增加它的时候,它会用完你的数组中的项目。你需要在这里使用一个模数运算符。
- 您没有引用具有$ .fn.transition定义的.js文件,因此您的转换调用也会出错。
flip
和flop
都具有相同的rotateY
值,所以一旦“翻转”,它不会“翻牌”
下面是一些可能做你要找的事:http://jsfiddle.net/g5mJd/3/
和更新的代码:
var array = ["smooch", "jab", "flip"];
var move = "flip";
var x = 0;
var functionlist = {
flip: function() {
$("#block").transition({
perspective: '0px',
rotateY: '180deg'
}, 1000);
},
flop: function() {
$("#block").transition({
perspective: '0px',
rotateY: '0deg'
}, 100);
}
};
$("#go").click(function() {
var functionName = (x % 2 == 0) ? 'flip' : 'flop';
var fn = functionlist[functionName];
if($.isFunction(fn)) {
fn();
}
var say = array[x % array.length];
$('p').append(say + ' ');
x++;
});
编辑:已更新$.isFunction()
检查。
'var x = 0' - 您每次点击时都将“x”重新声明为零。 – ahren
我不认为'x'在第二种情况下增加了... –
我的不好,但是如果我在全局空间中定义x = 0,我的问题仍然存在。 – genuinelycurious