187 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			187 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| 
								 | 
							
								/*
							 | 
						|||
| 
								 | 
							
									http://www.rjboy.cn
							 | 
						|||
| 
								 | 
							
									By sean at 2010.06 - 2011.03
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									Demo:
							 | 
						|||
| 
								 | 
							
									$(".container").hScrollPane({
							 | 
						|||
| 
								 | 
							
										mover:".press", //指定container对象下的哪个元素需要滚动位置 | 必传项;
							 | 
						|||
| 
								 | 
							
										moverW:function(){return $(".press").width();}(), //传入水平滚动对象的长度值,不传入的话默认直接获取mover的宽度值 | 可选项;
							 | 
						|||
| 
								 | 
							
										handleMinWidth:300, //指定handle的最小宽度,要固定handle的宽度请在css中设定handle的width属性(如 width:28px!important;),不传入则不设定最小宽度 | 可选项;
							 | 
						|||
| 
								 | 
							
										showArrow:true, //指定是否显示左右箭头,默认不显示 | 可选项;
							 | 
						|||
| 
								 | 
							
										dragable:false, //指定是否要支持拖动效果,默认可以拖动 | 可选项;
							 | 
						|||
| 
								 | 
							
										handleCssAlter:"draghandlealter", //指定拖动鼠标时滚动条的样式,不传入该参数则没有变化效果 | 可选项;
							 | 
						|||
| 
								 | 
							
										easing:true, //滚动是否需要滑动效果,默认有滑动效果 | 可选项;
							 | 
						|||
| 
								 | 
							
										mousewheel:{bind:true,moveLength:500} //mousewheel: bind->'true',绑定mousewheel事件; ->'false',不绑定mousewheel事件;moveLength是指定鼠标滚动一次移动的距离,默认值:{bind:true,moveLength:300} | 可选项;
							 | 
						|||
| 
								 | 
							
									});
							 | 
						|||
| 
								 | 
							
								*/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								(function($){
							 | 
						|||
| 
								 | 
							
									$.extend(jQuery.easing,{
							 | 
						|||
| 
								 | 
							
										easeOutQuint: function (x, t, b, c, d) {
							 | 
						|||
| 
								 | 
							
											return c*((t=t/d-1)*t*t*t*t + 1) + b;
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									});
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									$.fn.hScrollPane=function(settings){
							 | 
						|||
| 
								 | 
							
										settings=$.extend(true,{},$.fn.hScrollPane.defaults,settings);
							 | 
						|||
| 
								 | 
							
										this.each(function(){
							 | 
						|||
| 
								 | 
							
											var container=$(this),
							 | 
						|||
| 
								 | 
							
												mover=container.find(settings.mover),
							 | 
						|||
| 
								 | 
							
												w=container.width(),
							 | 
						|||
| 
								 | 
							
												c=settings.moverW || mover.width(),
							 | 
						|||
| 
								 | 
							
												dragbar=(container.find(".hScrollPane_dragbar").length==0 && c>w ) ? container.append('<div class="hScrollPane_dragbar"><div class="hScrollPane_draghandle"></div></div>').find(".hScrollPane_dragbar") : container.find(".hScrollPane_dragbar"),//避免多次初始化时的重复append;
							 | 
						|||
| 
								 | 
							
												handle=dragbar.find(".hScrollPane_draghandle");
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											if(settings.showArrow){
							 | 
						|||
| 
								 | 
							
												container.append('<a href="###" class="hScrollPane_leftarrow"></a><a href="###" class="hScrollPane_rightarrow"></a>');
							 | 
						|||
| 
								 | 
							
												leftArrow=container.find(".hScrollPane_leftarrow");
							 | 
						|||
| 
								 | 
							
												rightArrow=container.find(".hScrollPane_rightarrow");
							 | 
						|||
| 
								 | 
							
												dragbar.css({
							 | 
						|||
| 
								 | 
							
													width:container.width()-leftArrow.outerWidth()*2,
							 | 
						|||
| 
								 | 
							
													left:leftArrow.outerWidth()
							 | 
						|||
| 
								 | 
							
												});
							 | 
						|||
| 
								 | 
							
												leftArrow.unbind();
							 | 
						|||
| 
								 | 
							
												rightArrow.unbind();
							 | 
						|||
| 
								 | 
							
											}else{
							 | 
						|||
| 
								 | 
							
												dragbar.css("width",container.width());	
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											mover.stop().css("left","0px");
							 | 
						|||
| 
								 | 
							
											container.unbind();//避免多次初始化时的事件重复绑定;
							 | 
						|||
| 
								 | 
							
											handle.unbind();
							 | 
						|||
| 
								 | 
							
											dragbar.unbind();
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											handle.stop().css({
							 | 
						|||
| 
								 | 
							
												width:(w/c)*w >settings.handleMinWidth ? (w/c)*w : settings.handleMinWidth,
							 | 
						|||
| 
								 | 
							
												left:0
							 | 
						|||
| 
								 | 
							
											});
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											if(c<w){
							 | 
						|||
| 
								 | 
							
												dragbar.hide();
							 | 
						|||
| 
								 | 
							
												return false;
							 | 
						|||
| 
								 | 
							
											}else{
							 | 
						|||
| 
								 | 
							
												dragbar.show();	
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											// 添加
							 | 
						|||
| 
								 | 
							
											container.bind("mouseenter", function(e){
							 | 
						|||
| 
								 | 
							
												console.log('hover')
							 | 
						|||
| 
								 | 
							
												dragbar.css('opacity', 1);	
							 | 
						|||
| 
								 | 
							
											})
							 | 
						|||
| 
								 | 
							
										    
							 | 
						|||
| 
								 | 
							
											container.bind("mouseleave", function(e){
							 | 
						|||
| 
								 | 
							
												dragbar.css('opacity', 0);	
							 | 
						|||
| 
								 | 
							
												console.log('hover1')
							 | 
						|||
| 
								 | 
							
												return false;
							 | 
						|||
| 
								 | 
							
											})
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											//
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											var maxlen=parseInt(dragbar.width())-parseInt(handle.outerWidth());
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											dragbar.bind("click",function(e){
							 | 
						|||
| 
								 | 
							
												var flag=e.pageX>handle.offset().left+handle.outerWidth() ? -1 : 1;
							 | 
						|||
| 
								 | 
							
												$.fn.hScrollPane.move(settings,mover,handle,w,c,maxlen,flag);
							 | 
						|||
| 
								 | 
							
											});
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											handle.bind("mousedown",function(e){
							 | 
						|||
| 
								 | 
							
												var x=e.pageX;
							 | 
						|||
| 
								 | 
							
												var hx=parseInt(handle.css("left"));
							 | 
						|||
| 
								 | 
							
												if(settings.handleCssAlter){$(this).addClass(settings.handleCssAlter);}
							 | 
						|||
| 
								 | 
							
												
							 | 
						|||
| 
								 | 
							
												$(document).bind("mousemove",function(e){
							 | 
						|||
| 
								 | 
							
													var left=e.pageX-x+hx<0?0:(e.pageX-x+hx>=maxlen?maxlen:e.pageX-x+hx);
							 | 
						|||
| 
								 | 
							
													handle.stop().css({left:left});
							 | 
						|||
| 
								 | 
							
													if(settings.easing){
							 | 
						|||
| 
								 | 
							
														mover.stop().animate({
							 | 
						|||
| 
								 | 
							
															left:-left/maxlen*(c-w)			
							 | 
						|||
| 
								 | 
							
														},{duration:1500,easing:'easeOutQuint',queue:false});
							 | 
						|||
| 
								 | 
							
													}else{
							 | 
						|||
| 
								 | 
							
														mover.css({left:-left/maxlen*(c-w)});
							 | 
						|||
| 
								 | 
							
													}
							 | 
						|||
| 
								 | 
							
													
							 | 
						|||
| 
								 | 
							
													return false;
							 | 
						|||
| 
								 | 
							
												});
							 | 
						|||
| 
								 | 
							
												$(document).bind("mouseup",function(){
							 | 
						|||
| 
								 | 
							
													if(settings.handleCssAlter){handle.removeClass(settings.handleCssAlter);}
							 | 
						|||
| 
								 | 
							
													$(this).unbind("mousemove");
							 | 
						|||
| 
								 | 
							
												})
							 | 
						|||
| 
								 | 
							
												return false;
							 | 
						|||
| 
								 | 
							
											}).click(function(){
							 | 
						|||
| 
								 | 
							
												return false;	
							 | 
						|||
| 
								 | 
							
											})
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											if(settings.dragable){
							 | 
						|||
| 
								 | 
							
												mover.bind("mousedown",function(e){
							 | 
						|||
| 
								 | 
							
													var x=e.pageX;
							 | 
						|||
| 
								 | 
							
													$(this).bind("mousemove",function(e){
							 | 
						|||
| 
								 | 
							
														$.fn.hScrollPane.move(settings,mover,handle,w,c,maxlen,x,e.pageX);
							 | 
						|||
| 
								 | 
							
														return false;
							 | 
						|||
| 
								 | 
							
													})
							 | 
						|||
| 
								 | 
							
													$(document).bind("mouseup",function(){
							 | 
						|||
| 
								 | 
							
														mover.unbind("mousemove");
							 | 
						|||
| 
								 | 
							
													})
							 | 
						|||
| 
								 | 
							
												})
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											if(settings.mousewheel.bind){
							 | 
						|||
| 
								 | 
							
												container.bind("mousewheel",function(event, delta){
							 | 
						|||
| 
								 | 
							
													$.fn.hScrollPane.move(settings,mover,handle,w,c,maxlen,delta);
							 | 
						|||
| 
								 | 
							
													return false;
							 | 
						|||
| 
								 | 
							
												});
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											if(settings.showArrow){
							 | 
						|||
| 
								 | 
							
												leftArrow.click(function(){
							 | 
						|||
| 
								 | 
							
													$.fn.hScrollPane.move(settings,mover,handle,w,c,maxlen,1);
							 | 
						|||
| 
								 | 
							
													return false;
							 | 
						|||
| 
								 | 
							
												}).focus(function(){this.blur();});
							 | 
						|||
| 
								 | 
							
												
							 | 
						|||
| 
								 | 
							
												rightArrow.click(function(){
							 | 
						|||
| 
								 | 
							
													$.fn.hScrollPane.move(settings,mover,handle,w,c,maxlen,-1);
							 | 
						|||
| 
								 | 
							
													return false;
							 | 
						|||
| 
								 | 
							
												}).focus(function(){this.blur();});
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											this.ondragstart=function(){return false;}
							 | 
						|||
| 
								 | 
							
											this.onselectstart=function(){return false;}
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										})
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									$.fn.hScrollPane.defaults = {
							 | 
						|||
| 
								 | 
							
										showArrow:false,
							 | 
						|||
| 
								 | 
							
										handleMinWidth:0,
							 | 
						|||
| 
								 | 
							
										dragable:true,
							 | 
						|||
| 
								 | 
							
										easing:true,
							 | 
						|||
| 
								 | 
							
										mousewheel:{bind:true,moveLength:300}
							 | 
						|||
| 
								 | 
							
									};
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									$.fn.hScrollPane.move=function(settings,mover,handle,w,c,maxlen,x,nx){
							 | 
						|||
| 
								 | 
							
										if(arguments.length==7){
							 | 
						|||
| 
								 | 
							
											var left=parseInt(mover.css("left"))+x*settings.mousewheel.moveLength;
							 | 
						|||
| 
								 | 
							
										}else{
							 | 
						|||
| 
								 | 
							
											var left=parseInt(mover.css("left"))+((nx-x)/w)*(c-w);
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										left=left.toFixed(0);
							 | 
						|||
| 
								 | 
							
										left=left>0?0:left<w-c?w-c:left;
							 | 
						|||
| 
								 | 
							
										var handle_left=(left/(w-c))*maxlen;
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										if(settings.easing){
							 | 
						|||
| 
								 | 
							
											mover.stop().animate({
							 | 
						|||
| 
								 | 
							
												left:left			
							 | 
						|||
| 
								 | 
							
											},{duration:1500,easing:'easeOutQuint',queue:false});
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											handle.stop().animate({
							 | 
						|||
| 
								 | 
							
												left:handle_left			
							 | 
						|||
| 
								 | 
							
											},{duration:1500,easing:'easeOutQuint',queue:false});
							 | 
						|||
| 
								 | 
							
										}else{
							 | 
						|||
| 
								 | 
							
											mover.stop().animate({
							 | 
						|||
| 
								 | 
							
												left:left			
							 | 
						|||
| 
								 | 
							
											},{duration:5,queue:false});
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											handle.css({left:handle_left});
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								})(jQuery);
							 |