上の画像は「タブが多すぎます」の例です。デフォルトでは複数行で表示されます。
ただし、最初のタブの前と最後のタブの後に2つの矢印を追加するか、自動的にスクロールしても問題ないように、1行で水平方向にスクロールできるようにします。
タブのスクロールは直感に反すると思うので、この問題には別のアプローチがあります。タブが2行目に分割されたときにドロップダウンを実行するプラグインを作成しました。
私は最近これに対する解決策を探していましたが、他のプラグイン/例はどれもjQuery 1.9+で動作しないようでした。また、「詳細」タブを作成し、ドロップダウンとして追加のタブを表示するというジェイソンの答えが最良だと思いますUIの経験があるので、私は彼の答えを拡張し、1.9 +のjQueryプラグインを作成しました。これは、すべての幅の合計があれば、jQueryUIタブを拡張します。タブがタブコンテナの幅を超えると、追加のタブがドロップダウンにグループ化されます。
JSFiddle Demo を確認して、実際の動作を確認できます。ブラウザウィンドウのサイズを変更して、機能することを確認してください。
または、 JSFiddle で完全なプラグインコードを表示できます。
「オーバーフロータブ」の初期化は次のように簡単です。
$("#tabs").tabs({
overflowTabs: true,
tabPadding: 23,
containerPadding: 40,
dropdownSize: 50
});
tabPadding
は、タブ内のテキストの周囲のパディングのピクセル数です。
containerPadding
はコンテナのパディングです。
dropdownSize
は、ドロップダウンセレクターボタンのピクセルサイズです
これを最新バージョンのChrome
、Firefox
、およびIE
でテストしました。問題を見つけたり、これを改善できる場合は、遠慮なくフォークして先に進んでください。
GitHub でも利用できるようになりました。
ここにリストされているプラグインはどれも私にとってはうまく機能しませんでした(ほとんどは古く、jQuery 2.0+と互換性がありません)が、最終的にこれを見つけました: https://github.com/joshreed/jQuery-ScrollTabs .. 。リストに追加する価値があります。
このための非常に単純なプラグインを作成しました。基本的に、タブナビゲーターに固定長のdivと移動可能なdivを1つずつ追加する必要があります。
プラグインコード:
(function ($) {
var settings = {
barheight: 38
}
$.fn.scrollabletab = function (options) {
var ops = $.extend(settings, options);
var ul = this.children('ul').first();
var ulHtmlOld = ul.html();
var tabBarWidth = $(this).width()-60;
ul.wrapInner('<div class="fixedContainer" style="height: ' + ops.barheight + 'px; width: ' + tabBarWidth + 'px; overflow: hidden; float: left;"><div class="moveableContainer" style="height: ' + ops.barheight + 'px; width: 5000px; position: relative; left: 0px;"></div></div>');
ul.append('<div style="width: 20px; float: left; height: ' + (ops.barheight - 2) + 'px; margin-left: 5px; margin-right: 0;"></div>');
var leftArrow = ul.children().last();
leftArrow.button({ icons: { secondary: "ui-icon ui-icon-carat-1-w" } });
leftArrow.children('.ui-icon-carat-1-w').first().css('left', '2px');
ul.append('<div style="width: 20px; float: left; height: ' + (ops.barheight - 2) + 'px; margin-left: 1px; margin-right: 0;"></div>');
var rightArrow = ul.children().last();
rightArrow.button({ icons: { secondary: "ui-icon ui-icon-carat-1-e" } });
rightArrow.children('.ui-icon-carat-1-e').first().css('left', '2px');
var moveable = ul.find('.moveableContainer').first();
leftArrow.click(function () {
var offset = tabBarWidth / 6;
var currentPosition = moveable.css('left').replace('px', '') / 1;
if (currentPosition + offset >= 0) {
moveable.stop().animate({ left: '0' }, 'slow');
}
else {
moveable.stop().animate({ left: currentPosition + offset + 'px' }, 'slow');
}
});
rightArrow.click(function () {
var offset = tabBarWidth / 6;
var currentPosition = moveable.css('left').replace('px', '') / 1;
var tabsRealWidth = 0;
ul.find('li').each(function (index, element) {
tabsRealWidth += $(element).width();
tabsRealWidth += ($(element).css('margin-right').replace('px', '') / 1);
});
tabsRealWidth *= -1;
if (currentPosition - tabBarWidth > tabsRealWidth) {
moveable.stop().animate({ left: currentPosition - offset + 'px' }, 'slow');
}
});
return this;
}; })(jQuery);
http://jsfiddle.net/Bua2d/ でチェックしてください
そのためのプラグインは次のとおりです。 http://jquery.aamirafridi.com/jst/
jQueryプラグインも作成しました ここ ですが、私の主な焦点はモバイルサイト用のそのような構造の作成でしたスペースが少なく、touchやコントロール矢印を使用して水平方向にスクロールすることもできます。
解決策は次のようになります。
私はBootstrapを使用しており、プラグインを実装するには、基本的に次のものを含める必要があります。
あなたのHTMLでは、矢印が正しく機能するように次の構造を使用しています(私はfont-awesomeを使用しています)
<div id="js_image_selection" class="horizontal-scrollable-tabs">
<div class="scroller arrow-left"><i class="fa fa-arrow-left"></i></div>
<div class="scroller arrow-right"><i class="fa fa-arrow-right"></i></div>
<div class="horizontal-tabs">
<ul role="tablist" class="nav nav-tabs nav-tabs-horizontal">
<li role="presentation" class="active"><a href="#image01" data-toggle="tab"><img src="external/images/t-shirt-white.jpg"/></a></li>
<li role="presentation"><a href="#image02" data-toggle="tab"><img src="external/images/t-shirt-orange.jpg"/></a></li>
<li role="presentation"><a href="#image03" data-toggle="tab"><img src="external/images/t-shirt-green.jpg"/></a></li>
<li role="presentation"><a href="#image01" data-toggle="tab"><img src="external/images/t-shirt-white.jpg"/></a></li>
<li role="presentation"><a href="#image02" data-toggle="tab"><img src="external/images/t-shirt-orange.jpg"/></a></li>
<li role="presentation"><a href="#image03" data-toggle="tab"><img src="external/images/t-shirt-green.jpg"/></a></li>
<li role="presentation"><a href="#image01" data-toggle="tab"><img src="external/images/t-shirt-white.jpg"/></a></li>
<li role="presentation"><a href="#image02" data-toggle="tab"><img src="external/images/t-shirt-orange.jpg"/></a></li>
<li role="presentation"><a href="#image03" data-toggle="tab"><img src="external/images/t-shirt-green.jpg"/></a></li>
</ul>
</div>
</div>
そして、あなたにJsを呼んでください:
$("#js_image_selection").horizontalTabs();
それが将来誰にでも役立つことを願っています!乾杯!
Re:AndréLourenço-すばらしいアドオンです。ウィンドウのサイズ変更時にスクローラーのサイズを変更できるようにするための調整が必要なハックを投入したかっただけです(つまり、モバイルデバイスを回転させます)。
if(!$(".fixedContainer").length) {
ul.wrapInner('<div class="fixedContainer" style="height: ' + ops.barheight + 'px; width: ' + tabBarWidth + 'px; overflow: hidden; float: left;"><div class="moveableContainer" style="height: ' + ops.barheight + 'px; width: 5000px; position: relative; left: 0px;"></div></div>');
ul.append('<div class="leftBtn" style="width: 40px; float: left; height: ' + (ops.barheight - 2) + 'px; margin-left: 5px; margin-right: 0;"></div>');
var leftArrow = ul.children().last();
leftArrow.button({ icons: { secondary: "ui-icon ui-icon-carat-1-w" } });
leftArrow.children('.ui-icon-carat-1-w').first().css('text-align', 'center');
ul.append('<div class="rightBtn" style="width: 40px; float: left; height: ' + (ops.barheight - 2) + 'px; margin-left: 1px; margin-right: 0;"></div>');
var rightArrow = ul.children().last();
rightArrow.button({ icons: { secondary: "ui-icon ui-icon-carat-1-e" } });
rightArrow.children('.ui-icon-carat-1-e').first().css('text-align', 'center');
} else {
var leftArrow = $(".leftBtn");
var rightArrow = $(".rightBtn");
$(".fixedContainer").css("width", tabBarWidth);
}
次に、ウィンドウのサイズ変更でもう一度呼び出します。
$(window).resize(function(e){
$("#tabs").scrollabletab();
});
それを行うための最も効率的な方法ではありませんが、現時点では私のテスト目的には機能します。
1つのプラグインはここにあります https://github.com/Casper1131/scroller それは任意の順序付けられていないリストに使用できます。
タブを1行で表示する場合、処理するシナリオとケースは複数あります。
<ul>
の周りにdiv
を追加し、オーバーフローをscroll
として設定することです。このメソッドは、ブラウザがタブヘッダーのスクロールを処理するため、すぐに使用できます。ただし、ブラウザが提供するデフォルトのスクロールバーは奇妙に見えます。したがって、カスタマイズ/スタイリッシュなスクロールバーアドオンが必要です。 [〜#〜]または[〜#〜]スクロール可能なタブ機能を提供し、必要に応じてナビゲーションコントロールを表示することで、レスポンシブなページサイズの変更を自動的に処理する拡張jQueryUIウィジェット。
特徴: