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 无符号右移运算符
Apr 17 Javascript
jquery等宽输出文字插件使用介绍
Sep 18 Javascript
jQuery实现冻结表头的方法
Mar 09 Javascript
Jquery全选与反选点击执行一次的解决方案
Aug 14 Javascript
微信小程序 实例开发总结
Apr 26 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
Sep 01 Javascript
node中modules.exports与exports导出的区别
Jun 08 Javascript
微信小程序实现的一键拨号功能示例
Apr 24 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
May 13 Javascript
Vue 2.0 侦听器 watch属性代码详解
Jun 19 Javascript
前端Vue项目详解--初始化及导航栏
Jun 24 Javascript
JS前端监控采集用户行为的N种姿势
Jul 23 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函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
常用js脚本
2006/12/03 Javascript
jquery JSON的解析方式
2009/07/25 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
Python读取图片EXIF信息类库介绍和使用实例
2014/07/10 Python
Python简单的制作图片验证码实例
2017/05/31 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
python简单实现最大似然估计&amp;scipy库的使用详解
2020/04/15 Python
python和php哪个容易学
2020/06/19 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
天猫国际进口超市直营:官方直采,一站购齐
2017/12/11 全球购物
美国家居装饰购物网站:Amanda Lindroth
2020/03/25 全球购物
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
现代化办公人员工作的自我评价
2013/10/16 职场文书
副厂长岗位职责
2014/02/02 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
2014年小学体育工作总结
2014/12/11 职场文书
嘉年华活动新闻稿
2015/07/17 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android