Code Snippet – ボタンにイベントを歩いてターゲットを開け閉めjQueryのコードスニペット
ボタンにイベントを歩いてターゲットを開け閉めするのは、かなり頻繁に実装することになる。ところでこれゾラ繰り返されるパターンである。何度試みをしたが面倒なので実装していないがしばらく前には実装をした。これからはこれ掻いて使うつもりだ。
一応考えは、ボタンに js-open-target
という名前のクラスを置き、 data-target
属性にたたんだピョᆺダするtargetの selector
を明示してくれるだろう。これでクラスと属性を付与するだけで折った咲いたことをすることができる。
js
jsコードは以下の通り。
$(document).ready(function(){
// 開かれるイベントをかける。
$('.jquery-on-container').on('click', '.js-open-target', function(e){
// aやsubmitボタンにクラスを付けた場合、リンク移動やsubmitを防ぐ。
e.preventDefault();
var target_selector = $(this).data('target');
$(target_selector).slideDown();
$(this).removeClass('js-open-target').addClass('js-close-target');
});
/*
* 最初は。js-close-targetクラスがDOMにロードされていない。
* on関数を使用すると、監視していた要素の中に定められた要素が登場したときのイベントをかける。
* この場合、。jquery-on-containerを監視しているが。
* js-close-targetが登場すると閉鎖したイベントをかける。
* 前の開かれるイベントをon関数には理由も同じだ。
* クラスをjs-open-targetにしたがjs-close-targetにしたがためだ。
*/
$('.jquery-on-container').on('click', '.js-close-target', function(e){
e.preventDefault();
var target_selector = $(this).data('target');
$(target_selector).slideUp();
$(this).removeClass('js-close-target').addClass('js-open-target');
})
// jsファイルをドラッグした場合にはコンテンツが見えるようにjsで開くことはjsで消す。
$('.js-open-target').each(function(){
var target_selector = $(this).data('target');
$(target_selector).hide();
});
});
HTML
そしてこのような HTML
を入れた。
<h2 class="jquery-on-container">
<!-- キーボードfocusができるようにaタグを利用した。 -->
<a href="#" class="js-open-target" data-target=".closed-content">Toggle Target</a>
</h2>
<div class="closed-content">
<p>大衆が歴史の舞台に登場した瞬間を革命であるならば、ウゴ·チャベスのボリバル革命は、2002年4月11日に開始した。</p>
<p>右翼クーデター勢力はチャベスを拉致して、新しい政府を宣言した。その政府はやっと48時間の間だけ維持された。</p>
<p>チャベス支持者数万人がチャベスの復帰を要求して大統領官邸を包囲した。</p>
...
</div>
この場合、 h2
要素のタイトルを .jquery-on-container
で作成し、 .js-open-target
要素は、その中に span
に入れた。しかし、 .jquery-on-container
をもっと広い div
で倒しても大きく問題になることはない。ただし、 body
にそのクラスを置かないはいけない。 .live()
関数がどのような関数であり、パフォーマンスの問題が発生してdeprecatedされたのだ。もし分からなくて明らかにしてたのに、 .on()
関数の件のコメントで説明を書き留めた。
たたんだが咲いたがする要素は closed-content
という名前のクラスが付いた div
だ。だから js-open-target
要素の data-target
は .closed-content
というjQuery Selectorを入れてくれた。 jsコードを見れば分かるが、この中にはどんなjQuery Selectorを入れてもされる。さらに、複数本を入れてもされて、複数に影響を与えるSelectorを入れてもされる。
CSS
最後に、CSS3をこっそり利用した。折りたたんだものには広げることができるという意味を、広げたことには折りたたみができるという意味を与えなければならので、 :after
仮想セレクタを利用して、三角形の矢印を入れてくれたし、マウスポインタをクリックすることができるという暗示を与える cursor
に変えてくれた。
.js-open-target, .js-close-target {
cursor: pointer;
}
.js-open-target:after {
content: "▼";
font-size: .6em;
font-family: helvetica;
color: #888;
vertical-align: middle;
margin-left: .5em;
}
.js-close-target:after {
content: "▲";
font-size: .6em;
font-family: helvetica;
color: #888;
vertical-align: middle;
margin-left: .5em;
}
これ三角形の記号を入れてくれれば、画像を入れるより解像度対応が容易になる。 vertical-align 'プロパティを利用して縦位置を中央に合わせた、
font-size’は文脈に合わせて柔軟に対応できるように 0.6em
に指定してくれた。フォントによって形が変わるのを防ぐためにどこでもあるような英文フォントであるhelveticaのフォントに指定してくれた。
さあ、それでは作ったものをデモページで鑑賞すれば良い。
- コメント機能はありません。コメントの代わりに[email protected]
にメールを送ってください。