プラグイン | memo-memo - Part 2 Skip to content

memo-memo

web制作に便利そうな情報をメモるブログ

Archive

Tag: プラグイン

以前このブログでメモっておいたjQueryプラグインのQuickFlip 2と、タブ切り替えをセットにしたチュートリアルがありました。
http://webdeveloperplus.com/jquery/create-flipping-content-tabs-using-jquery/チュートリアルページ

http://jonraasch.com/blog/quickflip-2-jquery-pluginQuickFlip 2のダウンロードページ

で、チュートリアルページにあるソースをコピーペースト。

html

<div id="flip-tabs">
 <ul id="flip-navigation">
 <li><a href="javascript:void(0)" id="tab-0">Recent</a></li>
 <li><a href="javascript:void(0)" id="tab-1">Popular</a></li>
 <li><a href="javascript:void(0)" id="tab-2">Comments</a></li>
 </ul>
 <div id="flip-container">
 <div>
 PutPut Content for first tab
 </div>
 <div>
 Put Content for second tab here
 </div>
 <div>
 Put Content for third tab here
 </div>
 </div>
 </div>

css

@charset "utf-8";
#flip-tabs{
width:300px;
margin:20px auto; position:relative;
}

#flip-navigation{
margin:0 0 10px; padding:0;
list-style:none;
}

#flip-navigation li{
display:inline;
}

#flip-navigation li a{
text-decoration:none; padding:10px;
margin-right:0px;
background:#f9f9f9;
color:#333; outline:none;
font-family:Arial; font-size:12px; text-transform:uppercase;
}

#flip-navigation li a:hover{
background:#999;
color:#f0f0f0;
}

#flip-navigation li.selected a{
background:#999;
color:#f0f0f0;
}

#flip-container{
width:300px;
font-family:Arial; font-size:13px;
}

#flip-container div{
background:#f00;
}

JS

$(function(){
//    initialize quickflip
 $('#flip-container').quickFlip();

 $('#flip-navigation li a').each(function(){
 $(this).click(function(){
 $('#flip-navigation li').each(function(){
 $(this).removeClass('selected');
 });
 $(this).parent().addClass('selected');
//            extract index of tab from id of the navigation item
 var flipid=$(this).attr('id').substr(4);
//            Flip to that content tab
 $('#flip-container').quickFlipper({ }, flipid, 1);
 return false;
 });
 });

cssの赤字の部分のwidthで、見出しのタブの文字のwidthと合わせよう。今回は、300px。

で、上記のファイルを全部読みこむと、一応は表示されました。

ただ、htmlのid flip-containerの中の文字数。(様は、タブで切り替わる、本文の文字数)によって、若干思わぬ弊害が起こった。

20090916_03

ちょっと解りずらい画像だけど…タブの下にあるコンテンツにかぶってしまった。

で、いろいろ原因を探っていると、このプラグインは、htmlにstyle属性を付けてくれるんだけど、その付加されたstyle属性をちょっと変えると、

20090916_02

こんな感じに、一つ下のコンテンツに重ならずに表示できた。

対応の仕方ですが、

まず、firebugで、ブラウザに表示した後のhtmlを見てみると、

<div id="flip-container" style="position: relative;">

<div style="margin: 0px; padding: 0px;
position: absolute; top: 0px;
 left: 0px; width: 300px; height: 140px;">
タブの中の本文
</div>

<div style="display: none;">
</div>
<div style="display: none;">
</div>
<div style="display: none;">

こんな感じになっている。(「タブの中の本文」の所は、複数ある)

問題なのは、青文字のposition:absoluteの部分。同じdivのstyleに、height: 140pxと書いてあるけど、absoluteしてしまっているので、下のコンテンツにかぶってしまう。

で、緑文字で書いてある、一つ上の要素(親要素)である、<div id=”flip-container”>のstyle属性を、

style="position: relative;"

から、

style="position: relative; height: 140px"

としたら、下のコンテンツにかぶらず表示出来ました。

このプラグインは、テキストの量によって、自動でheightを計算して、style属性を付加する感じになっているらしく(多分ね…)、htmlに直接heightをstyle属性で書く事も出来ると思うけど、出来れば動的に処理したい。

そこで考えたのが、このコード、

var cont_style=$("#flip-container").attr("style");//その1
var div_attr=$("#flip-container div").attr("style");//その2
var div_attr_arr = div_attr.split("height");//その3
var style_tuika = cont_style + " height " + div_attr_arr[1];//その4
$("#flip-container").attr("style",style_tuika);//その5

いや、めっちゃ素人がばればれのコードな気がするが…まあ、とりあえず動くので良しとしよう。

その1:まずは、変数cont_styleにdiv#flip-containerの、style属性の値を格納。この時点では、「position: relative;」が格納されているはず。

その2:次は、変数div_attrに、div#flip-container divの、style属性の値を格納。「margin: 0px; padding: 0px; position: absolute; top: 0px; left: 0px; width: 322px; height: 140px;」が格納されているはず。

その3:今取得したdiv_attrを、文字列「height」で切って、配列div_attr_arrに格納。

格納されたのは、「margin: 0px; padding: 0px; position: absolute; top: 0px; left: 0px; width: 322px;」と、「: 140px;」のはず。

その4:後は、変数cont_styleと、配列div_attr_arrを使って、新たなスタイル属性を作って、変数style_tuikaに格納。「position: relative; height: 140px;」こうなっているはず。

その5:それを、div#flip-containerのstyle属性に新たに書けば完成。

………………

ホントは、もっとスマートなやり方がありそうだけど、っていうか絶対あるけど、取り換えずこのやり方で、解決できました。

<追記>

このやり方だと、ie6でバグが出ました…修正版あり。

一度は使ってみたかったプラグイン、light BoxのjQuery版を使ってみた。

http://leandrovieira.com/projects/jquery/lightbox/プラグインの配布サイトはこちら

使い方は、fancyzoomとほとんど変わりません。
まずは、ダウンロードしたjquery.lightbox-0.5.cssと、jquery.lightbox-0.5.jsをそれぞれ読み込みます。imagesフォルダに入っている画像も、コピーして、読み込みやすい場所に置いておきます。
で、
html


<a href="hogehoge_l.jpg" title="大きい写真" />
<img src="hogehoge_s.jpg" alt="" />
</a>

上記の用なhtmlを書きます。imgタグを、aタグで括り、そのaタグのhref属性に、大きい写真のパスを書きます。

で、jsは、

js


$(function(){
$("a").lightBox();
});

これで一応動きます。パラメーターを指定したいときは、

$(function(){
$('#light_box_area a').lightBox({
overlayBgColor : "#000",
imageLoading : "../../common/images/lightbox/lightbox-ico-loading.gif",
imageBtnClose: "../../common/images/lightbox/lightbox-btn-close.gif",
imageBtnPrev: "../../common/images/lightbox/lightbox-btn-prev.gif",
imageBtnNext: "../../common/images/lightbox/lightbox-btn-next.gif",
txtImage: "Imagem",
txtOf: "de"
});
});

こんな感じです。

赤文字の所が、若干FancyZoomとは違って、画像の入っているフォルダを指定するんじゃなくて、一つ一つ読み込む感じになるみたいです。でも、以前書いたFancyZoomの時の様に、bodyにクラスを付けて管理すれば、ちょっと管理が楽になるかも。

以前書いたFancyZoomの記事はこちら

青文字の部分を追加すると、aタグのtitle属性にあてた文字(今回は、「大きい写真」)が、キャプションとして出力されます。

その他のパラメータは、本サイトを参照してください。

なかなかいい感じに動くプラグインです。下記のサイトからダウンロードできます。
http://www.queness.com/post/274/jquery-sliding-tab-menu-for-sidebar-tutorialhttp://www.queness.com/post/274/jquery-sliding-tab-menu-for-sidebar-tutorial

ダウンロードしたフォルダの、「js」から、jquery.scrollTo.jsをhtmlで読み込みます。cssは、とりあえず、ダウンロードしたサンプルhtmlの<style>タグの中のものをコピペで良いでしょう。

その際、cssのバックグラウンドで指定されている画像のパスを直さないといけません。ダウンロードしたてのサンプルhtmlの、71行目と、79行目に書かれている部分です。

htmlは、下記の感じです。

<body>
<div id=”scroller-header”>
<a href=”#panel-1″ rel=”panel”>Populars</a>
<a href=”#panel-2″ rel=”panel”>Comments</a>
<a href=”#panel-3″ rel=”panel”>Recents</a>
<a href=”#panel-4″ rel=”panel”>Categories</a>
</div>

<div id=”scroller-body”>
<div id=”mask”>
<div id=”panel”>
<div id=”panel-1″>
<ul>
<li>Simple JQuery Image Slide Show with Semi-Transparent Caption</li>
</ul>
</div>

<div id=”panel-2″>
<ul>
<li>30 Javascript Menu Plugins and Scripts</li>
</ul>
</div>

<div id=”panel-3″>
<ul>
<li>CSS and Web Gallery List : Promote and Increase your Website Traffic</li>
</ul>
</div>

<div id=”panel-4″>
<ul>
<li>ajax</li>
</ul>
</div>

</div>
</div>
</div>

</body>
</html>

青字の部分が、タブの部分になって、赤字の部分のid=panel-1~panel-4が、本文になります。<div>タグで括られている部分ですな。ちなみに、別に<ul>タグを使わずに、<p>でも動きました。

後は、jsで下記を書けば動くはず。

$(function() {
$(‘#mask’).css({‘height’:$(‘#panel-1′).height()});
$(‘#panel’).width(parseInt($(‘#mask’).width() * $(‘#panel div’).length));
$(‘#panel div’).width($(‘#mask’).width());
$(‘a[rel=panel]‘).click(function () {
var panelheight = $($(this).attr(‘href’)).height();
$(‘a[rel=panel]‘).removeClass(‘selected’);
$(this).addClass(‘selected’);
$(‘#mask’).animate({‘height’:panelheight},{queue:false, duration:500});
$(‘#mask’).scrollTo($(this).attr(‘href’), 800);
return false;
});
});

sidebar_sliding_tab_menu

こんな感じになります。

上のタブ部分をクリックすると、横にスライドして次を表示します。

同じような名前のプラグインがあるみたいだけど…

今回使ってみたのは、こちらです。

http://www.portalzine.de/index?/Horizontal_Accordion–print

なかなか難関でしたな。

使い方は、とりあえず、上記のダウンロードページからファイルをダウンロードしたら、「lib」フォルダの中に入っている、「jquery.easing.1.3.js」と「jquery.hrzAccordion.js」ファイルを読み込みます。(jQuery本体も、もちろん読み込みます。)

後、「css」フォルダから「jquery.hrzAccordion.defaults.css」を読み込んで、とりあえず準備完了。

後は、

$(document).ready(function() {
$(“.test”).hrzAccordion(
{eventTrigger:”mouseover”,
openOnLoad:”",
cycle: true

});

こんな感じで、プラグインを有効にすればよいです。(青文字はオプション)

ただ、何点か注意点があります。

まず、htmlですが、

<ul class=”test”>
<li>
<h6><img src=”images/ke_01.gif” width=”90″ height=”120″ />テキスト1</h6>
<p>テキスト1</p>
</li>
<li>
<h6><img src=”images/ke_02.gif” width=”90″ height=”120″ />テキスト2</h6>
<p>テキスト2</p>
</li>
<li>
<h6><img src=”images/ke_03.gif” width=”90″ height=”120″ />テキスト3</h6>
<p>テキスト3</p>
</li>
<li>
<div class=”handle”></div><h6><img src=”images/ke_04.gif” width=”90″ height=”120″ />テキスト4 </h6>
<p>テキスト4</p>
</li>
</ul>

上記のように、<ul>タグにクラスを付けます。

で、一つ目の注意点が、オレンジ文字で書いた空divなんですが…

サンプルをそのまま改造して作ってしまうと、アコーディオンに使用する為の文字だけのpngファイル(ダウンロードファイルのimagesフォルダにある)のheightを計算するように、jsが組まれているらしく、クラスhandleを指定しておかないとエラーで動きませんでした…

多分、オプション(このプラグインは、指定できるオプションが多めです。)か、jsのコードを直せば何とかなる気がするけど、そこまでは試してません…

二つ目の注意点は、cssです。アコーディオンに使用している画像は、cssのbackgroundで指定しています。「jquery.hrzAccordion.defaults.css」の48行目、51行目、54行目の画像のパスを直しましょう。

とりあえず、注意点はこんなところかな?多分、上記に気をつければきっと動くはず。わからなかった部分は、又今度勉強しましょう。

後、アコーディオンに使用されている画像は、透過pngになっているので、そのままではie6等のブラウザでは見れません。その辺の攻略法は、この記事とは、別記事を用意します。

以前の記事でメモっておいた、jQueryプラグインのBefore/Afterを使ってみた。

以前の記事はこちら

で、下記のコードでとりあえず問題なく実装できました。

html


<html>
<head>
<title></title>
<script type=”to/path/jquery.js”></script>
<script type=”to/path/jquery-ui-1.7.2.custom.js”></script>
<script type=”to/path/jquery.beforeafter.js”></script>
<script type=”to/path/javascript”>
$(function(){
$(“#beforeAfter“).beforeAfter();
});
</script>
<body>

<div id=”beforeAfter“>
<div><img src=”images/before.jpg” alt=”before” width=”320″ height=”240″ /></div>
<div><img src=”images/after.jpg” alt=”after” width=”320″ height=”240″ /></div>
</div>

</body>
</head>


こんな感じです。

が、ちょっとだけ注意点が…

それは、画像のパスです。

ダウンロードページから、プラグインをダウンロードすると、「js」というフォルダーの中に、プラグイン本体と、使用する画像が3つ入っています。

で、プラグイン本体のコードに記述されている、使用する画像のパスを、直接変えてやらないと使用できませんでした。

変更したのは、48行目にある「handle.gif」のパスと、59行目にある「lt-small.pngとrt-small.png」の3カ所です。各々のパスを、htmlからみたパスで記述したら、OKでした。

因みに、optionも指定できるようになっていて、

$(function(){
$(“#beforeAfter”).beforeAfter({
animateIntro : true,
introDuration : 500
}
);

こんな感じで、指定します。{}を忘れないように注意。

詳しくは、ダウンロードページに色々書いてあります。