www.gusucode.com > 200套html5精品模板1_50 > 200套html5精品模板1_50/032/js/cScroll.js

    //modified
(function($){
	$.fn.extend({
		cScroll:function(o){
			this.each(function(){
				var th=$(this),
					data=th.data('cScroll'),
					_={
						showTrack:true,
						step:'80px',
						duration:150,
						sleep:150,
						easing:'swing',
						pasta:'<div></div>',
						trackCl:'_track',
						trackBGCl:'_trackBG',
						upButtonCl:'_up-butt',
						downButtonCl:'_down-butt',
						shuttleCl:'_shuttle',
						paddingTop:0,
						paddingBottom:0,
                        hoverIn:function(){},
                        hoverOut:function(){},
						preFu:function(){
							if(_.me.css('position')=='static')
								_.me.css({position:'relative',zIndex:1})
							if(_.me.css('zIndex')=='auto')
								_.me.css({zIndex:1})
							_.me.css({overflow:'hidden'})
							_.hH=_.me.height()
							_.hW=_.me.width()
							_.val=0
							_.step=parseInt(_.step)

							_.track=$(_.pasta)
                            _.track
								.addClass(_.trackCl)
								.appendTo(_.me.parent())

							_.altTop=_.track.css('top')=='auto'?false:true
							_.altLeft=_.track.css('left')=='auto'?false:true
							_.altHeight=(_.height=parseInt(_.track.css('height')))==0?false:true
							_.paddingTop=parseInt(_.track.css('paddingTop'))
							_.paddingBottom=parseInt(_.track.css('paddingBottom'))
							
							_.track
								.css({
									position:'absolute',
									zIndex:2,
									padding:0
								})
							_.width=_.track.width()
							if(!_.altLeft)
								_.track.css({left:_.me.prop('offsetLeft')+_.me.outerWidth()-_.width})
							if(!_.altTop)
								_.track.css({top:_.me.prop('offsetTop')})
							_.track.slider({
								min:1,max:100,value:100,
								orientation: "vertical",
								slide:function(e,ui){
									_.shuttle
										.css({
											top:(100-ui.value)+'%'
										})
									_.me.prop({scrollTop:(100-ui.value)*_.delta/100})
								},
								change:function(e,ui){
									_.val=(100-ui.value)*_.delta/99
								}
							})
                            
							var mouseDown = false;
							_.shuttle=$(_.pasta)
							_.shuttle
								.appendTo(_.track)
								.addClass(_.shuttleCl)
								.css({
									marginTop:-_.shuttle.height()/2,
									cursor:'pointer',
									position:'absolute'
								})
                                .hover(
                                function () {_.hoverIn(_.shuttle);},
                                function () {if (!mouseDown) _.hoverOut(_.shuttle);}
                                )
                                .bind('mousedown',function(e){
                                     mouseDown = true;
                                })
                            $('body').bind('mouseup',function(e){
                                mouseDown = false;
                                _.shuttle.trigger('mouseleave');
                            })
                                
							if(!_.shuttle.height())
								_.shuttle.height(_.width)
							_.sH=_.shuttle.height()
							_.track
								.css({
									top:parseInt(_.track.css('top'))+_.sH/2+_.paddingTop,
									bottom:parseInt(_.track.css('bottom'))+_.sH/2+_.paddingBottom,
									height:_.height=!_.altHeight?_.hH-_.sH:_.track.height()-_.sH-_.paddingBottom-_.paddingTop,
									width:_.track.width()
								})
							_.trackBG=$(_.pasta).addClass(_.trackBGCl)
								.appendTo(_.me.parent())
								.css({
									width:_.width,
									height:_.height+_.sH-_.paddingBottom,
									position:'absolute',
									left:_.track.css('left'),
									top:parseInt(_.track.css('top'))-_.sH/2-_.paddingTop,
									zIndex:1,
									backgroundColor:_.track.css('backgroundColor'),
									backgroundImage:_.track.css('backgroundImage'),
									backgroundPosition:_.track.css('backgroundPosition'),
									backgroundRepeat:_.track.css('backgroundRepeat')
								})
							_.track.css('background','none')
								
							_.delta=_.me.prop('scrollHeight')-_.hH
							
							_.upBu=$(_.pasta)
								.appendTo(_.trackBG)
								.addClass(_.upButtonCl)
								.css({
									position:'absolute',
									width:_.width,
									height:_.width,
									left:0,
									top:0,
									cursor:'pointer',
									zIndex:3
								})
								.click(function(){
									_.upFu()
								})
							_.downBu=$(_.pasta)
								.appendTo(_.trackBG)
								.addClass(_.downButtonCl)
								.css({
									position:'absolute',
									width:_.width,
									height:_.width,
									left:0,
									bottom:0,
									cursor:'pointer',
									zIndex:3
								})
								.click(function(){
									_.downFu()
								})
						},
						scrollFu:function(n){
							if(!_.b)
								return false
							_.b=false
							_.val+=n
							_.val=_.val<0?0:_.val
							_.val=_.val<=_.delta?_.val:_.delta
							
							_.me
								.stop()
								.animate({
									scrollTop:_.val
								},{
									duration:_.duration,
									easing:_.easing,
									step:function(now){
										var v=100-now/_.delta*100
										_.track.slider({value:v})
										_.shuttle.css({top:(100-v)+'%'})
								},
									complete:function(){
										_.val=_.me.prop('scrollTop')
									}
								})
							setTimeout(function(){
								_.b=true
							},_.sleep)
						},
						downFu:function(){
							_.scrollFu(_.step)
						},
						upFu:function(){
							_.scrollFu(-_.step)
						},
						wheelFu:function(){
							_.b=true
							_.me.add(_.track)
								.bind('mousewheel',function(e,d){
									if(d<0)
										_.downFu()							
									else
										_.upFu()
									return false
								})
						},
						init:function(){
							_.preFu()
                            if($.fn.mousewheel)
								_.wheelFu()
							if(!_.showTrack)
								_.track.remove(),
								_.trackBG.remove(),
								_.shuttle.remove()
						}                    
					}
				data?_=data:th.data({cScroll:_})
				typeof o=='object'&&$.extend(_,o)
				_.me||_.init(_.me=th)
				
				typeof o=='string'&&(o=='up'||o=='down')&&_[o+'Fu']()
			})
			return this
		}
	})	
})(jQuery)