好吧,如果你检查你的脚本控制台(F12 是大多数浏览器),你会看到functionlist[array[x]]()
抛出一个类似的错误:
对象没有方法“接吻”
这是因为array[x]
等于“smooch”,并且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()
检查更新。