jquery的hide()方法的动画效果问题?

Opera_mini 2013-04-19 04:01:28
<script type="text/javascript">
(document).ready(function() {
$("button").click(function() {
$("div").hide(2000,function() {
alert("Hello JavaScript");
});
});
});
</script>
上面代码的效果是以两秒的效果隐藏div后,再执行回调函数,弹出”Hello JavaScript“,那下面这段代码为什么不行?
<script type="text/javascript">
(document).ready(function() {
$("button").click(function() {
$("div").hide(2000);
alert("Hello JavaScript");
});
});
</script>
JS不是单线程吗? $("div").hide(2000);和 alert("Hello JavaScript");不应是前者执行完了,后者再执行吗?为什么前者的动画效果还没执行完,就执行后面的代码,难道是JS碰到动画之类效果的时候是抛给别的线程执行的,它自身不执行渲染之类的效果,所以它就立即执行后面的代码。
...全文
354 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
heyulin0416 2013-04-20
  • 打赏
  • 举报
回复
$(selector).hide(speed,callback); 由于 JavaScript 语句(指令)是逐一执行的 - 按照次序,动画之后的语句可能会产生错误或页面冲突,因为动画还没有完成。 为了避免这个情况,您可以以参数的形式添加 Callback 函数。
FISHBONE 2013-04-19
  • 打赏
  • 举报
回复
这个问题也困扰我很久。现在还不是很清楚。
Opera_mini 2013-04-19
  • 打赏
  • 举报
回复
引用 8 楼 jslang 的回复:
引用 6 楼 Opera_mini 的回复:引用 5 楼 theforever 的回复: 别脱离了原生JS的知识,更不要随便把任何语法(哪怕是JS库的函数使用方法)按自己的意思去想像。 学习首先必须是服从,然后才能自由。真无语,我只想搞明白是什么机制,给我来一句这种话,你牛,行了吧。 jquery的动画实际上是用setTimeout()实现的。 而setTimeo……
嗯。看了这么多答案,你这个才算真正说得通。有时候感觉很多程序员很悲剧,教程怎么教,就怎么用,就算突然某种方法的逻辑跟平常不一样,还是照样用,从不想想为什么。完全没有独立思考,不知道是不是自己钻牛角尖。哎。
天际的海浪 2013-04-19
  • 打赏
  • 举报
回复
jquery的动画实际上是用setTimeout()实现的。 而setTimeout()就相当于抛出个新的线程。 你可以把setTimeout()当成一个定时自动触发的事件
Opera_mini 2013-04-19
  • 打赏
  • 举报
回复
引用 7 楼 bbjbepzz 的回复:
引用 4 楼 Opera_mini 的回复:引用 2 楼 bbjbepzz 的回复:setTimeout(function(){ alert(111); },2000); alert(222); 你觉得结果是 111 222 还是 222 111那hide()方法这种动画效果是js渲染的吗?还是给别的线程渲染。 JS是单线程的,如果你想看下hide是怎……
你再看看这段代码,
<script type="text/javascript">
		function jisuan() {
			var i;
			for(i = 1; i<100000; i++)
			{
				var b = 1;
				b += i;
				document.write(b + "<br />");
			}
			alert("hahah");
		}
		jisuan();
		alert("what");
    </script>
最后的结果是先显示hahah,再显示what。应用在hide()上的话,不应该是hide的动画先显示完吗?再处理后面的语句吗?
天际的海浪 2013-04-19
  • 打赏
  • 举报
回复
引用 6 楼 Opera_mini 的回复:
引用 5 楼 theforever 的回复: 别脱离了原生JS的知识,更不要随便把任何语法(哪怕是JS库的函数使用方法)按自己的意思去想像。 学习首先必须是服从,然后才能自由。真无语,我只想搞明白是什么机制,给我来一句这种话,你牛,行了吧。
jquery的动画实际上是用setTimeout()实现的。 而setTimeout()就相当于抛出个新的线程。 你可以把setTimeout()当成一个定时自动触发的事件
bbjbepzz 2013-04-19
  • 打赏
  • 举报
回复
引用 4 楼 Opera_mini 的回复:
引用 2 楼 bbjbepzz 的回复:setTimeout(function(){ alert(111); },2000); alert(222); 你觉得结果是 111 222 还是 222 111那hide()方法这种动画效果是js渲染的吗?还是给别的线程渲染。
JS是单线程的,如果你想看下hide是怎么执行的,你可以用浏览器调试一下,设置一个断点,然后跟踪进jQuery源码里面看
Opera_mini 2013-04-19
  • 打赏
  • 举报
回复
引用 5 楼 theforever 的回复:
别脱离了原生JS的知识,更不要随便把任何语法(哪怕是JS库的函数使用方法)按自己的意思去想像。 学习首先必须是服从,然后才能自由。
真无语,我只想搞明白是什么机制,给我来一句这种话,你牛,行了吧。
  • 打赏
  • 举报
回复
别脱离了原生JS的知识,更不要随便把任何语法(哪怕是JS库的函数使用方法)按自己的意思去想像。 学习首先必须是服从,然后才能自由。
Opera_mini 2013-04-19
  • 打赏
  • 举报
回复
引用 2 楼 bbjbepzz 的回复:
setTimeout(function(){ alert(111); },2000); alert(222); 你觉得结果是 111 222 还是 222 111
那hide()方法这种动画效果是js渲染的吗?还是给别的线程渲染。
Opera_mini 2013-04-19
  • 打赏
  • 举报
回复
引用 1 楼 z284122755 的回复:
因为你的 (document).ready(function() { 没加$符号 改成$(document).ready(function() {
忘加了。问题一样。
bbjbepzz 2013-04-19
  • 打赏
  • 举报
回复
setTimeout(function(){ alert(111); },2000); alert(222); 你觉得结果是 111 222 还是 222 111
  • 打赏
  • 举报
回复
因为你的 (document).ready(function() { 没加$符号 改成$(document).ready(function() {
第1章 第一个简单的jQuery程序 jQuery事件的链式写法 控制jQuery对象 jQuery控制CSS样式 第2章 使用JavaScript实现隔行变色 使用jQuery选择器实现隔行变色 JavaScript代码检测页面元素 jQuery代码检测页面元素 使用jQuery基本选择器 使用jQuery层次选择器 使用jQuery基本过滤选择器 使用jQuery内容过滤选择器 使用jQuery可见性过滤选择器 使用jQuery属性过滤选择器 使用jQuery子元素过滤选择器 使用jQuery表单对象属性过滤选择器 使用jQuery表单过滤选择器 第3章 DOM树状文档 获取元素的属性 设置元素的属性 设置元素的属性 获取或设置元素的内容 获取或设置元素的值 直接设置元素样式值 增加CSS类别 类别切换 动态创建节点元素 动态插入节点方法 动态插入节点方法 复制元素节点 替换元素节点 包裹元素节点 遍历元素 删除元素 数据管理 第4章 事件中的冒泡现象 bind方法绑定事件 映射方式绑定不同的事件 切换事件hover 切换事件toggle 移除事件unbind 其他事件one 其他事件trigger 文本框中的事件应用 列表框中事件应用 列表中的导航菜单应用 网页选项卡应用 删除记录时的提示效果 第5章 show()与hide()方法 动画效果的show()与hide()方法 toggle()方法 slideDown()与slideUp()方法 slideToggle()方法 fadeIn()和fadeOut()方法 fadeTo()方法 简单的动画 移动位置的动画 队列中的动画 动画停止和延时 动画方式浏览图片 第6章 传统的JavaScript方法实现Ajax功能 load()方法实现Ajax功能 getJSON函数获取数据 getScript函数获取数据 get实现异步获取xml文档数据 $.get发送请求 $.post发送请求 serialize()序列化表单 $.ajax()方法发送请求 第7章 validate验证插件 form表单插件 cookie插件 autocomplete插件 notesforlightbox插件 ContextMenu插件 JQZoom放大镜插件 编写一个对象级别的插件 编写一个类级别的插件 uploadify文件上传插件 第8章 使用draggable插件实现对象的拖曳操作 使用droppable插件实现对象的置放操作 使用sortable插件实现列表中表项的拖曳排序操作 使用accordion插件实现区域块的折叠操作 使用datepicker插件实现选择日期的操作一 使用datepicker插件实现选择日期的操作二 使用tabs插件展示选项卡的基本功能 使用dialog插件弹出提示和确定信息对话框 使用jQuery UI插件以拖动方式管理相册 第9章 使用browser对象获取浏览器信息 使用boxModel对象检测是否是W3C盒子模型 使用$.each()工具函数遍历数组 使用$.each()工具函数遍历ajaxSettings对象 使用$.grep()工具函数筛选数组中的元素 使用$.map()工具函数变更数组中的元素 使用$.inArray()工具函数搜索数组中指定元素的位置 使用$.trim()工具函数除掉字符串的空格符 使用$.isEmptyObject()函数检测对象是否为空 使用$.isPlainObject()函数检测对象是否为原始对象 使用$.contains()函数检测两个节点是否包含 使用$.param()进行数组元素序列化 使用函数$.extend()扩展工具函数 使用函数$.proxy()改变事件函数的作用域 使用jQuery扩展工具函数实现对字符串指定类型的检测< 第10章 在指定的查找范围内获取DOM元素 选择器中含有空格符与不含空格符的区别 事件中的target方法优化冒泡现象 使用data()方法在元素上存取移数据 使用data()方法在元素上存取移JSON格式的数据 解决jQuery库先于其他库导入时变量“$”的使用权 解决jQuery库后于其他库导入时变量“$”的使用权 使用子查询优化选择器性能 减少对DOM元素直接操作 DOM对象与jQuery对象的类型转换 第11章 应用案例-聊天室系统 应用案例_图片切割

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧