作者Qiqi (泼泼)
看板Ajax
标题[问题] 如何防止使用者乱点?
时间Sun Mar 25 10:24:54 2012
我做了一个选单
点了之後会有背景淡入淡出
同时也淡入一个视窗框,内容用load来的
load後再用if else来判断是否此页需要用after加入其他tag
但若使用者乱点,动画就会乱跑
目前解法是在动画前先加个stop。 #obj.stop().fadeIn();
不知这种方法是否正确。
但load+after我就解不开了
譬如 load(123.html) --> <div>123</div>
after('<img />') --> <div>123</div><img />
但若乱点,就会有重复after的问题 --> <div>123</div><img /><img />
这该怎麽避免?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.252.123.131
1F:推 mrbigmouth:在click function最前方加判断式 只要还有动画进行中 03/25 10:57
2F:→ mrbigmouth:就return 03/25 10:57
不好意思,我能力不太够,看不懂。 可以写个范例吗?
我目前大概是这样:
$("#menu").click({
var idx = $(this).index();
$("#info").load("view/"+idx+".html,function({
if( idx == 6 ){
$("#info").after("<img />");
}
}));
})
乱点的话会变得像这样:
<section id="info">
<div>This is load html</div>
<img />
<img /> <--乱点多出来的tag
</sectino>
※ 编辑: Qiqi 来自: 114.41.106.23 (03/26 19:40)
3F:推 kerash:加个 flag, 例如 click 前判断flag==false执行 true就跳过 03/26 20:07
4F:→ kerash:然後在 click 事件结束後把 flag reset 03/26 20:08
var clicked = false;
$("#menu").click({
clicked = true;
var idx = $(this).index();
$("#info").load("view/"+idx+".html,function({
if( idx == 6 && clicked == true ){
$("#info").after("<img />");
clicked = false;
}
}));
})
类似这样吗?
※ 编辑: Qiqi 来自: 114.41.106.23 (03/26 20:17)
5F:推 kerash:大致上是如此,不过 load 中的 if 不用特地加 click==true 03/26 20:33
6F:→ kerash:把 reset 放在 if 外面就可以了 03/26 20:34
7F:→ kerash:否则当你 idx 不等於 6 时就会因为 flag = false 而无反应 03/26 20:34
8F:→ kerash:另外在 click 後的第一步先判断 if(click==true) 再执行 03/26 20:35
再修一次,把clicked改flag好了,不然会把click跟clicked搞混
var flag = true;
$("#menu").click({
if(flag){
flag = false;
var idx = $(this).index();
$("#info").load("view/"+idx+".html,function({
if( idx == 6){
$("#info").after("<img />");
}
}));
flag = true;
}
})
第一步先if(flag) 是因为if以外就算只有 a=1 ,被乱点还是会去跑
虽然不影响程式的结果,但会吃资源,是吗?
※ 编辑: Qiqi 来自: 114.41.105.162 (03/26 21:50)
9F:推 kerash:如果不先if的话,就一样会执行load功能,怕会有错 03/26 21:58
10F:→ kerash:因为我不知道你的 load 会是甚麽东西,但这样会正确点 03/26 21:58
11F:→ Qiqi:谢谢 03/27 19:32