作者TonyQ (沉默是金。)
看板Ajax
标题Re: [闲聊] JQuery的callback与queue
时间Fri Aug 27 23:46:22 2010
※ 引述《JYHuang (夏天到了,冷不起来了说)》之铭言:
: 这几天在写一个grid的功能,遇到了一点小问题。
: 就拿出来讨论一下。
: ╔═╦═╦═╗
: th ║1 ║2 ║3 ║
: ╟─╫─╫─╢
: td ├─┼─┼─┤
: td ├─┼─┼─┤
: td └─┴─┴─┘
: 简单的说,我要做的动作大至上是click th[n]时,
: th跟每列的第n个td都做fadeOut的动作
: 然後再用test()计算table的宽度
: 首先
: $("thead th").click(function(){
: var index =$(this).index();
: $("td:eq("+index+")","tr").fadeOut('slow');
: test();
: });
: 当然..事情没憨人想的这麽简单
: javascript的指令是不会停下来等动作执行完再执行下一行的
: 所以fadeOut这种有时间轴的动作会跟test()一起被执行
: 这样一来计算出来的宽度就有误了。
: 所以接着试试看callback
: $("thead th").click(function(){
: var index =$(this).index();
: $("td:eq("+index+")","tr").fadeOut('slow',test);
: });
: 不过问题又来了..
: 要执行的对像是一个集合..
: 所以callback会被每一个子元件重复的执行...
: 此时想到了JQuery还有一个queue的功能..
: 不过看了半天官方API文件还是一头雾水..只好慢慢踹..
: jQuery.queue( $("td:eq("+index+")","tr")[0], "fx", function () {
: test();
: jQuery.dequeue( this );
: });
你的问题其实很单纯,
你想在一整个 col (有k个td + 1th ) fadeOut後,执行一些事情。
基本上因为每个 td/ th 都会有自己不同的 fx queue ,
(这个复杂度是来自於context)
所以 queue 我个人会觉得对你没啥用,你很难确保哪一个会最晚执行完,
这要看 jQuery 实做 fadeIn / fadeOut 的timer,
基本上timer 这种事情很难掌握先来後到,变数很大。
除非你可以忍受 k个 td+1th 「一个一个执行 fadeOut」後再做你要做的事情。
那基本上你可以把 fadeIn/Out 这件事写在某个第三方的context queue里。
所以,我就会推荐你一个很蠢,但是保证有效的方案。
$("thead th").click(function(){
var index =$(this).index();
var counter = 0 ;
var size = $("td:eq("+index+")","tr").size();
$("td:eq("+index+")","tr").fadeOut('slow',function(){
counter++;
if(size == counter){ test(); }
);
});
大概是类似这样,总之,凡事只要是扯上生命周期,都是很复杂的...
--
I am a person, and I am always thinking .
Thinking in love , Thinking in life ,
Thinking in why , Thinking in worth.
I can't believe any of what ,
I am just thinking then thinking ,
but worst of all , most of mine is thinking not actioning...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.136.202.202
1F:→ s25g5d4:很酷的方法... 囧 08/27 23:48
2F:→ JYHuang:结果最我还是直接用hide... 08/28 00:04
3F:→ TonyQ:嘿啊 其实这麽多栏去隐藏真的不如hide,负担太大。 08/28 00:08
4F:推 JYHuang:不过写这个仿flexgrid的gird最痛苦的还是针对ie6去修正 08/28 00:09
5F:→ JYHuang:要一次面对一堆IE6下event的CSS的"特立独行" 囧rz 08/28 00:10
6F:推 s25g5d4:T大的签名档都超有格调的 (我绝对不会说其实是我看不懂) 08/28 07:36
7F:推 s25g5d4:#1CP16l4K 这个专辑介绍的网页快做好了 整理code以後会放 08/28 07:41
8F:→ s25g5d4:上来给各位批评@@" 08/28 07:41
9F:→ s25g5d4:问题在去cache变数的话 都会交叉影响到... 08/28 07:42
10F:→ s25g5d4:不做cache效能又差...不过实际上也是那十几ms的差距而已 08/28 07:42
11F:→ TonyQ:cache 会交叉影响到有几个可能性,第一个是可能不该做cache 08/29 15:18
12F:→ TonyQ:第二个是你可能没有给对 scope ,有些时候我们会把变数cache 08/29 15:18
13F:→ TonyQ:在元件上,这样就可以by 元件来设定cache .(更正是 context 08/29 15:19