我有以下脚本设置。我想更好地重写为每次点击更具体分配功能的脚本EG. Click = 3 does so and so, and Click = 4, does this and that.
编辑:例如,您可以在“http://bit.ly/10BW89N”通知中查看我的实时样本,按顺序点击完成点击。我添加了一个简单的“警报”来尝试和测试它,点击和功能仍然没有按正确顺序触发。
$(document).ready(function () {
var a1_Events = [function1, function2, function3, function5, function6, function7, function8],
a1_c = 0;
function function1() {
alert('SHAKING!');
}
function function2() {
alert('BZZZZZZZZZZZ!');
}
function function3() {
$("#area1").hide();
$("#area2").show();
}
function function5() {
alert('YES!');
}
function function6() {
$("#bg_div").hide(0).delay(1500).show(0);
$("#bg_skew").show(0).delay(1500).hide(0);
}
function function7() {
alert('NO!');
}
function function8() {
$("#area1").hide(0).delay(1500).show(0);
$("#area2").hide(0).delay(1500).show(0);
$("#sound1").show(0).delay(1500).hide(0);
}
$('#area1').click(function () {
a1_Events[a1_c++ % a1_Events.length]();
});
$("#area2").click(function () {
$("#area1").show();
$("#area2").hide();
});
});
..有什么建议吗?
答案 0 :(得分:2)
这样的事情怎么样?
$(document).ready(function () {
var a1_c = 0, a1_Events = {
0: function() {
alert('SHAKING!');
},
1: function() {
alert('BZZZZZZZZZZZ!');
},
2: function() {
$("#area1").hide();
$("#area2").show();
},
3: function() {
alert('YES!');
},
4: function() {
$("#bg_div").hide(0).delay(1500).show(0);
$("#bg_skew").show(0).delay(1500).hide(0);
},
5: function() {
alert('NO!');
},
6: function() {
$("#area1").hide(0).delay(1500).show(0);
$("#area2").hide(0).delay(1500).show(0);
$("#sound1").show(0).delay(1500).hide(0);
}
}, a1_EventCount = Object.keys(a1_Events).length; // or hard-code 7.
$('#area1').click(function () {
a1_Events[a1_c++ % a1_EventCount]();
});
$("#area2").click(function () {
$("#area1").show();
$("#area2").hide();
});
});
如果您所处的环境没有Object.keys
并且您不想对其进行填充,则可以简单地对事件计数进行硬编码,但如果您添加或删除事件,则必须记住更改它
这与索引访问的数组非常相似,但允许您明确地将特定函数分配给特定值。
答案 1 :(得分:1)
您可以将JavaScript switch
语句与某些jQuery函数结合使用,以简化代码并执行您想要的操作:
//global userClicks variable holds count of user clicks
var userClicks = 0;
//Standard jQuery click function to catch the user clicks
$('#area1').click(function () {
//code to increment clicks here...
userClicks+=1;
//call the below function with the switch statement and execution code
callSwitch(userClicks);
});
//the JavaScript function which takes the number of clicks as a parameter
function callSwitch(numClicks){
//switch statement based on parameter passed to enclosing function
switch (numClicks)
{
case 1:
alert('SHAKING!');
break;
case 2:
alert('BZZZZZZZZZZZ!');
break;
case 3:
$("#area1").hide();
$("#area2").show();
break;
case 5:
alert('YES!');
break;
case 6:
$("#bg_div").hide(0).delay(1500).show(0);
$("#bg_skew").show(0).delay(1500).hide(0);
break;
case 7:
alert('NO!');
break;
case 8:
$("#area1").hide(0).delay(1500).show(0);
$("#area2").hide(0).delay(1500).show(0);
$("#sound1").show(0).delay(1500).hide(0);
break;
}
}
Here is my JSFiddle link有关此示例的实现。
您仍然可以像在实现中一样保持函数分离,并根据需要从每个条件case
块中调用它们,如下所示:
switch (numClicks)
{
case 1:
function1();
break;
case 2:
function2();
break;
case 3:
function3();
break;
}
希望有所帮助。