- 索引
-
- ├ 目次
- ├ jQuery(selector)
- ├ jQuery(html)
- ├ jQuery(function)
- ├ jQuery.holdReady()
- ├ jQuery.noConflict()
- └ jQuery.sub()
- 他ページ参照
- └ jQuery.when()
-
- └ 目次
- 基礎
- ├ *(すべて)
- ├ element(html要素)
- ├ #id名(ID属性)
- ├ .class名(clas属性)
- ├ 複数のセレクタ(and)
- └ 複数のセレクタ(or)
- 階層関連
- ├ 先祖 子孫
- ├ >(子要素)
- ├ +(直近の後要素)
- └ ~(後要素)
- 属性
- ├ [属性名]
- ├ [属性名='値']
- ├ [属性名!='値']
- ├ [属性名^='値']
- ├ [属性名$='値']
- ├ [属性名*='値']
- ├ [属性名-='値']
- ├ [属性名|='値']
- └ 複数の属性
- 基本フィルタ
- ├ :root
- ├ :header
- ├ :lang()
- ├ :target
- ├ :animated
- ├ :first
- ├ :last
- ├ :even
- ├ :odd
- ├ :eq()
- ├ :gt()
- ├ :lt()
- └ :not()
- 子要素フィルタ
- ├ :first-child
- ├ :first-of-type
- ├ :last-child
- ├ :last-of-type
- ├ :only-child
- ├ :only-of-type
- ├ :nth-child()
- ├ :nth-of-type()
- ├ :nth-last-child()
- └ :nth-last-of-type()
- 可視性フィルタ
- ├
- └ :visible
- コンテンツフィルタ
- ├ :contains()
- ├ :has()
- ├ :empty
- └ :parent
- フォーム
- ├ :checked
- ├ :selected
- ├ :disabled
- ├ :enabled
- ├ :focus
- ├
- ├ :checkbox
- ├ :file
- ├ :image
- ├ :input
- ├ :password
- ├ :radio
- ├ :reset
- ├ :submit
- └ :text
-
- ├ .目次
- ├ .hasClass()
- ├ .addClass()
- ├ .removeClass()
- ├ .toggleClass()
- ├ .attr()
- ├ .removeAttr()
- ├ .prop()
- ├ .removeProp()
- └ .val()
-
- └ 目次
- ツリー(階層)
- ├ .siblings()
- ├ .next()
- ├ .nextAll()
- ├ .nextUntil()
- ├ .prev()
- ├ .prevAll()
- ├ .prevUntil()
- ├ .children()
- ├ .find()
- ├ .parent()
- ├ .parents()
- ├ .parentsUntil()
- ├ .offsetParent()
- └ .closest()
- フィルタリング
- ├ .eq()
- ├ .slice()
- ├ .first()
- ├ .last()
- ├ .filter()
- ├ .has()
- ├ .not()
- ├ .is()
- └ .map()
- その他
- ├ .add()
- ├ .andSelf()
- ├ .addBack()
- ├ .end()
- ├ .contents()
- └ .each()
-
- ├ 目次
- 要素の挿入
- ├ .after()
- ├ .before()
- ├ .append()
- ├ .prepend()
- ├ .insertAfter()
- ├ .insertBefore()
- ├ .appendTo()
- └ .prependTo()
- 要素の削除
- ├ .empty()
- └ .remove()
- ├ .detach()
- 要素を囲む
- ├ .wrap()
- ├ .wrapAll()
- └ .wrapInner()
- ├ .unwrap()
- その他
- ├ .text()
- ├ .html()
- ├ .clone()
- ├ .replaceAll()
- └ .replaceWith()
- 他ページ参照
- ├ .toggleClass()
- ├ .hasClass()
- ├ .addClass()
- ├ .removeClass()
- ├ .attr()
- ├ .removeAttr()
- ├ .prop()
- ├ .removeProp()
- ├ .val()
- ├ .css()
- ├ .offset()
- ├ .position()
- ├ .height()
- ├ .innerHeight()
- ├ .outerHeight()
- ├ .width()
- ├ .innerWidth()
- ├ .outerWidth()
- ├ .scrollLeft()
- └ .scrollTop()
-
- ├ 目次
- ├ jQuery.cssHooks
- ├ .css()
- ├ .height()
- ├ .innerHeight()
- ├ .outerHeight()
- ├ .width()
- ├ .innerWidth()
- ├ .outerWidth()
- ├ .offset()
- ├ .position()
- ├ .scrollTop()
- └ .scrollLeft()
- 他ページ参照
- ├ .addClass()
- ├ .hasClass()
- ├ .removeClass()
- └ .toggleClass()
-
- └ 目次
- マウスイベント
- ├ .click()
- ├ .dblclick()
- ├ .mousedown()
- ├ .mouseup()
- ├ .mouseover()
- ├ .mouseout()
- ├ .mouseenter()
- ├ .mouseleave()
- ├ .mousemove()
- ├ .hover()
- └ .toggle()
- キーイベント
- ├ .keydown()
- ├ .keypress()
- ├ .keyup()
- ├ .focusin()
- └ .focusout()
- フォームイベント
- ├ .focus()
- ├ .blur()
- ├ .change()
- ├ .select()
- └ .submit()
- ブラウザイベント
- ├ .resize()
- ├ .scroll()
- └ .error()
- ロードイベント
- ├ .load()
- ├ .unload()
- └ .ready()
- イベントハンドラアタッチ
- ├ .bind()
- ├ .unbind()
- ├ .live()
- ├ .die()
- ├ .delegate()
- ├ .undelegate()
- ├ .on()
- ├ .off()
- ├ .one()
- ├ .triggerHandler()
- └ .trigger()
- イベントオブジェクト
- ├ jQuery.Event
- ├ eo.type
- ├ eo.data
- ├ eo.pageX
- ├ eo.pageY
- ├ eo.timeStamp
- ├ eo.which
- ├ eo.result
- ├ eo.namespace
- ├ eo.target
- ├ eo.currentTarget
- ├ eo.delegateTarget
- ├
- ├ eo.stopPropagation()
- ├ eo.stopImmediateP...
- ├ eo.preventDefault()
- ├ eo.isPropagationSt...
- ├ eo.isImmediatePre...
- └ eo.isDefaultPreven...
-
- └ 目次
- 基礎
- ├ .hide()
- ├ .show()
- └ .toggle()
- スライド
- ├ .slideUp()
- ├ .slideDown()
- └ .slideToggle()
- フェード
- ├ .fadeOut()
- ├ .fadeIn()
- ├ .fadeTo()
- └ .fadeToggle()
- カスタム
- ├ .animate(prop)
- ├ .animate(prop,opt...
- ├ .stop()
- ├ .delay()
- ├ .queue()
- ├ .dequeue()
- ├ .clearQueue()
- ├ .finish()
- ├ jQuery.queue()
- ├ jQuery.dequeue()
- ├ jQuery.fx.interval
- └ jQuery.fx.off
-
- └ 目次
- 簡易メソッド
- ├ .load()
- ├ jQuery.get()
- ├ jQuery.getJSON()
- ├ jQuery.getScript()
- └ jQuery.post()
- グローバルイベントハンドラ
- ├ .ajaxComplete()
- ├ .ajaxSuccess()
- ├ .ajaxError()
- ├ .ajaxSend()
- ├ .ajaxStart()
- └ .ajaxStop()
- 低レベル・インターフェイス
- ├ jQuery.ajax()
- ├ jQuery.ajaxSetup()
- └ jQuery.ajaxPrefilt...
- お助け機能
- ├ jQuery.param()
- ├ .serialize()
- └ .serializeArray()
-
- └ 目次
- チェック
- ├ jQuery.contains()
- ├ jQuery.isArray()
- ├ jQuery.isEmptyO...
- ├ jQuery.isPlainO...
- ├ jQuery.isNumeric()
- ├ jQuery.isFunction()
- ├ jQuery.isWindow()
- └ jQuery.isXMLDoc()
- 配列/Object関連
- ├ jQuery.makeArray()
- ├ jQuery.inArray()
- ├ jQuery.grep()
- ├ jQuery.each()
- ├ jQuery.map()
- ├ jQuery.merge()
- ├ jQuery.extend()
- └ jQuery.unique()
- その他
- ├ jQuery.globalEval()
- ├ jQuery.noop()
- ├ jQuery.now()
- ├ jQuery.parseHTML()
- ├ jQuery.parseJSON
- ├ jQuery.parseXML()
- ├ jQuery.proxy()
- ├ jQuery.trim()
- ├ jQuery.type()
- ├ jQuery.support
- ├ jQuery.boxModel
- └ jQuery.browser
- 他ページ参照
- ├ .queue()
- ├ .dequeue()
- ├ .clearQueue()
- ├ jQuery.queue()
- ├ jQuery.dequeue()
- ├ jQuery.data()
- └ jQuery.removeData()
-
- ├ 目次
- ├ .data()
- ├ .removeData()
- ├ jQuery.data()
- ├ jQuery.removeData()
- └ jQuery.hasData()
- 他ページ参照
- ├ .queue()
- ├ .dequeue()
- ├ .clearQueue()
- ├ jQuery.queue()
- └ jQuery.dequeue()
-
- └ 目次
- deferredの作成
- └ jQuery.deferred()
- promiseの作成
- ├ jQuery.when()
- ├ .promise()
- └ deferred.promise()
- コールバックの設定
- ├ deferred.done()
- ├ deferred.fail()
- ├ deferred.always()
- ├ deferred.progress()
- ├ deferred.then()
- └ deferred.pipe()
- 状態の取得
- ├ deferred.state()
- ├ deferred.isReso...
- └ deferred.isReje...
- 状態の変更
- ├ deferred.resolve()
- ├ deferred.resolveW...
- ├ deferred.reject()
- ├ deferred.rejectW...
- ├ deferred.notify()
- └ deferred.notifyW...
-
- ├ 目次
- ├ jQuery.error()
- ├ .context
- ├ .jquery
- └ .pushStack()
.toggle( )表示されている時は隠し、隠れている時は表示する
構文
- 表示されている時は隠し、隠れている時は表示する返値:jQueryオブジェクト
-
jQo.toggle( [期間] [,function] )ver1.0〜
jQo.toggle( true/false)ver1.3〜
jQo.toggle( [期間] [,イージング] [,function] )ver1.4.3〜
jQo.toggle( オプション )ver1.0〜
機能
jQueryオブジェクトで指定した要素が表示されている時は(hideメソッドの演出で)隠し、隠れている時は(showメソッドの演出で)表示します。第1引数に期間を「ミリ秒」で設定することで、演出の速度を変更できます(期間を1000と設定すれば、1秒かけて要素を消します)。期間を設定しないとアニメ無しで演出します。また、第2引数にfunctionを設定すると演出が完了した後に実行されます。
1つの処理で「表示/隠す」処理ができるため初心者にとって非常に便利なメソッドなのですが、演出が「拡大/縮小+フェード」と少々過剰なため、意外と利用機会はありません。似たような機能のslideToggleメソッドのほうが良いかもしれません。
v1.3からは引数にtrue/falseを設定し、showメソッドかhideメソッドの機能に固定することができます。
v1.4.3からは期間とfunctionの間にイージングを設定して、アニメの加速度を変更できます。
解説
引数なしで利用する
toggleメソッドは引数なしで利用すると、アニメの演出なしに演出します。
サンプル(toggle/01.html)を開いてbody内にdiv要素とbutton要素があることを確認してください。jQueryは以下の様に記述され、buttonをクリックするとtoggleメソッドを利用してアニメの演出なしにdiv要素を表示したり隠したりします。
$("button").click(function(){ $("div").toggle(); });
結果として、buttonクリックする度にdiv要素が消えたり表示されます。
期間を設定してアニメの演出にする
引数に期間(ミリ秒)を設定すると、指定された時間でアニメをしながら演出します。隠れる時の演出はhideメソッドと同じで、表示される時の演出はshowメソッドと同じです。ちょっと過剰演出気味なので、あまり使いどころはないと思います。
サンプル(toggle/02.html)を開いてbodyの構成がtoggle/01.htmlと同じ事を確認して下さい。jQueryもほとんど同じで、異なるのは以下の様にtoggleメソッドの引数に期間「1000」が設定されている点だけです。
$("button").click(function(){ $("div").toggle(1000); });
結果として、buttonクリックする度に1秒(1000ミリ秒)かけてdiv要素が縮小しながらフェードアウしたり、拡大しながらフェードインします。
コールバックの設定
第2引数にfunctionを設定することで、演出の後にfunctionを実行することができます。
サンプル(toggle/03.html)を開いてbody内の構成がtoggle/02.htmlと同じ事を確認してください。jQueryは少し変更されています。まずはtoggleメソッドを確認して下さい。以下の様に第2引数にfunction「alertFunc」が設定されています。
$("button").click(function(){ $("div").toggle(1000, alertFunc); });
そしてalertFuncは、以下の様にアラートで「Animation complete.」と表示するだけです。
function alertFunc(){ alert("Animation complete.") };
結果として、div要素が隠れた後や表示された後で「Animation complete.」とアラートが表示されます。「表示/隠す」で個別のfunctionを設定することはできません。
functionは無名関数を利用して、直接設定することができます。→サンプル(toggle/03b.html)
$("div").toggle(1000, function (){ alert("Animation complete.") });
演出の固定
v1.3から引数にtrueを設定することで「表示」、falseを設定することで「隠す」と機能を固定することができます。サンプルサンプル(toggle/04.html)を開いてbody内にdiv要素が1つと、2つのbutton要素があることを確認して下さい。button要素にはそれぞれ「show」と「hide」と個別のid属性が設定されています。
<button id="show">show</button> <button id="hide">hide</button> <div></div>
jQueryは以下の様に記述され、id属性が「show」のbuttonがクリックされた時は、引数にtrueを設定したtoggleメソッドが実行されます。また、id属性が「hide」のbuttonがクリックされた時は、引数にfalseを設定したtoggleメソッドが実行されます。
$("button#show").click(function(){ $("div").toggle(true); }); $("button#hide").click(function(){ $("div").toggle(false); });
結果として、hideのbuttonをクリックしたらdiv要素が隠れ、showのbuttonをクリックしたらdiv要素が表示されます。たぶんフラグや条件式によって処理を変更する時に利用する構文なのだと思います。
イージングの設定
v1.4.3からはtoggleメソッドの第2引数にイージングの設定ができるようになりました。jQueryが利用できるイージングは「swing」と「linear」の2種類しかありません。デフォルトは「swing」です。イージングの種類はプラグインを追加することで増やすことができます。→プラグイン「イージングの追加」
サンプル(toggle/05.html)を開いてbody内の構成がtoggle/02.htmlと同じ事を確認してください。jQueryもほとんどtoggle/02.htmlと同じで、異なるのは以下の様に第2引数にイージング「linear」が追加された点だけです。
$("button").click(function(){ $("div").toggle(1000, "linear"); });
結果として、div要素をクリックすると「等速」でアニメが再生されます。違いが分かりにくいので、イージングの「swing」と「linear」を比較できるサンプルを作成しました。
サンプル(toggle/05b.html)ではbutton要素をクリックすると、id属性がswingと設定された方は「swing」のイージング、id属性がlinearと設定された方は「linear」のイージングで演出されます。あまり違いは分からないかもしれませんが、linearは等速で演出し、swingは徐々に加速後、徐々に減速します。
オプション(objectオブジェクト)の設定
引数にobjectオブジェクトを設定することで様々な処理が可能になります。利用できるプロパティはanimate(prop,option)メソッドと同じなので、詳細はそちらを参照してください。
ここではdurationプロパティとstepプロパティを利用したサンプルを紹介します。サンプル(toggle/06.html)を開いてbody内の構成はtoggle/01.htmlと同じことを確認してください。jQueryでは、まず以下の部分を確認してください。
testObj = new Object(); testObj.duration = 3000; testObj.progress = function(){ var myHeight = $("div").height(); $("div").text(myHeight) }
1行目でobjectオブジェクトを作成し、2行目でdurationプロパティを設定しています。ここでは3000(ミリ秒)を設定しているので3秒かけて演出します。そして3〜6行目ではprogressプロパティを設定しています。このプロパティにfunctionを代入しておくと演出をしている間に実行したい処理を設定できます。このサンプルではdiv要素の高さを取得し、それをdiv要素内に表示しています。
そして作成したobjectオブジェクトは以下の様にtoggleメソッドの引数として設定します。
$("button").click(function(){ $("div").toggle(testObj); });
結果として、buttonをクリックすると3秒かけてdiv要素が消えていきますが、progressプロパティに設定した処理によりdiv要素内に刻々とdiv要素の高さが表示されます。再びbuttonをクリックして表示する場合にもdiv要素に高さが表示されます。
関連項目
要素を隠したい場合はhideメソッドを利用します。
隠れた要素を再び表示したい場合はshowメソッドを利用します。
イベントにも全く同じ綴りでtoggleイベントがあります。構文が違うので混同することはないと思いますが、確認して機能の違いを覚えておきましょう。
メモ
期間の設定について
第1引数の期間を設定するところでは「slow」「fast」といったキーワードも利用することができます(fastは200ミリ秒、slowは600ミリ秒)。サンプル(toggle/test01.html)では以下の様に引数に「slow」を設定しています(文字列なのでクォートを忘れずに)。
$("button").click(function(){ $("div").toggle("slow"); });
結果として、buttonをクリックすると「ゆっくりめ」にアニメします。
複数の対象にも対応しています
セレクタに一致する要素が複数あっても、toggleメソッドでまとめて隠すことができます。
サンプル(toggle/test02.html)を開いてjQueryがtoggle/02.htmlと同じ事を確認して下さい。body内の構成は変更され、div要素が3つに増えています。
<body> <button>click</button> <div></div> <div></div> <div></div> </body>
結果として、buttonをクリックすると全てのdiv要素が表示されたり隠れます。
表示した時と隠れた時で異なるコールバック(function)を実行したいのですが...
表示した時と隠れた時で異なるfunctionを実行したいのですが、そのような構文はありません。なのでfunction内で判断するしかないと思うのですが、そこでも予想外の事態になっています。
サンプル(toggle/test03.html)を開いてbody内の構成がtoggle/03.htmlと同じ事を確認して下さい。jQUeryもほとんど同じなのですが、以下の様にコールバックに設定したalertFuncを以下の様に変更しています。
function alertFunc(){ var myWidth = $("div").css("width"); alert(myWidth); };
ポイントは2行目でcssメソッドを利用してdiv要素の幅を取得している部分です。これで隠れた後では「0px」と表示されると思ったのですが、そうはなりませんでした...。
この方法がダメだとすると、どのように判断したらよいのでしょう?。フラグを設定するのもtoggleメソッドの使い勝手を損なう気がしますし...。
次のページ: slideUp()