SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【jQuery】jQuery UIのtabsだけで よくあるスライドショーを作る

概要

jQuery UI を読み込んでいるなら、タブで、ちょっとした「自動でローテーションするスライドショー」なんてすぐできちゃうよ!

詳細

以下、手順。

※ 広告などを表示するためのスライドショーを作ろうとしたときのメモなので、IDがadsなどになってます。適宜変更してください。

1、HTML外枠

こんな感じで、jquery.js、jquery-ui.js、jquery-ui.cssのcssを読み込むようにする。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery UI の tabs で スライドショー</title>
<link type="text/css" rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/base/jquery-ui.css">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
</head>
<body>
ここにスライドショーのHTMLを追加します。
</body>
</html>

2、スライドショーする部分のHTMLを作る

jquery.ui.tabsを使うので、これだけでOK。

<div id="ads">
	<ul>
		<li><a href="#ad-panels-1">1</a></li>
		<li><a href="#ad-panels-2">2</a></li>
		<li><a href="#ad-panels-3">3</a></li>
		<li><a href="#ad-panels-4">4</a></li>
	</ul>
	<div id="ad-panels-1"><p><img src="タブ1の画像"></p></div>
	<div id="ad-panels-2"><p><img src="タブ2の画像"></p></div>
	<div id="ad-panels-3"><p><img src="タブ3の画像"></p></div>
	<div id="ad-panels-4"><p><img src="タブ4の画像"></p></div>
</div>

3、スライドショーさせる(タブをローテーションさせる)

jquery.ui.tabsをローテーションさせるにはこのように書く。

引数の意味は、「”rotate”してね、時間間隔は1000ミリ秒で、クリックしたらローテーション止めてね」

<script type="text/javascript">
	$(function() {
		$('#ads').tabs().tabs("rotate", 1000, false);
	});
</script>

4、スライドショーの見た目をカスタマイズする

jQuery UI のCSSが効いているが、タブを非表示にするときに .ui-tabs-hide というクラスを使っているなど、タブの表示/非表示もそのCSSに依存しているので、なるべく jQuery UI にのっかるようにする。

jquery.ui.tabs.css が以下のようになっている。

.ui-tabs { position: relative; padding: .2em; zoom: 1; }
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; }
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }

以下のようなCSSとスクリプトで、jQuery UIのCSSを上書きする。セレクタは「.クラス .クラス …」より「#ID …」の方が優先度が高いので、上書きしやすい。

<script type="text/javascript">
	$(function() {
		$('#ads').tabs().tabs("rotate", 1000, false);
		/* jQuery UI らしさを出す不要なクラス指定を除去 */
		$('#ads, #ads ul, #ads li, #ads div').removeClass("ui-widget ui-widget-content ui-corner-all ui-corner-top ui-corner-bottom ui-widget-header ui-tabs-panel ui-helper-reset");
	});
</script>
<style>
/* 画像に合わせた幅、高さの指定。位置の調整。細かいところの上書き。 */
#ads {position:relative; top:0; left:0; width:690px; height:240px; margin:0; padding:0;}
#ads .ui-tabs-nav {position:absolute; top:200px; left:550px; margin:0; padding:0;}
#ads .ui-tabs-nav li {top:0; border:none;}
#ads .ui-tabs-nav li a {padding:0.1em 0.6em;}

/* デフォルト、選択、アクティブ、マウスオンなど状態に応じたCSSの上書き */
#ads .ui-state-default {border: none; background: #333333;}
#ads .ui-state-default a {color: #eeeeee; text-decoration: none; font-weight:bold;}
#ads .ui-state-hover {border: none; background: #cccccc;}
#ads .ui-state-hover a {color: #222222; text-decoration: none; font-weight:bold;}
#ads .ui-state-active {border: none; background: #eeeeee;}
#ads .ui-state-active a {color: #222222; text-decoration: none; font-weight:bold;}
</style>

5、できあがり

jQuery UIのtabsだけで よくあるスライドショーを作る – デモ

参考

jQuery UI – tabs のデモとドキュメント

関連するメモ

コメント