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 相关文章推荐
innerHTML 和 getElementsByName 在IE下面的bug 的解决
Apr 09 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
Mar 29 Javascript
使用js正则控制input标签只允许输入的值
Jul 29 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
Jan 13 Javascript
JS数组的赋值介绍
Mar 10 Javascript
使用Ajax与服务器(JSON)通信实例
Nov 04 Javascript
Servlet实现文件上传,可多文件上传示例
Dec 05 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
Dec 30 Javascript
JS监听滚动和id自动定位滚动
Dec 18 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
Apr 01 Javascript
详解Vue-Router源码分析路由实现原理
May 15 Javascript
小程序实现录音上传功能
Nov 22 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中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
php无限级分类实现方法分析
2016/10/19 PHP
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
用js判断输入是否为中文的函数
2014/03/10 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
python脚本内运行linux命令的方法
2015/07/02 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
python 切换root 执行命令的方法
2019/01/19 Python
详解小白之KMP算法及python实现
2019/04/04 Python
Python学习笔记之自定义函数用法详解
2019/06/08 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
Python-openCV开运算实例
2020/07/05 Python
Python语言编写智力问答小游戏功能
2020/10/13 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
护士岗前培训自我评鉴
2014/02/28 职场文书
政工例会汇报材料
2014/08/26 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
小班下学期个人总结
2015/02/12 职场文书
六一亲子活动感想
2015/08/07 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
js基础语法与maven项目配置教程案例
2021/07/15 Javascript