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 相关文章推荐
jquery异步循环获取功能实现代码
Sep 19 Javascript
基于jquery和svg实现超炫酷的动画特效
Dec 09 Javascript
javascript单页面手势滑屏切换原理详解
Mar 21 Javascript
Node.js包管理器Yarn的入门介绍与安装
Oct 17 Javascript
Vue.js在使用中的一些注意知识点
Apr 29 Javascript
Vue 组件封装 并使用 NPM 发布的教程
Sep 30 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
Nov 07 Javascript
vue的for循环使用方法
Feb 12 Javascript
微信小程序实现左滑动删除效果
Mar 30 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
Sep 03 jQuery
微信小程序加载机制及运行机制图解
Nov 27 Javascript
小程序自定义模板实现吸顶功能
Jan 08 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
CentOS安装php v8js教程
2015/02/26 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
JavaScript的ExtJS框架中表格的编写教程
2016/05/21 Javascript
JS中递归函数
2016/06/17 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
Python正则捕获操作示例
2017/08/19 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
利用Python的turtle库绘制玫瑰教程
2019/11/23 Python
Pytorch 中retain_graph的用法详解
2020/01/07 Python
python实现logistic分类算法代码
2020/02/28 Python
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
中学生评语大全
2014/04/18 职场文书
银行求职信怎么写
2014/05/26 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
订货会邀请函
2015/01/31 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python
python区块链持久化和命令行接口实现简版
2022/05/25 Python