jquery 多行滚动代码(附详细解释)


Posted in Javascript onJune 17, 2010
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<title>无标题文档</title> 
<style type="text/css"> 
ul,li{margin:0;padding:0} 
#scrollDiv{width:300px;height:100px;min-height:25px;line-height:25px;border:#ccc 1px solid;overflow:hidden} 
#scrollDiv li{height:25px;padding-left:10px;} 
</style> 
<script type="text/javascript" src="jquery-1.1.3.pack.js"></script> 
<script type="text/javascript"> 
(function($){ 
$.fn.extend({ 
Scroll:function(opt,callback){ 
//参数初始化 
if(!opt) var opt={}; 
var _btnUp = $("#"+ opt.up);//Shawphy:向上按钮 
var _btnDown = $("#"+ opt.down);//Shawphy:向下按钮 
var timerID; 
var _this=this.eq(0).find("ul:first"); 
var lineH=_this.find("li:first").height(), //获取行高 
line=opt.line?parseInt(opt.line,10):parseInt(this.height()/lineH,10), //每次滚动的行数,默认为一屏, 
即父容器高度 
speed=opt.speed?parseInt(opt.speed,10):500; //卷动速度,数值越大,速度越慢(毫秒) 
timer=opt.timer //?parseInt(opt.timer,10):3000; //滚动的时间间隔(毫秒) 
if(line==0) line=1; 
var upHeight=0-line*lineH; 
//滚动函数 
var scrollUp=function(){ 
_btnUp.unbind("click",scrollUp); //Shawphy:取消向上按钮的函数绑定 
_this.animate({ 
marginTop:upHeight 
},speed,function(){ 
for(i=1;i<=line;i++){ 
_this.find("li:first").appendTo(_this); 
} 
_this.css({marginTop:0}); 
_btnUp.bind("click",scrollUp); //Shawphy:绑定向上按钮的点击事件 
}); 
} 
//Shawphy:向下翻页函数 
var scrollDown=function(){ 
_btnDown.unbind("click",scrollDown); 
for(i=1;i<=line;i++){ 
_this.find("li:last").show().prependTo(_this); 
} 
_this.css({marginTop:upHeight}); 
_this.animate({ 
marginTop:0 
},speed,function(){ 
_btnDown.bind("click",scrollDown); 
}); 
} 
//Shawphy:自动播放 
var autoPlay = function(){ 
if(timer)timerID = window.setInterval(scrollUp,timer); 
}; 
var autoStop = function(){ 
if(timer)window.clearInterval(timerID); 
}; 
//鼠标事件绑定 
_this.hover(autoStop,autoPlay).mouseout(); 
_btnUp.css("cursor","pointer").click( scrollUp ).hover(autoStop,autoPlay);//Shawphy:向上向下鼠标事件绑定 
_btnDown.css("cursor","pointer").click( scrollDown ).hover(autoStop,autoPlay); 
} 
}) 
})(jQuery); 
$(document).ready(function(){ 
$("#scrollDiv").Scroll({line:4,speed:500,timer:3000,up:"btn2",down:"btn1"}); 
}); 
</script> 
</head> 
<body> 
<p>多行滚动演示:</p> 
<div id="scrollDiv"> 
<ul> 
<li>这是公告标题的第一行</li> 
<li>这是公告标题的第二行</li> 
<li>这是公告标题的第三行</li> 
<li>这是公告标题的第四行</li> 
<li>这是公告标题的第五行</li> 
<li>这是公告标题的第六行</li> 
<li>这是公告标题的第七行</li> 
<li>这是公告标题的第八行</li> 
</ul> 
</div> 
<span id="btn1">down</span> 
<br/> 
<span id="btn2">up</span> 
件 
</body> 
</html>

这段代码只是多行滚动。

1。首先一个<div id="scrollDiv">高度限制是100px,而每行是25px,总共只能显示4行,但div中有八行。那怎么显示呢?

scrollDiv属性中有个overflow:hidden表示不能显示的则隐藏。

2。第二个问题是 哪四行显示在<div id="scrollDiv">中,由于_this.find("li:first").appendTo(_this);将前面的四行剪切插入到后面,并且设置高度是从0开始,这样就只能显示前四行。_this.find("li:last").show().prependTo(_this);同理将后面四行插入到前面去。

3。第三个问题是animate,它是jquery的一个函数,起到动画效应。但_btnDown.unbind("click",scrollDown);为何绑定了又要解开呢。这是因为当点击down时,将执行scrollDown函数,当执行到里面去时要解开绑定,以免此时再点击down时又执行scrollDown函数,导致混乱,只有执行完滚动后再绑定。

4。当不点击时,也会自动滚动。那时因为有个_this.hover(autoStop,autoPlay).mouseout();

jQuery中的hover方法是个非常常用的方法,接受二个参数,第一个参数为鼠标移入对象时触发的事件,第二个参数为鼠标移出对象时触发的事
5。$("#scrollDiv").Scroll({line:4,speed:500,timer:3000,up:"btn2",down:"btn1"});调用了Scroll 执行了:function(opt,callback),这里面却只传了opt,这里面没有callback函数。而且传参数也非常奇怪。不过就当它能这样传,相当于一个object,传过来也。

希望懂得更多的拍砖。

Javascript 相关文章推荐
JavaScript面向对象编程
Mar 02 Javascript
ExtJS Store的数据访问与更新问题
Apr 28 Javascript
JavaScript中getUTCSeconds()方法的使用详解
Jun 11 Javascript
纯js代码制作的网页时钟特效【附实例】
Mar 30 Javascript
js改变style样式和css样式的简单实例
Jun 28 Javascript
JavaScript与java语言有什么不同
Sep 22 Javascript
功能强大的jquery.validate表单验证插件
Nov 07 Javascript
利用JS轻松实现获取表单数据
Dec 06 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
Dec 08 Javascript
Bootstrap面板(Panels)的简单实现代码
Mar 17 Javascript
微信小程序组件 marquee实例详解
Jun 23 Javascript
jQuery选择器之基本过滤选择器用法实例分析
Feb 19 jQuery
关于juqery radio写法的兼容性问题(新老版本jquery)
Jun 14 #Javascript
jQuery+jqmodal弹出窗口实现代码分明
Jun 14 #Javascript
ExtJS 设置级联菜单的默认值
Jun 13 #Javascript
js 未结束的字符串常量错误解决方法
Jun 13 #Javascript
JSON 和 JavaScript eval使用说明
Jun 13 #Javascript
ExtJS PropertyGrid中使用Combobox选择值问题
Jun 13 #Javascript
js null undefined 空区别说明
Jun 13 #Javascript
You might like
十天学会php之第六天
2006/10/09 PHP
php中文字母数字验证码实现代码
2008/04/25 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
jquery对表单操作2
2011/04/06 Javascript
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
2012/01/15 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
2013/12/29 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
浅析AngularJS Filter用法
2015/12/28 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
AngularJS 2.0入门权威指南
2016/10/08 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
在python中pandas的series合并方法
2018/11/12 Python
python集合是否可变总结
2019/06/20 Python
Python中的 ansible 动态Inventory 脚本
2020/01/19 Python
基于PyTorch中view的用法说明
2021/03/03 Python
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
加拿大花店:1800Flowers.ca
2016/11/16 全球购物
阳光体育活动方案
2014/02/16 职场文书
2014年秋季开学演讲稿
2014/05/24 职场文书
婚礼证婚人演讲稿
2014/09/13 职场文书
公司财务会计主管应聘求职信
2014/09/26 职场文书
2014年向国旗敬礼活动总结
2014/09/27 职场文书
2015年班组工作总结
2015/04/20 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书