以前做过个项目,需求是做一个图片集(图片相册),其中有个小功能是底部带拖动按钮,拖动按钮相册列表一起滚动。当初单独做个拖动按钮没什么问题,问题不知道怎么让上面的内容随着这滚动条一起等比例的滚动,后来这块是由我同事帮忙写的。所以空下来便研究一下,把思路理清自己写个试试,结果比想象中的要简单很多。
当前版本:v1.2
兼容:IE6+、Firefox、Chrome、Safair
HTML CODE:
</pre> <div id="gallery"> <div id="galleryArea"> <ul id="galleryCon"> <li><a href="#"><img alt="" src="images/img1.jpg" /></a></li> <li><a href="#"><img alt="" src="images/img2.jpg" /></a></li> <li><a href="#"><img alt="" src="images/img3.jpg" /></a></li> <li><a href="#"><img alt="" src="images/img4.jpg" /></a></li> <li><a href="#"><img alt="" src="images/img5.jpg" /></a></li> <li><a href="#"><img alt="" src="images/img6.jpg" /></a></li> <li><a href="#"><img alt="" src="images/img7.jpg" /></a></li> <li><a href="#"><img alt="" src="images/img8.jpg" /></a></li> <li><a href="#"><img alt="" src="images/img9.jpg" /></a></li> <li><a href="#"><img alt="" src="images/img10.jpg" /></a></li> </ul> </div> <div id="scrollbar"><a id="scrollBtn" href="javascript:;"></a> <div id="scrollBg"></div> </div> <a id="prevBtn" href="javascript:;"></a> <a id="nextBtn" href="javascript:;"></a></div> <pre>
CSS CODE:
body{
background:url(../images/body_bg.png);
}
#gallery{
position:absolute; top:50%; left:50%;
width:1320px;
margin:-125px 0 0 -672px;
}
#galleryArea{
width:100%;
overflow:hidden;
}
#galleryCon{
height:154px;
padding:13px 0;
margin-bottom:50px;
background-color:#1D1D1F;
background:-webkit-linear-gradient(top, #27252A 0%, #232027 50%, #1D1D1F 50%, #1B1B1D 100%);
box-shadow:0 1px 3px rgba(0,0,0,0.5),inset 0 1px 0 #37343B;
overflow:hidden;
}
#galleryCon li{
float:left;
display:inline;
margin:0 10px;
border:2px solid #37343B;
}
#galleryCon li img{
display:block;
width:240px; height:150px;
}
#scrollbar{
position:relative;
width:500px; height:7px;
margin:0 auto 13px auto;
background:#1A1819;
box-shadow:inset 0 0 5px #0F0D12;
border-radius:6px;
}
#scrollBtn{
display:block;
position:absolute; top:-10px; left:0;
margin-left:0;
width:23px; height:23px;
cursor:pointer;
border:2px solid #151318;
background-color:#1B1B1D;
background:-webkit-linear-gradient(top, #27252A 0%, #232027 50%, #1D1D1F 50%, #1B1B1D 100%);
}
#scrollBg{
position:absolute; top:0; left:0;
height:7px;
background-color:#6B32B5;
background:-webkit-linear-gradient(top, #7532BD, #432364);
border-radius:6px 0 0 6px;
overflow:hidden;
}
#scrollBtn:before{
content:'';
position:absolute; top:7px; left:7px;
width:9px; height:9px;
background-color:#514559;
}
#scrollBtn:hover{
box-shadow:0 0 10px #7337BB;
}
#scrollBtn:hover:before{ /* IE10不支持该方法 */
background-color:#CE9CE1;
box-shadow:0 0 5px #7337BB;
}
/* 扩展 */
#prevBtn, #nextBtn{
display:block;
position:absolute; top:68px;
width:40px; height:40px;
border:2px solid #151318;
box-shadow:inset 0 1px 0 #37343B;
background-color:#1B1B1D;
background:-webkit-linear-gradient(top, #27252A 0%, #232027 50%, #1D1D1F 50%, #1B1B1D 100%);
}
#prevBtn{
left:-50px;
}
#nextBtn{
right:-50px;
}
#prevBtn:before, #nextBtn:before{
content:'';
position:absolute; top:10px;
width:0; height:0;
border-top:10px solid transparent;
border-bottom:10px solid transparent;
}
#prevBtn:before{
left:14px;
border-right:10px solid #514559;
}
#nextBtn:before{
right:14px;
border-left:10px solid #514559;
}
#prevBtn:hover:before{
border-right:10px solid #CE9CE1;
-webkit-filter:drop-shadow(0 1px 8px #7337BB);
}
#nextBtn:hover:before{
border-left:10px solid #CE9CE1;
-webkit-filter:drop-shadow(0 1px 8px #7337BB);
}
JQUERY CODE:
(function($){
/*!
* jQuery Slider Gallery Can Drap
* Copyright (c) 2013, 梦幻神化
* Create: 2013.07.12
* Version: 1.1
* Update: 1. 支持鼠标滚轮滚动 2. 改成插件形式 3. 兼容IE6+ (2013-12-26)
*
* 请保留此信息,如果您有修改或意见可通过网站给我留言
* http://www.bluesdream.com
*/
$(function() {
/* 默认:拖动滚动 */
var $startX = 0,
$startMargin = 0,
$gallery = $("#gallery"), // 容器
$galleryCon = $("#galleryCon"), // 内容区域(滚动区域)
$scrollBtn = $("#scrollBtn"), // 拖动按钮
$scrollBg = $("#scrollBg"), // 按钮背景
$galleryList = $galleryCon.children("li"), // 图片列表
$galleryList_len = $galleryList.length, // 图片数量
$gallery_width = $gallery.width(), // 容器的宽度
$galleryList_width = $galleryList.outerWidth(true), // 单张图片区域的总宽
$galleryList_count = $galleryList_width*$galleryList_len, // 内容宽度(所有图片的宽度总和)
$scrollbar_wdith = $("#scrollbar").outerWidth(), // 滚动条宽度
$scrollBtn_wdith = $scrollBtn.outerWidth(true), // 拖动按钮宽度
$scroll_width = $scrollbar_wdith-$scrollBtn_wdith, // 滚动条拖动范围
$galleryList_max = Math.ceil( $galleryList_len-$gallery_width/$galleryList_width ); // 列表最大数量
$gallery_index = $gallery[$gallery.index()]; // 便于后续扩展
// 初始化
$galleryCon.css('width',$galleryList_count);
// 滚动代码
function scrollTo(distance){
if(distance<0) distance=0;
if(distance>$scroll_width) distance=$scroll_width;
var pos=-Math.ceil((distance/$scroll_width)*($galleryList_count-$gallery_width)); // 向上取整( ( 按钮拖动距离/滚动条拖动范围 ) * ( 内容宽度/容器的宽度 ) )
$galleryCon.css('marginLeft',pos);
$scrollBtn.css('marginLeft',distance);
$scrollBg.css('width',distance);
}
$scrollBtn.on('mousedown',function(e){
var $startX=e.clientX,
$startMargin=parseInt($scrollBtn.css('marginLeft').replace('px',''));
e.preventDefault();
$(document).on('mousemove',function(e){
var distance=e.clientX-$startX+$startMargin;
scrollTo(distance);
window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty(); //禁止拖放对象文本被选择的方法 支持:Chrome、Firefox、Opera、Safari
window.event.returnValue = false; //针对 IE
}).on('mouseup',function() {
$(this).off('mousemove');
});
});
/* 默认结束 */
/* 扩展1:左右点击滚动 */
var $step = 0,
$prevBtn = $("#prevBtn"),
$nextBtn = $("#nextBtn");
function prevScroll(){
if ( !$galleryCon.is(":animated") ) {
$step = -parseInt($galleryCon.css("marginLeft"))/$galleryList_width;
if ( $step > 0 ) {
$step--
barScrollTo( $galleryList_max,$step );
}
}
}
function nextScroll(){
if ( !$galleryCon.is(":animated") ) {
$step = -parseInt($galleryCon.css("marginLeft"))/$galleryList_width;
if ( $step < $galleryList_max ) {
$step++
barScrollTo( $galleryList_max,$step );
};
}
}
$prevBtn.click(function(){
prevScroll();
});
$nextBtn.click(function(){
nextScroll();
});
function barScrollTo(over,step){
var posBtn = Math.ceil( $scroll_width/over*step );
var posArea = -Math.ceil( ($galleryList_count-$gallery_width)/over*step );
$scrollBtn.animate({'marginLeft':posBtn});
$scrollBg.animate({'width':posBtn});
$galleryCon.animate({'marginLeft':posArea});
}
/* 扩展结束 */
/* 扩展2:鼠标滚轮滚动 */
function mousewheel(e) {
var e=e || window.event,
wheelDelta = e.wheelDelta || e.detail;
if( wheelDelta == 120 || wheelDelta == -3 ){
prevScroll();
}else if( wheelDelta == -120 || wheelDelta == 3 ){
nextScroll();
}
}
if( $gallery_index.addEventListener ){
$gallery_index.addEventListener('DOMMouseScroll',mousewheel,false); // Firefox
}
$gallery_index.onmousewheel=mousewheel; // IE/Opera/Chrome
/* 扩展结束 */
});
}(jQuery));
更新日志:
2013.12.26 v1.1(1.支持鼠标滚轮滚动)
2014.03.19 v1.2(1.兼容IE6、7)
感谢您的阅读,本文由 蓝色梦想 版权所有。如若转载,请注明出处:蓝色梦想 - jQuery Slider Gallery(滑动相册 带拖动按钮)
霜之哀伤额 说:
此处有点小BUG,在使用按钮左右滑动的时候没有判断,会滑出边界
March 30, 2015 3:46 pm