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 相关文章推荐
js 强制弹出窗口代码研究-又一款代码
Mar 20 Javascript
ie支持function.bind()方法实现代码
Dec 27 Javascript
Javscript删除数组中指定元素并返回新数组
Mar 06 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
Nov 01 Javascript
一览画面点击复选框后获取多个id值的方法
May 30 Javascript
javascript中sort排序实例详解
Jul 24 Javascript
BootStrap tab选项卡使用小结
Aug 09 Javascript
详解jquery easyui之datagrid使用参考
Dec 05 Javascript
Vue原理剖析 实现双向绑定MVVM
May 03 Javascript
在axios中使用params传参的时候传入数组的方法
Sep 25 Javascript
开发Node CLI构建微信小程序脚手架的示例
Mar 27 Javascript
javascript中导出与导入实现模块化管理教程
Dec 03 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
非常好用的Zend Framework分页类
2014/06/25 PHP
js控制的回到页面顶端goTop的代码实现
2013/03/20 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
JavaScript数组_动力节点Java学院整理
2017/06/26 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
如何基于JS截获动态代码
2019/12/25 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
儿童编程python入门
2018/05/08 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
python matlibplot绘制3D图形
2018/07/02 Python
python实现flappy bird小游戏
2018/12/24 Python
python截取两个单词之间的内容方法
2018/12/25 Python
python实现维吉尼亚算法
2019/03/20 Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
2020/02/18 Python
法院实习人员自我鉴定
2013/09/26 职场文书
临床医学专业毕业生的自我评价
2013/10/17 职场文书
质检员岗位职责
2013/12/17 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
优秀党员获奖感言
2014/02/18 职场文书
高考寄语大全
2014/04/08 职场文书
护理专业自荐书
2014/06/04 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
检察院起诉书
2015/05/20 职场文书
单位证明范文
2015/06/18 职场文书
关于幸福的感言
2015/08/03 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
python 离散点图画法的实现
2022/04/01 Python