jquery动画 -- 8.走马灯效果的制作
今天要介绍的是走马灯效果的制作,效果图如下,页面中‘Recent Posts’就是走马灯部分。
现在我们介绍如何制作走马灯,首先定义html页面结构。
<div id="outer"> <header> ... </header> <article> ... </article> <aside> ... </aside> </div>
走马灯部分的html是通过js实现的,这部分html会添加在上面html header对象下面,生成的html结构如下:
<div id="marquee" style="display: block;"> <h2>Recent Posts:</h2> <div style="width: 2715px;"> <a href="http://www.danwellman.co.uk/ssd-vs-raid0/" title="SSD VS RAID0" style="margin-left: -46.6px;">SSD VS RAID0</a> <a href="http://www.danwellman.co.uk/samsung-spf-71es/" title="Samsung SPF-71ES">Samsung SPF-71ES</a> ... </div> </div>
id=marquee 的div是走马灯总的容器对象,h2是标题部分,a标签式一个个需要显示的内容,他外面又包裹了一个div。接下来定义marquee相关的css。
#marquee { display: none; height: 58px; margin: -20px 0 20px; border: 3px solid #d3d1d1; position: relative; overflow: hidden; background-color: #e5e5e5; } #marquee h2 { margin: 0; position: absolute; top: 10px; left: 20px; } #marquee a { display: block; margin-right: 20px; float: left; font: normal 15px "Nimbus Sans L" , "Helvetica Neue" , "Franklin Gothic Medium" , Sans-serif; } #marquee div { margin: 20px 0 0 200px; overflow: hidden; }
下面开始介绍最核心的js代码了。我们会通过ajax方式从远程连接获取json数据,json数据格式如下:
{ "status": "ok", "count": 1, "count_total": 1, "pages": 1, "posts": [{ "id": 1, "title':"..."
... },{ "id": 2, "title":"..."
... }] }
我们首先定义一个ajax方法。
$.getJSON("http://danwellman.co.uk?json=1&count=10&callback=?", function (data) {
...
});
接下来就需要对data数据进行处理。定义走马灯容器对象,标题对象,将json数据添加到走马灯对象中,设置走马灯宽度等。
//定义走马灯容器 var marquee = $('<div></div>', { id: 'marquee' }), //定义走马灯标题 h2 = $('<h2></h2>', { text: 'Recent Posts:' }); //将ajax的数据添加到走马灯容器对象 for (var i = 0, len = data.count; i < len; i++) { $('<a></a>', { href: data.posts[i].url, title: data.posts[i].title, html: data.posts[i].title }).appendTo(marquee); } //用div包裹一下a标签对象,然后添加h2对象;将走马灯容器添加到header对象后面,渐现 marquee.wrapInner('<div></div>') .prepend(h2) .insertAfter('header') .slideDown('slow'); //设置走马灯宽度 $('#marquee').find('div').eq(0).width(function () { var width = 0; //获取走马灯里面每个a标签,累加它们的宽度 $(this).children().each(function () { var el = $(this); width += el.width() + parseInt(el.css('marginRight')); }); return width; });
为了实现动画的效果,我们创建一个自定义事件marquee-ready。这里比较重要的地方是,postLink.animate动画结束后函数的操作,函数里面通过$(this).appendTo(marquee.find('div').eq(0)),把当前a标签(也就是第一个a标签)移动到div容器的最后,这样可以把第二个a标签向前移,他就变成了第一个a标签,再通过marquee.trigger('marquee-ready')方法触发动画效果,就实现了不间断走马灯效果的实现。大家可以慢慢体会。
//定义自定义事件marquee-ready,产生动画效果 $('body').delegate('#marquee', 'marquee-ready', function () { //获取走马灯对象 var marquee = $(this), //获取走马灯一个a标签 postLink = marquee.find('a').eq(0), //计算宽度 width = postLink.width() + parseInt(postLink.css('marginRight')), //计算动画效果的速度 time = 15 * width; //通过修改a标签的margin-left属性,实现动画效果 postLink.animate({ marginLeft: '-=' + width }, time, 'linear', function () { //第一个a标签运行完毕,把他的marg-left设置为0,同时将他移动到margin里面的div对象的最后, //这样操作,第二个a标签对象就变成了第一个a标签对象。 //这次再次触发marquee-ready事件,实现不间断的循环动画效果 $(this).css({ marginLeft: 0 }).appendTo(marquee.find('div').eq(0)); marquee.trigger('marquee-ready'); }); });
一切完毕之后,只需要简单的触发marquee-ready事件即可。
//触发marquee-ready事件 marquee.trigger('marquee-ready');
好了,走马灯的制作讲完了,大家可以结合demo自己亲手做一做。
demo下载地址:jQuery.animation.marquee.zip
分类:
JavaScript
, jquery
标签:
jquery动画
【推荐】国内首个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语句:使用策略模式优化代码结构