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方法和技巧大全
Dec 27 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
Nov 19 Javascript
Js 去掉字符串中的空格(实现代码)
Nov 19 Javascript
javascript实现页面内关键词高亮显示代码
Apr 03 Javascript
JavaScript版的TwoQueues缓存模型
Dec 29 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
Jan 20 Javascript
jQuery Real Person验证码插件防止表单自动提交
Nov 06 Javascript
jquery事件的ready()方法使用详解
Nov 11 Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
Jul 27 Javascript
AngularJS实现按钮提示与点击变色效果
Sep 07 Javascript
基于vue的fullpage.js单页滚动插件
Mar 20 Javascript
angular.js+node.js实现下载图片处理详解
Mar 31 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中看实例学正则表达式
2006/12/25 PHP
PHP is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
JS与框架页的操作代码
2010/01/17 Javascript
使用JavaScript库还是自己写代码?
2010/01/28 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
JavaScript将当前时间转换成UTC标准时间的方法
2015/04/06 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
2016/02/15 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
实现两个文本框同时输入的实例
2017/09/25 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
Python采用raw_input读取输入值的方法
2014/08/18 Python
用Python遍历C盘dll文件的方法
2015/05/06 Python
python超时重新请求解决方案
2019/10/21 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
2016年大学生党员承诺书
2016/03/24 职场文书
2019各种保证书范文
2019/06/24 职场文书
对Keras自带Loss Function的深入研究
2021/05/25 Python
在容器中使用nginx搭建上传下载服务器
2022/05/11 Servers