jquery有没有延时函数?
时间:2009-05-14
来源:互联网
jquery在判断的时候我的slideUp事件还在进行中(除非把速度设在75毫秒以下),所以无论怎么判断,都不可能出现所有元素都hidden的情况,因为最后一个应该是hidden的元素还在visible的状态中,
slideDown当然没问题,只要slideDown了一点点就是visible了,所以这个slideUp的问题很棘手,我上网查延时的方法,可是却一无所获。
究竟jQuery有没有不要插件就能实现延时的方法呢?比如上例,我只要它延时300毫秒左右再执行检查函数,就没问题了。
我试过在检查前执行一次for循环,可是把数值设小没效果,数值一设大,反而使得滑动的效果变卡,可见滑动与for循环同时在走,这个方法不可行。我在jquery的API参考文档里面也没找到跟延时相关的说明,那么有没有计时的方法呢?比如计算时间差,然后再执行,不过这种思路也是延时函数的方法了吧?
所以我的问题是,jQuery有没有现成的延时方法,或是变相地利用时间来计算时间差的方法,各位高手支招啊,谢谢
作者: walkerwalker 发布时间: 2009-05-14
你在里面对一个公共变量加1,然后判断是否达到总数,就知道是否全部完成了
此外,jQuery没有延时,window对象有个settimeout函数
作者: keakon 发布时间: 2009-05-14
slideUp和slideDown都有第2个参数callback
你在里面对一个公共变量加1,然后判断是否达到总数,就知道是否全部完成了
多谢,但是问题是:
1,我有用过第2个callback,甚至把检查函数写到过点击事件外面,都无效,因为我最终发现,只要slideUp或slideDown一开始进行,jQuery就理解成已经执行完成了,会接下来执行下一个函数,或callback,屡试不爽,根本不会等动画完成之后才执行callback,所以这招无效。
2,对公共变量加1,判断是否达到总数,在哪里进行?能给个示例吗?jQuery不是已经把slide给封装起来了吗?
作者: walkerwalker 发布时间: 2009-05-14
复制代码
|
作者: keakon 发布时间: 2009-05-14
1,一开始我没看懂你的check函数,原因是我不知道为什么要num==total,后来我把它改成check(){alert("test");}
才发现这个test弹出两次,能给我解释一下为什么会弹出两次么?我自己写的验证只弹出一次呀。而且我直接把alert函数写在callback里面,它是先于动画弹出,而且只弹出一次,必须点确定后动画才执行,这违背了callback的本意了吧?不明白,这两个问题不知道您碰到过或知道其实是怎么回事不。
2,在您给的例子里,因为我做的验证是元素是否可见,所以把check函数改成如下:
function check() {
if($("div").is(":visible"))
{
alert("visible");
}
else
{
alert("hidden");
}
}
您按up按钮试一下,会发现第一次弹出visible,第二次弹出hidden。所以这次两个问题一起出现了,为什么弹两次,为什么两次结果不一样。
而且不管原因为何,既然第一次弹出visible了,说明check函数执行的时候那个slideUp的动画还没完成,对吧?
作者: walkerwalker 发布时间: 2009-05-15
作者: walkerwalker 发布时间: 2009-05-15
继续尝试,把html()弹出来,才发现原来用if($("div"))这个方法它不是一个一个地去判断,而是每次判断的第一个,我的方法有严重问题,呵呵,问题原因找到了。
我试着在check里面弹出$(this)而不是$("div)的visible状态,很正常地出现了所有的都为hidden的情况。问题解决,
唯一没弄明白的就是,就算我用$("div")它永远判断第一个找到的div是否可见,那它总应该是第一个被缩上去的吧?为什么直到最后一次才显示hidden呢?
作者: walkerwalker 发布时间: 2009-05-15
num == total是因为每个符合的元素都会执行callback,所以我每次执行都对num加1(注意num必须是公共变量),直到等于总数才知道是最后一个执行的。
当然,total你可以用$('div').length代替,而不用像我这样写成2。
你在callback里不应该用if($("div").is(":visible")),而应该是if($(this).is(":visible")),原因是后者只会检查当前jQuery对象,而前者会每次都检查$("div")这个对象。
作者: keakon 发布时间: 2009-05-15
不过你说直接在slideUp(speed,callback)上写callback还是在动画完成后执行,我这里怎么测试也是动画执行前执行的
代码如下slideUp(1000,alert("test")),您可以试一下,先弹出test对话框,点击确定后才执行动画
作者: walkerwalker 发布时间: 2009-05-15
你传的不是函数对象,而是函数执行结果…
slideUp(1000, function(){alert("test");});
jQuery里经常需要用到匿名函数
作者: keakon 发布时间: 2009-05-15
其实还是不大懂,但是问题出现的地方已经找到了也半明白了。
只是我不明白,匿名函数和函数结果对于这个slideUp的第二个参数有什么影响,假如它需要我传入第二个参数是一个函数对象,而我却传入了一个方法(应该叫方法吧?),那应该是报错才对,而不是先把方法执行了吧?还是jQuery特意针对这种情况写了处理逻辑?
作者: walkerwalker 发布时间: 2009-05-18
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28