CSS3を使用したアニメーション

JavaScriptを使わずアニメーションを実現する他の方法は「CSS3 Transition」や「CSS3 Animation」といった機能使う方法です。
 
「あるプロパティの数値を一定時間かけて変化させる」という処理は、CSS3 Transitionを用いれば簡単に実現できます。

例えば、情報バーのCSSに以下のようなプロパティを追加します。

#infobar {
position: fixed;
bottom: 10px;
right: -414px;
...中略...
 
/* CSS3 Transition */
transition: right 500ms;
-webkit-transition: right 500ms;
-moz-transition: right 500ms;
-o-transition: right 500ms;
-ms-transition: right 500ms;
}

しかし、CSS3 Transitionの仕様がまだ固まっていないため、各ブラウザーはドラフト版の仕様にもとづいた独自実装を行なっているため、「-webkit-」や「-moz-」などの接頭辞を持つ特別なプロパティも同時に記述する必要があります。
 
そして、情報バーが表示された状態のCSSも追加しておきます。

#infobar.visible {
right: 0;
}

そして、このvisibleクラスをJavaScriptで付けたり外したりするだけで、自然なアニメーションが実装されます。jQueryのaddClass()、removeClass()というメソッドを用いればclass属性を操作できます。

if (scrollBottom < 200) {
if (infobarHidden) {
infobarHidden = false;
// 情報バーを表示
infobar.addClass('visible');
}
} else if (!infobarHidden) {
infobarHidden = true;
// 情報バーを画面の右に隠す
infobar.removeClass('visible');
}

こうしたCSS3のアニメーション機能を使用すれば、アニメーションの処理にJavaScriptを用いる必要がなくなるため、コードがシンプルになるだけではなく、アニメーションの処理をブラウザーに任せることができ、処理負荷が低くてスムーズなアニメーションが期待できます。
 
ただ、CSS3のアニメーション機能は、ブラウザーによってサポート状況が異なります。そのため当分の間は、JavaScriptによるアニメーション処理も使われ続けると思われます。

カテゴリー: jQuery | タグ: , | コメントする

Webページの動的変更例2

Webページの動的変更例1の情報バーに「閉じる」ボタンをつけます。そのボタンをクリックすると、情報バーがフェードアウトして消え、それ以降は表示されないようにします(ページをリロードすると、また表示されるようになります)

ステップ1 閉じるボタンのマークアップ

情報バーにid属性「closeButton」を持つdiv要素を追加します。
<HTML>

<section id="infobar">
<h1>情報ウィンドウ</h1>
<div id="closeButton">×</div>
 この資料の出典はXXXXです。

 全文を読みたければ
<a href="&quot;出典のURL”">こちら</a>からどうぞ。</section>

<jQuesry>
閉じるボタンの処理を追加する

// (1) 閉じるボタンをクリックされた時
$('#closeButton').click(function() {
    // (2) 情報バーをフェードアウトし、
    infobar.fadeOut(function() {
        // (3) アニメーションが完了したら、情報バーの要素を削除
        infobar.remove();
    });
});

fadeOut()やanimate()などアニメーション系のメソッドは、引数に関数を指定すると、アニメーションが終了した際にその関数が呼び出されます。

ステップ2 情報バーの表示/非表示をアニメーションさせる

情報バーを表示する方法として、前回はrightプロパティに値を直接指定していました。今回は情報バーが右から左にスライドして現れるよう、以下のようにanimate()メソッドを使用してrightプロパティの値を変更しています。

// 500msかけてrightの値を0まで変化させる
infobar.animate({
  right: 0
}, 500);

情報バーを隠す処理も同様です。animate()メソッドを以下のように指定しています。

infobar.animate({
  right: -infobar.outerWidth()
}, 500);

出典:jQuery入門 with Dreamweaver CS5.5
http://www.adobe.com/jp/devnet/dreamweaver/articles/dwjquery_01.html

カテゴリー: jQuery | コメントする

jQueryによるDOMの操作

要素を作成

$()の引数に(X)HTML形式の文字列を指定します。
例えば、div要素を新たに作成するには、
// 下記は省略形。$(‘

‘) でも構わない
var div = $(‘

‘);
要素を生成すると同時に、属性を指定することも可能です。
// block1というid属性を持つdiv要素を作成
var div = $(‘

‘);
また、2つ目の引数を指定して、属性を指定することもできます。
// 第2引数にオブジェクトを指定して属性を追加
var div = $(‘

‘, {
id: ‘block1’
});

この要素をDOMツリーに追加

append()やappendTo()というメソッドを使用します。
例えば、作成した要素をbody要素内の末尾に追加するには、
var div = $(‘

‘);
// append()を使用する場合
$(document.body).append(div);

// appendTo()を使用する場合
div.appendTo(document.body);

要素を(DOMツリーから)削除

remove()というメソッドを使用します。
div.remove();

イベント処理

「マウスを動かした」「クリックした」「スクロールした」などの断続的に発生するユーザ操作の他にも、「Webページの読み込みが終わった」などのタイミングでもイベントは発生します。
そうした様々なイベントに対して、イベント発生時の処理を関数の形で登録しておくと、「イベントが発生した時にその関数を呼び出す」という動作が行われます。

jQueryを用いずに、JavaScriptのみでイベント処理を記述することは出来ますが、ブラウザごとの違いを意識して処理を切り分けなけらばなりません。
jQueryを用いると、こうした処理を統一的に記述することができます。
click() クリックイベントを処理、または発生させる。
$(element).click(function(e) {
~クリックイベント発生時の処理~
});
on(‘イベント名’, 関数) 任意のイベントを処理する。
$(element).on(‘focus’, function() {
~フォーカスが当たった時の処理~
});

アニメーション

jQueryを用いると、アニメーションも容易に実現できます。
// フェードイン
$(element).fadeIn();
// フェードアウト
$(element).fadeOut();
要素をスライドアニメーションさせることもできます。
// 下から上にスライド
$(element).slideUp();
// 上から下にスライド
$(element).slideDown();
こうしたアニメーション機能の中核となっているのが、animate()メソッドです。このメソッドの基本的な機能は、「CSSプロパティの値を時系列に沿って変更する」というものです。例えば、以下のように記述すると、要素が現在の座標から(100, 100)の座標まで、2秒間かけて移動します。
// 第1引数が変更後のCSSプロパティの値
// 第2引数がアニメーションの時間(単位はミリ秒)
$(element).animate({
top: 100, left: 100
}, 2000);

カテゴリー: jQuery | タグ: , , , , | コメントする

Webページの動的変更例1

画面下までスクロールすると、タイミングよく情報バーが表示される、という操作に対応したインタラクティブなUIを作成します。

ステップ1 コンテンツと情報バーのマークアップ

<HTML>

section id="infobar"></pre>
<h1>情報ウィンドウ</h1>
<pre>
    この資料の出典はXXXXです。

    全文を読みたければ
<a href="&quot;出典のURL”">こちら</a>からどうぞ。

<CSS>

#infobar {
    /* 画面の固定位置に表示される */
    position: fixed;
    bottom: 10px;

    /*
     * rightにwidthを超えるマイナス値を指定することで、
     * 画面外右側に隠れた状態となる。
     */
    right: -414px;

    border: 1px solid gray;
    border-top: 4px solid red;
    width: 400px;
    height: 80px;
    background-color: white;
    font-size: 12px;
    padding: 4px;
}

ステップ2 jQueryのインストールとJavaScriptコードの記述

<script type="text/javascript" src="jquery-1.7.1.min.js"></script>


// (1) 画面の読み込みが完了すると呼び出される
$(function() {
    // 情報バーが隠れているかどうか
    var infobarHidden = true;
    // (2) 情報バーのjQueryオブジェクト
    var infobar = $('#infobar');

    // (3) 画面がスクロールすると呼び出される
    $(document).scroll(function(e) {
        // (4) スクロール位置を取得
        var scrollBottom = getScrollBottom();
        // (5) 画面最下部から200ピクセル以内だったら
        // 情報バーを表示する
        if (scrollBottom < 200) {
            if (infobarHidden) {
                infobarHidden = false;
                // (6) 情報バーを表示
                infobar.css('right', 0);
            }
        } else if (!infobarHidden) {
            infobarHidden = true;
            // (7) 情報バーを画面の右に隠す
            infobar.css('right', -infobar.outerWidth());
        }
    });

    ...
});

ポイントは、

(1) 「$(function() { … })」のように、$()に関数を与えると、画面の読み込みが完了してから実行する処理を記述できます。
(2) 画面がスクロールすると呼び出される処理を定義しています。
$(document).scroll(function() {
… スクロール時に呼び出される処理 …
});
(3) 現在のスクロール位置が、画面最下部からどれくらい離れているかをピクセル単位で取得する筆者が自作した関数。ブラウザーごとの差異を考慮しつつ、非標準のAPIを使用しているため、多少わかりにくいコードになっています。

function getScrollBottom() {
    // スクロールバーの上端のY座標
    var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
    // スクロール可能な範囲も含めた全体の高さ
    var scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
    // ユーザに表示されている領域の高さ
    var clientHeight = document.documentElement.clientHeight || document.body.clientHeight;
    // WebKit系のブラウザは、scrollHeightとclientHeightが同じ値になるため、
    // window.innerHeightを代わりに参照する
    if(scrollHeight === clientHeight) {
        clientHeight = window.innerHeight; //for webkit
    }
    // 以下の計算式で、残りのスクロール範囲を取得できる
    return scrollHeight - scrollTop - clientHeight;
}

(4)スクロール位置が画面最下部から200ピクセル以内で、かつ情報バーが隠れている場合は情報バーを表示します。css()メソッドを用いると、スタイルのプロパティを変更することができます。
(5)スクロール位置が画面最下部から200ピクセル以上離れており、情報バーが表示されている場合はそれを隠します。
ここでは情報バーの横幅を動的に取得するようにしまた。jQueryが持つ「outerWidth()」というメソッドを使用すれば、要素の横幅(要素のボーダーの太さも含む)を簡単に取得することができます。

 

出典:jQuery入門 with Dreamweaver CS5.5
http://www.adobe.com/jp/devnet/dreamweaver/articles/dwjquery_01.html

カテゴリー: jQuery | コメントする

Webページを動的に変更する

1つまたは複数の要素を内包したjQueryオブジェクトに対し、様々なメソッドを用いて要素の属性やスタイルを変更することができます。

// alt属性を持たないimg要素に赤いボーダーを表示する
$(‘img:not([alt])’).css(‘border’, ‘1px solid red’);
// alt属性を持たないが、title属性を持つimg要素に対し、titleの値をaltにコピーする
// each()は、jQueryオブジェクト内の要素を1件ずつ処理する仕組み
$(‘img:not([alt])[title]’).each(function() {
var img = $(this);
// alt属性にtitle属性の値を代入
var title = img.attr(‘title’);
img.attr(‘alt’, title);
});

css()やattr()はメソッドといい、要素の状態を変更するためのものです。これらのメソッドでは、「css(‘borderWidth’, ‘2px’)」のように引数を2つ与えると「値を変更する」ことができ、「attr(‘title’)」のように引数を1つだけ与えると「値を取得する」ことができます。

出典:jQuery入門 with Dreamweaver CS5.5
http://www.adobe.com/jp/devnet/dreamweaver/articles/dwjquery_01.html

カテゴリー: jQuery | タグ: , , | コメントする

jQueryのコーディングの基本

Queryをインストール

script要素を使用して、jQueryのソースコードを読み込むだけ、以下のコードをHTMLに含めることです。

<script src=”http://code.jquery.com/jquery-1.7.1.min.js”></script>

jQueryをインストールすれば、次の2つの関数が使用できる。

jQuery()

$()

二つの関数は引数にwindow/document/DOM要素/文字列などが指定でき、元のオブジェクトを“強化”した、元のオブジェクトにはない様々な機能を持った「jQueryオブジェクト」が返り、それらを使用することでWebページを動的に変更させることができます。

なお、コードを短く書けるので、通常は「$()」が用いられます。

具体例

// windowオブジェクトを「jQuery化」する
var $win = $(window);
// documentオブジェクト
var $doc = $(document);
// DOM要素(ここではbody要素)
var $body = $(document.body);
/ ページ内のdiv要素を全て取得
var divs = $(‘div’);
// id属性を指定
var logoImg = $(‘#logoImg’);

また、引数にCSSセレクタの文字列を指定することもでき、操作対象となるDOM要素の範囲・種類を自由自在に指定することができます。

// 複雑なCSSセレクタ
var checkboxes =
$(‘table.list > tbody > tr:odd > td:nth-child(1) input[type=checkbox]’);

出典:jQuery入門 with Dreamweaver CS5.5
http://www.adobe.com/jp/devnet/dreamweaver/articles/dwjquery_01.html

カテゴリー: jQuery | タグ: , , , , | コメントする

jQueryのメリット

-DOMの操作が容易になり、Webページの見た目を動的に変更するのが容易になる。

-jQueryはWebブラウザー間の差異を埋めてくれる。

つまり、jQueryを使用すれば、クロスブラウザーで動作するインタラクティブなWebサイトの作成が容易になります。

カテゴリー: jQuery | コメントする

Textの修飾

WordPressをインストールしたままの初期状態では新規投稿を追加する為のビジュアルエディターの画面は下記のようになっており、Textの修飾機能がほとんどない。しかし、これは機能がないのではなく、表示がされていないだけなので初期メニューの中の全ツール表示切り替えをクリックする。

ビジュアルエディター初期画面

 

これによって全てのTEXT修飾コマンドが表示されるので、一般的なエディターソフトと同じように修飾したいTEXTを選んで、修飾コマンドをクリックしTEXTを修飾します。

TEXT修飾全機能を表示したメニュー

カテゴリー: WordPress, WP 機能 | タグ: | コメントする

DOM

DOMとは、Document Object Modelの略称でHTMLやXMLのドキュメントをメモリ上に展開し、プログラムから扱えるようにしたもの。つまりHTML内の<p>や<img>等を操作する為の標準インターフェース。

「DOM要素」とはHTML内の<p>や<img>をプログラムで扱えるようにしたものと考える事が出来る。

 

カテゴリー: jQuery | タグ: | コメントする

display:noneとopacity:0;の違い

どちらも要素が表示されないので、見た目は同じだが
display:noneの場合は、要素そのものが存在しないことになるので、クリック等のイベントが拾えなくなる。
opacity:0;の場合は透明度0の要素が存在するので、クリック等のイベントは拾える。

従って、イベントが拾えなくなった!というような場合はdisplayがnoneになっていないか確認すると良い。

カテゴリー: ウェブサイト作成の秘訣 | タグ: , , , | コメントする