アプリ版:「スタンプのみでお礼する」機能のリリースについて

JavaScript初心者です。Windows7とGoogleChromeを主に使っています。

<!DOCTYPE html>
<html><head><title>animation</title>
<script src="js/jquery-1.11.0.min.js"></script>
<style>
#area{ width:420px;height:320px;text-align:center;background:gray; }
</style>
</head>
<body>
<div id="area"><br><img src='slideshow/photo0.jpg'></div>
<button id="move">PLAY</button>

<script>
time=200;lastcode=10;
count=0;
$("#move").mouseover(function(){ anime=setInterval(nextfilm,time); })
.mouseout(function(){ clearInterval(anime); });

nextfilm=function()
{ if(count==lastcode)count=0
else{count++;} ;
// count=(count==lastcode)? 0 : count+1;
bufa="<br><img src='slideshow/photo"+count+".jpg'>";
$("#area").html(bufa);
}
</script>
</body>
</html>

slideshowフォルダにphoto0~10.jpg(400×300px)という画像を用意し、カーソルをPLAYボタンに乗せると0.2秒間隔で次々に画像を見せるクレイアニメ及びスライドショー再生プログラムをごくシンプルに作ってみました。
実行してみると、けっこうチカチカします。画像タイプの問題かなとも思いアニメーションによく使われるgifファイルも作って試しましたが、変わりません。よく見たら、同じ画像をgifにしたらデータ量が倍以上あるんですね。
このちらつき現象、時折チカチカせずスムーズになることもあり、常時スムーズだといいのにと思うのですが、ではこれはハード的な問題でプログラムで抑止することは不可能ということでしょうか?抑止できるとしたらどんな書き方があるのでしょうか?
チカチカさせる効果の紹介はネット上でも多いのですが、逆にチカチカしてしまうのを抑えたいとなると参考にできるページに行き当たらず、ここで質問に思い立った次第です。
どなたかご教示お願いします。

A 回答 (2件)

画像のロード時間のせいみたいなので、


最初に

 .hide { display:none}のようなcssを定義。
 photo0~phpto10まで、全てのimgタグを作り、class=hide をつける。

としておき、setIntervalの中で、

 #area > img にeach()でhideをつける。
 見せたい1つのimgだけはhideを外す。

としてはどうでしょうか。
    • good
    • 0
この回答へのお礼

画像ロード時間に問題ありというご意見を参考に

.hide{ position:absolute;left:10px;top:10px; }画像全部の配置場所を固定して

<p><img class="hide" src=~~></p>とタグを画像分だけ#area中に設けて

$("#area p").each(function(){$(this).hide();});
$("#area p:first").show();
スクリプト初期設定時点でjQueryで画像消去と最初の画像表示を行い

$("#area p").each(function(){$(this).hide();});
$("#area p:eq("+count+")").show();
setInterval側の画像差し替え動作をこうしてみたところ、

成功しました。すっきりしました。ありがとうございました。

ちなみに、画像読み込み場所を1箇所に重ねずページに読み込み({display:none;}にしておく)、$("#area").html()←にimgタグを送り込むやり方も試してみましたが、これも画像読み込みを済ませてあるのに、最初と大差ないちらつくアニメでした。
画像ロードを先に済ませれば大丈夫と思ったら、そうもいかないものですね。

お礼日時:2014/05/10 21:48

試してみるべきこと。


1)違うブラウザを使ってみる。
2)タイマー間隔を200msではなく、もっと長くしてみる。
3)画像のファイルサイズを小さくしてみる。(圧縮率を上げる)
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。
おもしろいことに、FireFoxでは問題が生じていないことがわかりました。
試すといろいろわかるものですね。

お礼日時:2014/05/10 21:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!