利用者:Jkr2255/independentlyScrollableSidebar-dev.js
表示
お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。
多くの Windows や Linux のブラウザ
- Ctrl を押しながら F5 を押す。
Mac における Safari
Mac における Chrome や Firefox
- ⌘ Cmd と ⇧ Shift を押しながら R を押す。
詳細についてはWikipedia:キャッシュを消すをご覧ください。
jQuery(function(){
var $panel=$('#mw-panel');
$('<div id="iss-base"><div id="iss-top"></div></div>').appendTo('body');
$('#iss-base,#iss-top').width($panel.outerWidth(true));
var toppos=$panel.position().top;
var $top=$('#iss-top').css('top',toppos);
var $base=$('#iss-base');
$panel.appendTo($top).css('top',0);
$('#p-logo').appendTo("body").css('top',0).css('position','fixed');
var $up=$('<div class="iss-btn up">▲</div>').appendTo($top);
var $down=$('<div class="iss-btn down">▼</div>').appendTo($base);
//枠線が見えるように幅を4px調整
$('div.iss-btn').width($base.width()-4);
//スクロール制御用の関数たち
var stopScroll=function(e){
$panel.stop(true);
};
var isUpScrollable=function(){
return ($panel.position().top) != 0;
};
var getDownScrollRange=function(){
return ($panel.outerHeight(true)+$panel.position().top) -
($base.height() - toppos);
};
var isDownScrollable=function(){
return getDownScrollRange()>0;
};
function drawButtons (){
$up.toggle(isUpScrollable());
$down.toggle(isDownScrollable());
}
function minTop(){
return ($base.height() - toppos)-$panel.outerHeight();
}
$(window).resize(drawButtons);
// 開閉の待ち時間
$panel.find("h5").click(function(){
window.setTimeout(drawButtons,500)
});
drawButtons();
if(typeof(issSpeed)=="undefined") issSpeed=250;
$('div.iss-btn').mouseleave(function(e){
$panel.stop(true);
drawButtons();
});
$down.mouseenter(function(e){
if(!isDownScrollable()) return;
var scrollTime=getDownScrollRange() * 1000 / issSpeed;
$panel.animate({top: minTop()},scrollTime,'linear',drawButtons);
});
$up.mouseenter(function(e){
if(!isUpScrollable()) return;
var scrollTime=-$panel.position().top;
scrollTime=scrollTime * 1000 / issSpeed;
$panel.animate({top: 0},scrollTime,'linear',drawButtons);
});
function wheelMain(e,delta){
if(typeof(issWheelSpeed)=="undefined") issWheelSpeed=20;
var y,s;
e.preventDefault();
y=delta*issWheelSpeed+$panel.position().top;
if(delta>0){
if(!isUpScrollable())return;
if(y>0){ y=0; }
} else {
if(!isDownScrollable())return;
if(y<minTop()){y=minTop();}
}
$panel.css('top',y);
drawButtons();
}
//ホイール関連
if(window.opera||typeof($top.get(0).onmousewheel)!='undefined') {
$top.bind("mousewheel",function(e){ // other than Gecko
wheelMain(e,e.wheelDelta/120);
});
} else {
$top.bind("DOMMouseScroll",function(e){ //Gecko
wheelMain(e,e.detail/(-3));
});
}
});