ダイナミックTABを作成しました。独占する勇気がないので、それを書いてみんなと共有しました。赤ちゃんの妊娠チャートのホームページにアクセスして、効果を確認できます。
この実装は、js を通じて div のscrollLeft 属性を制御することで実現されます。タブはタブヘッダー部分とタブ本体部分の 2 つの部分に分かれており、この div のオーバーフローは非常に広いレイヤーです。マウスが移動したとき 別のタブラベルに移動するときは、タブ本体のscrollLeft属性を徐々に変更します。
実装されたjsコードは次のとおりです:
/* スクロール */
var Scroller = Class.create();
Scroller.prototype = {
初期化: function (options){
this .commandsWrapId = options.commandsWrapId;
この .scrollWrapId = options.scrollWrapId;
この .sectionWidth = options.sectionWidth;
この .step = options.step;
},
scrollTo : function (ev){
if ( ! ev)ev = window.event;
var otriger = getSrcElement(ev);
while (otriger && otriger.tagName != ' LI ' ){
otriger = otriger.parentNode;
}
Scroller.runningInstance = otriger.scroller;
var instance = otriger.scroller;
for ( var i = 0 ;i
}
otriger.className = ' コマンドが選択されました ' ;
var index = otriger.scrollIndex;
if (instance.interval)window.clearInterval(instance.interval);
instance.targetLeft = index * instance.sectionWidth;
// 計算 1 ステップ、指定された位置まで 500 ミリ秒以内に要求
instance.step = Math.abs((instance.targetLeft - instance.wrap.scrollLeft) / 25);
instance.interval = window.setInterval(instance.scrollByStep, 10 );
},
scrollByStep : function (){
var i = Scroller.runningInstance;
var current = parseInt(i.wrap.scrollLeft);
if (current > i.targetLeft){
if (current - i.targetLeft < i.step)i.wrap.scrollLeft = i.targetLeft;
else i.wrap.scrollLeft = i.wrap.scrollLeft - i.step ;
} else if (current < i.targetLeft){
if (i.targetLeft - current < i.step)i.wrap.scrollLeft = i.targetLeft;
else i.wrap.scrollLeft = i.wrap.scrollLeft + i.step;
} else {
if (i.interval){
window.clearInterval(i.interval);
}
}
},
bindEvent : function (scroller){
scroller.wrap = $id(scroller.scrollWrapId);
var ocommands = $id(scroller.commandsWrapId);
var olis = $tagsC( ' LI ' , ' command ' ,ocommands);
scroller.triggers = オリス;
if (olis){
for ( var i = 0 ;i < olis.length;i ++ ){
olis[i].scrollIndex = i;
olis[i].scroller = スクローラー;
addEvent(olis[i], ' マウスオーバー ' ,scroller.scrollTo);
}
}
};
必要な css と js 代码の如く以下:
コード