こんにちは、
アニメーションを用いる場面と効果
さて、
なぜこういったアニメーションを行うのか、
まず1つは読み込みの待ち時間をごまかす効果があります。サムネイル画像をクリックしたら、
また、
次のリンクは画面を下方向に500px移動させるスクリプトを実行します。1つ目は直接移動し、
前者は移動前と移動後の繋ぎを見失ってしまいがちですが、
function animateScrollBy(x, y){
var begin = new Date() - 0;
var prev = 0;
var id = setInterval(function(){
var current = new Date() - begin;
if (current > 500){
clearInterval(id);
current = 500;
}
var diff = current - prev;
prev = current;
window.scrollBy(diff / 500 * x, diff / 500 * y);
}, 10);
}
もちろん、
アニメーションのサンプル
ではもうひとつ簡単なアニメーションのサンプルを見てみましょう。今回もTwitterの検索APIを使用して、
発言1つ分の枠だけを用意して、
アニメーションは前回書いたMiniTweenerを使用します。
(function (){
var button = document.getElementById('cbjs-18-3');
button.onclick = function(){
// 検索API呼び出し
var script = document.createElement('script');
script.src = 'http://search.twitter.com/search.json'+
'?callback=TwitterCallback&lang=ja&q=http';
document.body.appendChild(script);
};
})();
function TwitterCallback(data){
var root = document.getElementById('cbjs-18-2');
var results = data.results;
var ul = document.createElement('ul');
ul.className = 'twl';
var current = 0;
var list = [];
var scroller = function(evt, up){
var prev = current;
current += up || 1;
if (current === len){
current = 0;
} else if (current === -1){
current = len - 1;
}
// 前回のアニメーションはキャンセルする
MiniTweener.end();
MiniTweener(ul.style, {
top:{
from:prev * -80,
to:current * -80,
suffix:'px'
}
}, {
duration: 500,
easing: JSTweener.easingFunctions.easeOutCubic
});
};
for (var i = 0, len = results.length;i < len; i++){
var usr = results[i];
var src = usr.profile_image_url;
var li = document.createElement('li');
var img = document.createElement('img');
img.src = src;
img.width = 48;
img.height = 48;
li.appendChild(img);
var span = document.createElement('span');
span.appendChild(document.createTextNode(usr.text));
li.appendChild(span);
ul.appendChild(li);
list[i] = li;
}
root.appendChild(ul);
var Down = -1, Up = 1;
if ('onmousewheel' in document.body || window.opera){
// onmousewheelが使えるか判定(Firefox以外はこちら)
root.onmousewheel = mousewheel;
} else {
// 実質的にはFirefox用の処理
root.addEventListener('DOMMouseScroll',
mousewheel, false);
}
function mousewheel(e){
var ev = e||window.event;
var dir = ev.wheelDelta || -ev.detail;
dir = dir < 0 ? Down : Up;
if (dir === Down){
scroller(ev, 1);
} else if (dir === Up) {
scroller(ev, -1);
}
// preventDefault でスクロールをキャンセル
if(ev.preventDefault) {
ev.preventDefault();
} else {
//IEはreturnValue
ev.returnValue = false;
}
}
}
アニメーションを使用する際のポイントは、
今回の場合、
![図1 HTMLの構造 図1 HTMLの構造](/assets/images/dev/serial/01/crossbrowser-javascript/0018/001.png)
この方法は制御しやすいという長所がありますが、
場合によっては、
まとめ
今回はアニメーションの実例を学びました。次回はCSSとDOMに関する部分