我的第二个 jQuery 插件:模仿新浪微博首页“大家正在说”特效
2012-10-20 12:01 音乐让我说 阅读(396) 评论(0) 编辑 收藏 举报我的 第一个 jQuery 插件:模仿QQ空间好友提示层(DIV)
如题,我们今天要实现的效果是模仿新浪微博首页“大家正在说”特效:
下面是我的特效展示:
怎么样,还是挺相似的吧!下面贴出主要的 jQuery 插件代码:
/* * 模仿新浪微博首页的“大家都在说”特效,即层自动向下滚动 * * Copyright (c) Bruce Liu QQ:403350327 新浪微博:http://weibo.com/liuzuliang * * 来自:http://www.cnblogs.com/Music/archive/2012/10/20/jquery-weibo-galary.html * * 转载请注明,o(∩_∩)o * * Version: 1.0.0 * */ (function($) { $.fn.Marquee = function(options) { var opts = $.extend({}, $.fn.Marquee.defaults, options); return this.each(function() { if (opts.direction != 'up' && opts.direction != 'down') { return; } var $marquee = $(this); //滚动元素容器 var _scrollObj = $marquee.get(0); //滚动元素容器DOM,默认指的是 DIV var scrollW = $marquee.width(); //滚动元素容器的宽度,比如:300px var scrollH = $marquee.height(); //滚动元素容器的高度,比如:480px var $element = $marquee.children(); //滚动元素,得到 UL var $kids = $element.children(); //滚动子元素,得到 UL 下面的所有 LI,比如个数为 11 var scrollSize = 0; //滚动元素尺寸 var numMoved = 0; // scrollFunc 函数共执行了多少次 $element.css('height', 10000); //防止滚动子元素比滚动元素宽而取不到实际滚动子元素宽度 //获取滚动元素的尺寸 $kids.each(function() { scrollSize += $(this).outerHeight(); }); //滚动元素总尺寸小于容器尺寸,不滚动 if (scrollSize < scrollH) { return; } //克隆滚动子元素将其插入到滚动元素后,并设定滚动元素宽度 var kidsClone = $kids.clone(); $element.append(kidsClone).css('height', scrollSize * 2); var currentNeedToShowIndex = -1; var canSeeHeight = 0; // 已经执行了的高度 function scrollFunc() { if (opts.loop > 0) { numMoved += opts.scrollAmount; if (numMoved > scrollSize * opts.loop) { $marquee.scrollTop(0); return clearInterval(globalTrigger); } } if (currentNeedToShowIndex == -1) { currentNeedToShowIndex = $kids.length - 1; //最后一个 $kids.eq(currentNeedToShowIndex).css({ "opacity": "0", "filter": "alpha(opacity=0)" }); } var currentLiHeight = $kids.eq(currentNeedToShowIndex).outerHeight(); if ((currentLiHeight - canSeeHeight) <= 0) { var tempIndex = currentNeedToShowIndex - 1; if (tempIndex != -1) { $kids.eq(tempIndex).css({ "opacity": "0", "filter": "alpha(opacity=0)" }); } canSeeHeight = 0; clearInterval(globalTrigger); var n = 0.1; $.doTimeout("tempOpacityTrigger", 50, function() { if (n < 1.1) { $kids.eq(currentNeedToShowIndex).css({ "opacity": n, "filter": "alpha(opacity=" + (n * 100) + ")" }); n = n + 0.1; return true; } currentNeedToShowIndex--; }); $.doTimeout("midfieldStopTrigger", opts.midfieldDelay, function() { globalTrigger = setInterval(scrollFunc, opts.scrollDelay); }); } canSeeHeight += opts.scrollAmount var newPos = $marquee.scrollTop() - opts.scrollAmount; if (newPos <= 0) { newPos = scrollSize; } $marquee.scrollTop(newPos); } //滚动开始 if (opts.direction == 'up') { $marquee.scrollTop(0); } else if (opts.direction == 'down') { $marquee.scrollTop(scrollSize); } var globalTrigger = null; $.doTimeout(opts.startDelay, function() { globalTrigger = setInterval(scrollFunc, opts.scrollDelay); $marquee.hover(function() { $.doTimeout("midfieldStopTrigger"); clearInterval(globalTrigger); }, function() { clearInterval(globalTrigger); globalTrigger = setInterval(scrollFunc, opts.scrollDelay); }); //鼠标划过停止滚动 }); }); }; $.fn.Marquee.defaults = { loop: 0, //循环滚动次数,0时无限 direction: 'down', //滚动方向,'up','down' scrollAmount: 2, //步长 startDelay: 1500, //开始的滚动前延迟 midfieldDelay: 1500, //每下降完一个LI 延迟多少毫秒 scrollDelay: 20 //时长,即每隔多少毫秒下降scrollAmount个像素 }; $.fn.Marquee.setDefaults = function(settings) { $.extend($.fn.Marquee.defaults, settings); }; })(jQuery);
谢谢浏览!
作者:音乐让我说(音乐让我说 - 博客园)
出处:http://music.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步