jquery实现页面百叶窗走马灯式翻滚显示效果的方法


Posted in Javascript onMarch 12, 2015

本文实例讲述了jquery实现页面百叶窗走马灯式翻滚显示效果的方法。分享给大家供大家参考。具体如下:

1. 这里的代码需要jquery1.3以上的支持,如下所示:

jQuery.fn.extend((

    function($){

        var l = 4,//卷动行数

            t=5000,//卷动完一次后,隔多长时间下次开始卷动

            rt=500,//每个n卷动过去的耗时

            n="li",//默认的卷动对象内包含的要卷动的HTML标记

            o="ul",//如果卷动时,启用的包裹卷动元素的HTML标记

            e,//调用对象

            en,//调用对象内所有的要卷动的对象集合

            h;//卷动行高度

        var vLimit=80;//比视觉极限0.1s还小点

        var maxRnum=Math.ceil(rt/vLimit);//最大卷动次数

        var maxRh=0;//每次卷动高度

        var fnRollFirst=function(arg){//将arg向上卷1个n,完成之后将第1个n移动到最后一个位置

            var rCount=0;//卷动次数纪录

            var rVal=setInterval(function(){//每隔vLimit循环一次,共循环maxRnum-1次

                        rCount++;

                        arg.scrollTop(arg.scrollTop()+maxRh);

                        if(rCount>=(maxRnum-1)){//少卷1次

                            clearInterval(rVal);

                            arg.scrollTop(arg.scrollTop()+h-maxRh*(maxRnum-1));//最后1次修正卷动值

                            //移动第一个元素到最后

                            var nowN=arg.children(n);

                            nowN.eq(nowN.length-1).after(nowN.eq(0));

                            //第一个位置空出后需要通过倒卷修正回来

                            arg.scrollTop(-h);

                        };

                    },vLimit);

        };

        var fnRollArr=function(arg){//对数组中的对象逐一启动卷动

            var out=setInterval(function(){

                fnRollFirst(arg.shift());

                if(!arg.length){

                    clearInterval(out);

                };

            },rt);      

        };

        var fnRoll=function(){//获得需要逐个卷动的对象集合

            var arr=new Array();

            e.children(o).each(function(){

                var rn=$(this).children(n);

                if(rn.length>1){

                    arr.push($(this));

                };

            });

            setInterval(function(){

                fnRollArr(arr.slice(0));

            },t);

        };

        var fnLay=function(){//布局页面

            h=en.height();

            var nu=Math.ceil(en.length/l);

            var u=$("<"+o+"></"+o+">");

            u.css({"overflow":"hidden","height":h+"px","margin-bottom":"15px"});

            for(var i=0;i<l;i++){

                en.slice(nu*i,nu*(i+1)).wrapAll(u);

            };          

        };

        var fnMain=function(){//卷动主方法

            if(maxRnum>1){

                fnLay();

                maxRh=Math.ceil(h/maxRnum);

                fnRoll();

            };

        };

        var fnStart= function(arg){//初始化显示方式

            e=arg;

            en = e.children(n);

            en.show();

            if(en.length>l){

                fnMain();

            }else{

                return false;

            };

        };

        return {

            setLine : function(num){//设置要分成多少行来卷动

                (!isNaN(num) && num>0)?l=num:"";

                return this;

            },

            setTime : function(num){//卷动间隔时间:毫秒

                (!isNaN(num) && num>0)?t=num:"";

                return this;

            },

            startRoll : function(){//启动卷动

                fnStart(this);

            }

        };

    }

)(jQuery));

2. 页面可以是这样子
<div id="re" class="dynamic">

 <li>

     <a href="#" class="name">李飞</a>正在申请成为经验达人

 </li>

 <li>

     <a href="#" class="name">李飞</a>已向职场专题《<a href="">我是个亚太人呀亚太人</a>》投稿

 </li>

 <li>

     <a href="#" class="name">董川民</a>已成功购买职场专题《<a href="#">我是个亚太人呀亚太人</a>》

 </li>

 <li>

     <a href="#" class="name">李飞</a>对《<a href="">我是个亚太人呀亚太人</a>》的解决方案又卖出一次

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

    

 <li>

     <a href="#" class="name">李飞</a>向职场专题《<a href="#">我是个亚太人呀亚太人</a>》的投稿已通过审核,获得1元奖励。

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>评论经验:

     <div class="text"><a href="">人生感悟及处事技巧人生感悟及处事</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

   

 <li>

     <a href="#" class="name">李飞</a>已正式成为经验达人

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>评论经验:

     <div class="text"><a href="">人生感悟及处事技巧人生感悟及处事</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

     

 <li>

     <a href="#" class="name">李飞</a>已邀请<a href="#" class="name">董川民</a>成为经验达人

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>评论经验:

     <div class="text"><a href="">人生感悟及处事技巧人生感悟及处事</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

 <li>

     <a href="#" class="name">三内里奥</a>回答了<a href="#" class="name">大飞</a>的提问

     <div class="text"><a href="">人生感悟及处事技巧人生感悟?</a></div>

 </li>

</div>

<script type="text/javascript">

//复杂点的调用写法

//$("#re").setLine(5).setTime(3000).startRoll();

//简单的调用

$("#re").startRoll();

</script>

希望本文所述对大家的jQuery程序设计有所帮助。

Javascript 相关文章推荐
很酷的javascript loading效果代码
Jun 18 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
Jan 15 Javascript
Javascript获取HTML静态页面参数传递值示例
Aug 18 Javascript
JS鼠标滑过图片时切换图片实现思路
Sep 12 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
Mar 31 Javascript
JavaScript仿支付宝密码输入框
Dec 29 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
Apr 18 Javascript
vuejs router history 配置到iis的方法
Sep 20 Javascript
element-ui table span-method(行合并)的实现代码
Dec 20 Javascript
详解VUE项目中安装和使用vant组件
Apr 28 Javascript
vue实现拖拽的简单案例 不超出可视区域
Jul 25 Javascript
React实现轮播效果
Aug 25 Javascript
window.open()实现post传递参数
Mar 12 #Javascript
js运动动画的八个知识点
Mar 12 #Javascript
js实现最短的XML格式化工具实例
Mar 12 #Javascript
微信中一些常用的js方法汇总
Mar 12 #Javascript
javascript实现checkBox的全选,反选与赋值
Mar 12 #Javascript
jQuery通过扩展实现抖动效果的方法
Mar 11 #Javascript
jQuery实现字符串按指定长度加入特定内容的方法
Mar 11 #Javascript
You might like
php生成4位数字验证码的实现代码
2015/11/23 PHP
PHP abstract与interface之间的区别
2013/11/11 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
原生javascript实现拖动元素示例代码
2014/09/01 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
python在linux中输出带颜色的文字的方法
2014/06/19 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
详解numpy的argmax的具体使用
2019/05/27 Python
python 使用shutil复制图片的例子
2019/12/13 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
Python加速程序运行的方法
2020/07/29 Python
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
Camper鞋西班牙官方网上商店:西班牙马略卡岛的鞋类品牌
2019/03/14 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
SQL Server面试题
2016/10/17 面试题
易程科技软件测试笔试
2013/03/24 面试题
Java语言程序设计测试题选择题部分
2014/04/03 面试题
证婚人经典证婚词
2014/01/09 职场文书
运动会入场词60字
2014/02/15 职场文书
环保建议书100字
2014/05/14 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
php+laravel 扫码二维码签到功能
2021/05/15 PHP
Vue操作Storage本地化存储
2022/04/29 Vue.js