jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果


Posted in Javascript onAugust 24, 2012

主要的变化点有:把‘下一条'、‘上一条'的click事件抽象到一个函数showNext中。添加setInterval,添加selector元素的hover事件。好了,我们一个个的看。
showNext函数:

//显示函数 
function showNext(flag) { 
//隐藏导航 
$(config.selector).find('a').css('display', 'none'); 
//创建遮罩 
$.tranzify.createOverlay(config); //获取当前显示状态的图片 
var currImg = $('.' + config.visibleClass, $(config.selector)); 
if (flag === true) { 
//当前图片不是第一张图片 
if (currImg.prev().filter('img').length > 0) { 
//将上一张图片设置为可显示状态 
currImg.removeClass(config.visibleClass).prev().addClass(config.visibleClass); 
} else { 
//设置最后一张图片为可显示状态 
currImg.removeClass(config.visibleClass); 
$(config.selector).find('img').eq(imgLength - 1).addClass(config.visibleClass); 
} 
} else { 
//当前图片不是最后一张图片 
if (currImg.next().filter('img').length > 0) { 
//将下一张图片设置为可显示状态 
currImg.removeClass(config.visibleClass).next().addClass(config.visibleClass); 
} else { 
//设置第一张图片为可显示状态 
currImg.removeClass(config.visibleClass); 
$(config.selector).find('img').eq(0).addClass(config.visibleClass); 
} 
} 
//运行遮罩效果 
$.tranzify.runTransition(config); 
}

之所以要把他抽出来,是因为下面的setInterval里面也要用到它,不想有太多重复的代码,所以又必要抽出来,这样统一管理。接下来我们来看setIntervale。
//设置循环函数 
config.interval = setInterval(showNext, (config.multi * 150) + 3000);

其实就是添加一个循环函数,每个多少秒,运行一次showNext函数,显示下一张图片。这里要注意的一点是间隔时间的计算。还记得上一章中runTransition函数中给animate对象设置的间隔时间吗?横向显示设置为slow,也就是600毫秒。每一帧竖向显示设置的时间是150毫秒,一共有config.multi帧。(config.multi * 150)肯定大于600,所以我们这里就取(config.multi * 150)作为时间标准。为了防止动画刚运行完,就接着显示下一张图片,我们加了额外的3秒钟时间。

添加完循环函数后,我们为selector对象添加hover事件,当鼠标移动到对象上时,移出interval,鼠标移出时添加interval。

//鼠标移动到对象上,移出循环函数;鼠标移出,添加循环函数 
$(config.selector).hover(function () { 
clearInterval(config.interval); 
}, function () { 

config.interval = setInterval(showNext, (config.multi * 150) + 3000); 
});

这里我们要注意的是,我们把setInterval创造的对象传给了config.interval。这样做事为了保证上一步中创建的循环函数,删除的循环函数和删除的循环函数是同一个对象。很忌讳把setInterval创建的对象直接传给没有声明的interval,像这样:
interval = setInterval(showNext, (config.multi * 150) + 3000);

这样操作时把他传给了window对象的interval,很容易引起代码冲突。比如如果别的代码或者插件里面,也创建了一个setInterval对象,也同样传给了interval(等同于window.interval),那我们插件的clearInterval就会影响到别人代码的正常运行,同理别人的代码也会影响到我们。

最后为了代码的健壮性,我们给createOverlay添加了下面的代码,保证同时只有一个遮罩层:

//判断是否有没有运行完的补间动画,存在则立即结束动画,移出对象 
var transOverlay = $('#' + config.containerID); 
if (transOverlay) { 
transOverlay.stop(true, true); 

transOverlay.remove(); 
}

好了,需要讲解的对象都讲完了,大家还是直接下demo看效果吧。
demo下载地址:jQuery.animation.tranzify_improve.js
Javascript 相关文章推荐
jquery事件重复绑定的快速解决方法
Jan 03 Javascript
如何解决hover在ie6中的兼容性问题
Dec 15 Javascript
JS使用正则实现去掉字符串左右空格的方法
Dec 27 Javascript
利用js判断手机是否安装某个app的多种方案
Feb 13 Javascript
bootstrap精简教程_动力节点Java学院整理
Jul 14 Javascript
JavaScript实现跟随滚动缓冲运动广告框
Jul 15 Javascript
vue实现全选和反选功能
Aug 31 Javascript
react-native android状态栏的实现
Jun 15 Javascript
详解用Webpack与Babel配置ES6开发环境
Mar 12 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
Apr 09 Javascript
Js图片点击切换轮播实现代码
Jul 27 Javascript
js+css3实现简单时钟特效
Sep 13 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
Aug 24 #Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
Aug 24 #Javascript
jquery动画1.加载指示器
Aug 24 #Javascript
基于jquery的bankInput银行卡账号格式化
Aug 22 #Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
Aug 22 #Javascript
js选取多个或单个元素的实现代码(用class)
Aug 22 #Javascript
javascript动态加载三
Aug 22 #Javascript
You might like
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
基于PHP的cURL快速入门教程 (小偷采集程序)
2011/06/02 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
Laravel 5框架学习之向视图传送数据
2015/04/08 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
php支付宝APP支付功能
2020/07/29 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
jQuery中:lt选择器用法实例
2014/12/29 Javascript
JS实现文件动态顺序载入的方法
2015/03/07 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
python实现问号表达式(?)的方法
2013/11/27 Python
Python设计模式之观察者模式实例
2014/04/26 Python
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
Python的多态性实例分析
2015/07/07 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
Python3.7中安装openCV库的方法
2018/07/11 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
Python3 批量扫描端口的例子
2019/07/25 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
建筑系毕业生自我鉴定
2014/01/24 职场文书
学习十八届三中全会精神实施方案
2014/02/17 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书