自己模仿JQ插件的写法写了一个循环滚动列表插件,支持自定义上、下、左、右四个方向,支持平滑滚动或者间断滚动两种方式,都是通过参数设置。JQ里面有些重复的地方,暂时没想到更好的方法去精简。不过效果还是可以的,如下(效果图上传后都加速了,实际效果比这个要慢很多):
HTML代码如下:
<Meta charset="utf-8">
循环滚动列表
css样式如下:
Boxs {
padding: 15px;
margin: 0 auto 30px;
background-color: #e4fbff;
}
.Box01 { width: 870px; }
.Box02 {
float: left;
width: 400px;
}
.Box03 {
float: right;
width: 400px;
}
.Box04 { width: 720px; }
/* 具体样式 ---------- */
/* 通用必需样式 */ /* PS:有些重要样式在js里先写好了,下面id容器、ul和li标签的样式比较重要 */
.autoBox {
position: relative;
margin: 0 auto;
overflow: hidden;
}
.autoBox ul {
position: absolute;
list-style: none;
z-index: 2;
}
/* 第一、四个列表 */ /* PS:左右滚动型列表需要css定义高度,li标签可以有margin值 */
#autoScroll01,#autoScroll04 {
width: auto;
height: 174px;
}
#autoScroll01 ul li,#autoScroll04 ul li {
float: left;
width: 128px;
height: 168px;
padding: 3px;
margin: 0 5px;
_display: inline;
}
#autoScroll01 li a,#autoScroll04 li a {
display: block;
padding: 3px;
border: 1px solid #dbdbdb;
Box-shadow: 0 0 3px rgba(170,223,252,0.5);
}
#autoScroll01 li a:hover,#autoScroll04 li a:hover {
border-color: #71ddff;
Box-shadow: 0 0 3px rgba(77,185,245,.90);
}
#autoScroll01 li img,#autoScroll04 li img {
display: block;
width: 120px;
height: 160px;
}
/* 第二、三个列表 */ /* PS:上下滚动型列表需要css定义宽度,li标签尽量不要设置margin值 */
#autoScroll02,#autoScroll03 {
width: 100%;
height: auto;
}
#autoScroll02 ul li {
height: 30px;
line-height: 30px;
overflow: hidden;
}
#autoScroll03 ul li {
height: 40px;
line-height: 40px;
overflow: hidden;
}
#autoScroll02 li a,#autoScroll03 li a {
display: block;
width: 100%;
height: 24px;
line-height: 24px;
margin: 3px 0;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
#autoScroll03 li a { margin: 8px 0; }
js代码如下:
调用
case 'left': sroLeft();
break;
case 'right':sroRight();
break;
case 'up': sroUp();
break;
case 'down': sroDown();
break;
};
function sroLeft(){ //向左滚动事件
$ul.css("left",0);
var left;
function leftMoving(){
var dis = -o.distance,dif = -o.liWidth * (len - o.showNum);
left = parseFloat($ul.css("left"));
if (left <= dif){
$ul.css("left",0);
left = 0;
$ul.delay(o.interval);
};
var ltDis = left + dis;
if(ltDis <= dif){
ltDis = dif;
};
$ul.animate({"left":ltDis+"px"},o.speed);
};
$ul.hover( //鼠标移上、移下的阻止与恢复滚动
function(){
clearInterval(fnLeft);
},function(){
fnLeft = setInterval(function(){leftMoving()},o.interval);
}
);
fnLeft = setInterval(function(){leftMoving()},o.interval);
};
function sroRight(){ //向右滚动事件
$ul.css("right",0);
var right;
function rightMoving(){
var dis = -o.distance,dif = -o.liWidth * (len - o.showNum);
right = parseFloat($ul.css("right"));
if (right <= dif){
$ul.css("right",0);
right = 0;
$ul.delay(o.interval);
};
var rtDis = right + dis;
if(rtDis <= dif){
rtDis = dif;
};
$ul.animate({"right":rtDis+"px"},o.speed);
};
$ul.hover(
function(){
clearInterval(fnRight);
},function(){
fnRight = setInterval(function(){rightMoving()},o.interval);
}
);
fnRight = setInterval(function(){rightMoving()},o.interval);
};
function sroUp(){ //向上滚动事件
$ul.css("top",0);
var top;
function upMoving(){
var dis = -o.distance,dif = -o.liHeight * (len - o.showNum);
top = parseFloat($ul.css("top"));
if (top <= dif){
$ul.css("top",0);
top = 0;
$ul.delay(o.interval);
};
var tpDis = top + dis;
if(tpDis <= dif){
tpDis = dif;
};
$ul.animate({"top":tpDis+"px"},o.speed);
};
$ul.hover(
function(){
clearInterval(fnUp);
},function(){
fnUp = setInterval(function(){upMoving()},o.interval);
}
);
fnUp = setInterval(function(){upMoving()},o.interval);
};
function sroDown(){ //向下滚动事件
$ul.css("bottom",0);
var bottom;
function downMoving(){
var dis = -o.distance,dif = -o.liHeight * (len - o.showNum);
bottom = parseFloat($ul.css("bottom"));
if (bottom <= dif){
$ul.css("bottom",0);
bottom = 0;
$ul.delay(o.interval);
};
var bmDis = bottom + dis;
if(bmDis <= dif){
bmDis = dif;
};
$ul.animate({"bottom":bmDis+"px"},o.speed);
};
$ul.hover(
function(){
clearInterval(fnDown);
},function(){
fnDown = setInterval(function(){downMoving()},o.interval);
}
);
fnDown = setInterval(function(){downMoving()},o.interval);
};
});
};
})(jQuery);
兼容到IE6+,jq库用1.7+的都没问题 。