好吧,如果你檢查你的腳本控制檯(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