在做产品展示时经常用到,此插件支持两种形式,一种手段左右滚动,一种自动播放。可控制图片显示个数,滚动间隔时间,及动画时间等。
插件参数:
auto:[false,3000] 这里是个数组,第一个是否自动滚动,第二个是自动滚动间隔时间
visible:4 可显示图片的数量
speed:1000 动画时间,可选slow,fast,数值类
scroll:1 每次切换的个数,此数小于等于visible值
使用方法:
首先保证html结构如下:
1 |
<div class="myScroll" id="product0">
|
2 |
<p class="myPrevBtn"></p>
|
3 |
<p class="myNextBtn"></p>
|
4 |
<div class="myBlock">
|
5 |
<ul>
|
6 |
<li>
|
7 |
<dl>
|
8 |
<dt><a href=""><img src="img.jpg" alt="" /></a></dt>
|
9 |
<dd><a href="">图片滚动插件</a></dd>
|
10 |
</dl>
|
11 |
</li>
|
12 |
<li>
|
13 |
<dl>
|
14 |
<dt><a href=""><img src="img.jpg" alt="" /></a></dt>
|
15 |
<dd><a href="">图片滚动插件</a></dd>
|
16 |
</dl>
|
17 |
</li>
|
18 |
<li>
|
19 |
<dl>
|
20 |
<dt><a href=""><img src="img.jpg" alt="" /></a></dt>
|
21 |
<dd><a href="">图片滚动插件</a></dd>
|
22 |
</dl>
|
23 |
</li>
|
24 |
</ul>
|
25 |
</div>
|
26 |
</div>
|
html结构中li里面的形式自己可以根据实际情况修改
css样式:
1 |
*{ margin:0; padding:0}
|
2 |
|
3 |
/*-插件样式*/ |
4 |
.myScroll { |
5 |
width:100%;
|
6 |
height:210px;
|
7 |
overflow:hidden;
|
8 |
zoom:1;
|
9 |
} |
10 |
.myScroll p { |
11 |
width:22px;
|
12 |
height:210px;
|
13 |
background-image:url(icon.gif);
|
14 |
background-repeat:no-repeat;
|
15 |
cursor:pointer
|
16 |
} |
17 |
.myPrevBtn { |
18 |
background-position:left center;
|
19 |
float:left;
|
20 |
display:inline
|
21 |
} |
22 |
.myNextBtn { |
23 |
background-position:right center;
|
24 |
float:right;
|
25 |
display:inline
|
26 |
} |
27 |
.myBlock { |
28 |
overflow:hidden;
|
29 |
float:left;
|
30 |
display:inline
|
31 |
} |
32 |
.myBlock ul { |
33 |
width:100%;
|
34 |
overflow:hidden;
|
35 |
zoom:1;
|
36 |
list-style:none
|
37 |
} |
38 |
.myBlock ul li { |
39 |
width:200px;
|
40 |
float:left;
|
41 |
padding:10px 0;
|
42 |
display:inline
|
43 |
} |
44 |
.myBlock ul li:hover { |
45 |
background-color:#FFC
|
46 |
} |
47 |
.myBlock dl { |
48 |
width:160px;
|
49 |
margin:0 auto;
|
50 |
list-style:none;
|
51 |
} |
52 |
.myBlock dl dt { |
53 |
width:160px;
|
54 |
height:160px;
|
55 |
overflow:hidden;
|
56 |
background-color:#FFF
|
57 |
} |
58 |
.myBlock dl dt img { |
59 |
width:160px;
|
60 |
} |
61 |
.myBlock dl dd { |
62 |
line-height:18px;
|
63 |
list-style:none;
|
64 |
text-align:center
|
65 |
} |
66 |
.myBlock dl dd a { |
67 |
display:inline-block;
|
68 |
padding:3px 0;
|
69 |
width:100%;
|
70 |
} |
71 |
.myClone { |
72 |
overflow:hidden;
|
73 |
zoom:1
|
74 |
} |
75 |
.myClone ul { |
76 |
float:left;
|
77 |
display:inline
|
78 |
} |
调用插件:
1 |
//手动滚动 |
2 |
$("#product0").myScroll({
|
3 |
visible:3,
|
4 |
scroll:2,
|
5 |
speed:1000
|
6 |
});
|
7 |
|
8 |
//自动滚动 |
9 |
$("#product").myScroll({
|
10 |
visible:4,
|
11 |
scroll:3,
|
12 |
auto:[true,2000],
|
13 |
speed:1000
|
14 |
}); |
源代码:
1 |
(function($)
|
2 |
{ |
3 |
$.fn.myScroll = function(options)
|
4 |
{
|
5 |
|
6 |
//默认配置
|
7 |
var defaults = {
|
8 |
auto: [false, 3000],
|
9 |
//是否自动滚动,第二个参数是自动滚动是切换的间隔时间
|
10 |
visible: 4,
|
11 |
//可显示的数量
|
12 |
speed: 1000,
|
13 |
//动画时间,可选slow,fast,数值类
|
14 |
scroll: 1 //每次切换的个数,此数小于等于visible值
|
15 |
};
|
16 |
|
17 |
var opts = $.extend(
|
18 |
{}, defaults, options);
|
19 |
opts.scroll = opts.scroll > opts.visible ? opts.visible : opts.scroll;
|
20 |
|
21 |
this.each(function(i)
|
22 |
{
|
23 |
|
24 |
var prevBtn = $(this).find("p.myPrevBtn"),
|
25 |
nextBtn = $(this).find("p.myNextBtn"),
|
26 |
block = $(this).find("div.myBlock"),
|
27 |
innerBlock = block.find("ul"),
|
28 |
list = block.find('ul>li'),
|
29 |
listNum = list.size(),
|
30 |
listWidth = list.width(),
|
31 |
blockWidth = listWidth * opts.visible,
|
32 |
ntervalId;
|
33 |
|
34 |
//设置宽度样式
|
35 |
$(this).width(blockWidth + prevBtn.width() + nextBtn.width());
|
36 |
block.width(blockWidth).find("ul").width(listWidth * listNum);
|
37 |
|
38 |
//获取已滚动个数
|
39 |
|
40 |
function getSnum()
|
41 |
{
|
42 |
return (parseInt(innerBlock.css("margin-left")) * -1) / listWidth;
|
43 |
}
|
44 |
|
45 |
//获取滚动的距离
|
46 |
|
47 |
function getMove(c)
|
48 |
{
|
49 |
return c >= opts.scroll ? opts.scroll * listWidth : c * listWidth;
|
50 |
}
|
51 |
|
52 |
//单击向前按钮
|
53 |
prevBtn.click(function()
|
54 |
{
|
55 |
var snum = getSnum(),
|
56 |
c = listNum - snum - opts.visible,
|
57 |
m = getMove(c);
|
58 |
|
59 |
if (listNum - snum > opts.visible)
|
60 |
{
|
61 |
innerBlock.animate(
|
62 |
{
|
63 |
"margin-left": "-=" + m
|
64 |
}, opts.speed);
|
65 |
}
|
66 |
});
|
67 |
|
68 |
//单击向后按钮
|
69 |
nextBtn.click(function()
|
70 |
{
|
71 |
var snum = getSnum(),
|
72 |
m = getMove(snum);
|
73 |
|
74 |
if (snum > 0)
|
75 |
{
|
76 |
innerBlock.animate(
|
77 |
{
|
78 |
"margin-left": "+=" + m
|
79 |
}, opts.speed);
|
80 |
}
|
81 |
});
|
82 |
|
83 |
//如果自动滚动
|
84 |
if (opts.auto[0])
|
85 |
{
|
86 |
|
87 |
$(this).width(blockWidth);
|
88 |
prevBtn.hide();
|
89 |
nextBtn.hide();
|
90 |
|
91 |
function auto()
|
92 |
{
|
93 |
var snum = getSnum(),
|
94 |
m = getMove(listNum - snum - opts.visible);
|
95 |
|
96 |
if (listNum - snum > opts.visible)
|
97 |
{
|
98 |
innerBlock.animate(
|
99 |
{
|
100 |
"margin-left": "-=" + m
|
101 |
}, opts.speed);
|
102 |
}
|
103 |
else
|
104 |
{
|
105 |
innerBlock.css("margin-left", 0).find('li').slice(0, listNum - opts.visible).appendTo(innerBlock);
|
106 |
}
|
107 |
}
|
108 |
|
109 |
//当鼠标经过滚动区域停止滚动
|
110 |
block.hover(function()
|
111 |
{
|
112 |
clearInterval(intervalId);
|
113 |
}, function()
|
114 |
{
|
115 |
intervalId = setInterval(auto, opts.auto[1] + Math.abs(opts.speed - opts.auto[1]) + 100);
|
116 |
}).trigger('mouseleave');
|
117 |
|
118 |
}
|
119 |
|
120 |
});
|
121 |
|
122 |
};
|
123 |
|
124 |
})(jQuery); |