jquery动画 -- 4.升级版遮罩效果的图片走廊--带自动运行效果
我将上一章中了插件做了个小小的升级,实现了自动运行效果,完整代码大家见demo。
主要的变化点有:把‘下一条’、‘上一条’的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看效果吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构