jQeury淡入淡出需要注意的问题


Posted in Javascript onSeptember 08, 2010

前两天看到橡树小屋朋友发表的《JQuery 实现图片轮播效果》,比较有趣,发现他是使用fadeIn和fadeOut实现图片淡入淡出轮换的。当时曾担心他的例子中如果连续多次点击,所产生的动画会不会有延时。但我连续点击了几下,没看到明显的延时,就没再多想。

众所周知,jQuery所产生的动画效果默认会进入列队的。假如:点击一下,产生动画3秒钟。然后我快速的连点3次。那么要等到9秒钟,所有动画才能结束。animate是自定义动画,可以很容易的设定动画是否进入列队。但使用fadeIn和fadeOut就麻烦了。

看到有的Flash网站的图标,鼠标一放上去图标就缓缓变了,移开又会缓缓变回来,很是漂亮。我打算用jQuery也做做看,能不能做出类似的效果。因为自己练手,就随便拉两张图片:

<div id="div"> 
<img id="1" src="florian.jpg" style= "position:absolute;z-index:2;left:10px;top:10px;"/> 
<img id="2" src="kamil.jpg" style= "position:absolute;z-index:1;left:10px;top:10px;"/> 
</div>

这样第一张就会覆盖第二张图片,那我只要淡入淡出第一张图片就能实现特效了。于是就使用了hover,fadeIn和fadeOut,简单的实现了
$(document).ready(function () { 
$("div").hover( 
function () { $("#1").fadeOut(1000); }, 
function () { $("#1").fadeIn(1000); } 
); 
});

但这样问题出来了,如果我在图片上不停地快速的移入移出鼠标。那么动画都进入列队了,那么动画就会一直在动,很是不好看。

于是我打算使用:dequeue(),定义:Removes a queued function from the front of the queue and executes it.
我想如果不停的移入移出,那么就会删除上一个操作在列队中的动画。这样就会执行最后的动画了。

function () { $("#1").dequeue().fadeOut(1000); }, 
function () { $("#1").dequeue().fadeIn(1000); }

可是更麻烦的情况出现了,当不停地移入移出鼠标时,有时图片都没了,有时不变了。怎么回事?

然后又想到使用:stop(),定义:
Stops all the currently running animations on all the specified elements.
If any animations are queued to run, then they will begin immediately.

function () { $("#1").stop().fadeOut(1000); }, 
function () { $("#1").stop().fadeIn(1000); }

我停止前面所有的列队,总算可以了吧!但是却出现了图片淡到一半,不动了!就像两个图片叠加显示了一样。
又是怎么回事?

直到我在stop中加参数,图片才能正常显示。

clearqueue (可选)boolean

如果设置成true,则清空队列。可以立即结束动画。

gotoend (可选)boolean

让当前正在执行的动画立即完成,并且重设show和hide的原始样式,调用回调函数等。

function () { $("#1").stop(true,true).fadeOut(1000); }, 
function () { $("#1").stop(true, true).fadeIn(1000); }

但这样就会出现执行完毕,突然显示整图的情况,就没有了淡入淡出的那样的效果了。

没办法,只有使用animate了。

function () { $("#1").stop().animate({ 'opacity': 0 }, 1000); }, 
function () { $("#1").stop().animate({'opacity':1}, 1000); } 
或: 
function () { $("#1").animate({ 'opacity': 0 }, { queue: false, duration: 1000 }); }, 
function () { $("#1").animate({ 'opacity': 1 }, { queue: false, duration: 1000 }); }

这才实现了想要的完美效果。


总结一下,使用stop和dequeue理论都是可以的,但为什么却出错?我也不太清楚,估计是jQuery库的问题吧,
这个要查原文件才找得到问题。但以后使用fadeIn和fadeOut真的注意一下。当然,到橡树小屋朋友的
《JQuery实现图片轮播效果》肯定是个好例子,直到我把时间改到2000才看出来有延迟的。只有我故意找毛病的人才会
这么干,其他哪还有人会设这么长的时间的。有兴趣的朋友可以去橡树小屋那学习一下,既简单又漂亮实用的例子。

Javascript 相关文章推荐
javascript中length属性的探索
Jul 31 Javascript
JS控制阿拉伯数字转为中文大写示例代码
Sep 04 Javascript
js如何调用qq互联api实现第三方登录
Mar 28 Javascript
浅析Node.js:DNS模块的使用
Nov 23 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
Oct 26 Javascript
微信小程序 密码输入(源码下载)
Jun 27 Javascript
JS Testing Properties 判断属性是否在对象里的方法
Oct 01 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
Oct 14 jQuery
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
Mar 15 Javascript
浅谈Node框架接入ELK实践总结
Feb 22 Javascript
javascript实现前端成语点击验证
Jun 24 Javascript
JavaScript文档对象模型DOM
Nov 20 Javascript
jQuery之浮动窗口实现代码(两种方法)
Sep 08 #Javascript
Jquery ThickBox插件使用心得(不建议使用)
Sep 08 #Javascript
jquery的Tooltip插件 qtip使用详细说明
Sep 08 #Javascript
jquery的Theme和Theme Switcher使用小结
Sep 08 #Javascript
复制小说文本时出现的随机乱码的去除方法
Sep 07 #Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
Sep 06 #Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
Sep 06 #Javascript
You might like
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
PHP系统命令函数使用分析
2013/07/05 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
关于Javascript 的 prototype问题。
2007/01/03 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
express express-session的使用小结
2018/12/12 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
js实现开关灯效果
2020/03/30 Javascript
vue 解决数组赋值无法渲染在页面的问题
2019/10/28 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
Python中的作用域规则详解
2015/01/30 Python
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
Django 中自定义 Admin 样式与功能的实现方法
2019/07/04 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
windows10在visual studio2019下配置使用openCV4.3.0
2020/07/14 Python
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
求职者应聘的自我评价
2013/10/16 职场文书
酒店员工检讨书
2014/02/18 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
未婚证明书模板
2014/10/08 职场文书
单位介绍信格式范文
2015/05/04 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书