126 lines
3.3 KiB
JavaScript
126 lines
3.3 KiB
JavaScript
(function(a){
|
|
function b(b,c){
|
|
function w(a){
|
|
if(!(g.ratio>=1)){
|
|
o.now=Math.min(i[c.axis]-j[c.axis],Math.max(0,o.start+((k?a.pageX:a.pageY)-p.start)));
|
|
n=o.now*h.ratio;
|
|
g.obj.css(l,-n);
|
|
j.obj.css(l,o.now)
|
|
}
|
|
return false
|
|
}
|
|
function v(b){
|
|
a(document).unbind("mousemove",w);
|
|
a(document).unbind("mouseup",v);
|
|
j.obj.unbind("mouseup",v);
|
|
document.ontouchmove=j.obj[0].ontouchend=document.ontouchend=null;
|
|
return false
|
|
}
|
|
function u(b){
|
|
if(!(g.ratio>=1)){
|
|
var b=b||window.event;
|
|
var d=b.wheelDelta?b.wheelDelta/120:-b.detail/3;
|
|
n-=d*c.wheel;
|
|
n=Math.min(g[c.axis]-f[c.axis],Math.max(0,n));
|
|
j.obj.css(l,n/h.ratio);
|
|
g.obj.css(l,-n);
|
|
b=a.event.fix(b);
|
|
b.preventDefault()
|
|
}
|
|
}
|
|
function t(b){
|
|
p.start=k?b.pageX:b.pageY;
|
|
var c=parseInt(j.obj.css(l));
|
|
o.start=c=="auto"?0:c;
|
|
a(document).bind("mousemove",w);
|
|
document.ontouchmove=function(b){
|
|
a(document).unbind("mousemove");
|
|
w(b.touches[0])
|
|
};
|
|
a(document).bind("mouseup",v);
|
|
j.obj.bind("mouseup",v);
|
|
j.obj[0].ontouchend=document.ontouchend=function(b){
|
|
a(document).unbind("mouseup");
|
|
j.obj.unbind("mouseup");
|
|
v(b.touches[0])};
|
|
return false
|
|
}
|
|
function s(){
|
|
j.obj.bind("mousedown",t);
|
|
j.obj[0].ontouchstart=function(a){
|
|
a.preventDefault();
|
|
j.obj.unbind("mousedown");
|
|
t(a.touches[0]);
|
|
return false
|
|
};
|
|
i.obj.bind("mouseup",w);
|
|
if(c.scroll&&this.addEventListener){
|
|
e[0].addEventListener("DOMMouseScroll",u,false);
|
|
e[0].addEventListener("mousewheel",u,false)
|
|
}else if(c.scroll){
|
|
e[0].onmousewheel=u
|
|
}
|
|
}
|
|
function r(){
|
|
j.obj.css(l,n/h.ratio);
|
|
g.obj.css(l,-n);
|
|
p["start"]=j.obj.offset()[l];
|
|
var a=m.toLowerCase();
|
|
h.obj.css(a,i[c.axis]);
|
|
i.obj.css(a,i[c.axis]);
|
|
j.obj.css(a,j[c.axis])
|
|
}
|
|
function q(){
|
|
d.update();
|
|
s();
|
|
return d
|
|
}
|
|
var d=this;
|
|
var e=b;
|
|
var f={obj:a(".viewport",b)};
|
|
var g={obj:a(".overview",b)};
|
|
var h={obj:a(".scrollbar",b)};
|
|
var i={obj:a(".track",h.obj)};
|
|
var j={obj:a(".thumb",h.obj)};
|
|
var k=c.axis=="x",
|
|
l=k?"left":"top",
|
|
m=k?"Width":"Height";
|
|
var n,
|
|
o={start:0,now:0},
|
|
p={};
|
|
this.update=function(a){
|
|
f[c.axis]=f.obj[0]["offset"+m];
|
|
g[c.axis]=g.obj[0]["scroll"+m];
|
|
g.ratio=f[c.axis]/g[c.axis];
|
|
h.obj.toggleClass("disable",g.ratio>=1);
|
|
i[c.axis]=c.size=="auto"?f[c.axis]:c.size;
|
|
j[c.axis]=Math.min(i[c.axis],Math.max(0,c.sizethumb=="auto"?i[c.axis]*g.ratio:c.sizethumb));
|
|
h.ratio=c.sizethumb=="auto"?g[c.axis]/i[c.axis]:(g[c.axis]-f[c.axis])/(i[c.axis]-j[c.axis]);
|
|
n=a=="relative"&&g.ratio<=1?Math.min(g[c.axis]-f[c.axis],Math.max(0,n)):0;
|
|
n=a=="bottom"&&g.ratio<=1?g[c.axis]-f[c.axis]:isNaN(parseInt(a))?n:parseInt(a);
|
|
r()
|
|
};
|
|
return q()
|
|
}
|
|
a.tiny=a.tiny||{};
|
|
a.tiny.scrollbar={
|
|
options:{
|
|
axis:"y",
|
|
wheel:40,
|
|
scroll:true,
|
|
size:"auto",
|
|
sizethumb:"auto"
|
|
}
|
|
};
|
|
a.fn.tinyscrollbar=function(c){
|
|
var c=a.extend({},a.tiny.scrollbar.options,c);
|
|
this.each(function(){
|
|
a(this).data("tsb",new b(a(this),c))
|
|
});
|
|
return this
|
|
};
|
|
a.fn.tinyscrollbar_update=function(b){
|
|
return a(this).data("tsb").update(b)
|
|
};
|
|
})
|
|
(jQuery) |