時間差で画像にあれこれさせる!javascriput
(1)HPが開かれたと同時に「wakuwaku.gif」がフェードインし、すぐにフェードアウトさせる。(できれば速度調整できるとうれしいです)
↓
(2)フェードアウト後「ukiuki.gif」を50px下に動かし止める(できれば速度調整できるとうれしいです)。
これと同時にmogemoge028○.jpgをフェードインさせる。
自分では以下まで作成しましたが。setTimeOutのいい使い方や
もっと早く動作するのあるだろ!
等、良案をよろしくお願い致します。
あまり時間が作れなく、基礎等も毎日勉強しているのですがおっつきせん^^;
もちろん教えて下さったのを元に勉強させていただきたいと思っております。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<DIV style="top : 100px;left : 106px;
position : absolute;
z-index : 2;
" id="Layer1"><IMG src="wakuwaku.gif" width="1050" height="610" border="0"></DIV> //画像1つ目
<DIV style="top : 153px;left : 198px;
position : absolute;
z-index : 3;
" id="Layer2"><IMG src="ukiuki.gif" width="445" height="495" border="0"></DIV> //画像2つ目
<DIV style="top : 170px;left : 200px;
position : absolute;
z-index : 1;
" id="Layer3"> <script language="JavaScript" type="text/javascript"> <!--
var randimg = new Array();
var randimg_count = 0;
randimg[randimg_count++] = "mogemoge0287.jpg"
randimg[randimg_count++] = "mogemoge0288.jpg"
randimg[randimg_count++] = "mogemoge0289.jpg"
randimg[randimg_count++] = "mogemoge0280.jpg"
document.write("<img src=\"" +randimg[Math.floor(Math.random() * randimg.length)]+ "\">");
//-->
</script>
</DIV>//画像3つ目(ランダム表示)
</BODY>
</HTML>
No.4
- 回答日時:
続き
function next(){
if(!layer1.done){
layer1.fadeOut();
(function (elm,frompos,topos,step,int){
var movetimer = setInterval(function(){
frompos += step;
if(frompos > topos)
clearInterval(movetimer);
elm.style.top = frompos + "px";
},int)
})(document.getElementById('Layer2'),153,203,2,30);
}
if(layer1.done && !layer3.done){
layer3.fadeIn();
}
}
var layer1 = Fader.init(document.getElementById('Layer1'),5,30,0);
var layer3 = Fader.init(document.getElementById('Layer3'),5,30,0);
layer1.fadeIn();
</script>
IEの
element.style.filter = 'Alpha(opacity=xx)';
対処さぼったし、
たぶん採用されないだろうから、使い方の説明もしない。
No.3
- 回答日時:
もうすっきりした回答がでちゃったけど、しかも盗作っぽいけど、
その上、長いけど、
HTMLはそのままで、</body>の前に
<script type="text/javascript">
(function () {
function Fade (node,step,interval,opacity) {
this.node = node;
this.step = step;
this.interval = interval;
this.opacity = opacity;
this.timerId = null;
this.mode = step < 0 ? -1: 1;
this.done = false;
}
var
setOpacity = function (alpha) {
this.opacity = alpha / 100;
},
stop = function () {
this.timerId && clearInterval (this.timerId);
this.timerId = null;
return this;
},
start = function (func) {
var that = this;
this.timerId = setInterval(function(){
func.call(that);
},this.interval);
},
fluctuation = function () {
var alpha = this.opacity + this.step * this.mode;
if (alpha < 0) {
alpha = 0;
stop.call (this);
this.done = true;
next();
} else if (100 < alpha) {
alpha = 100;
stop.call(this);
next();
}
this.opacity = alpha;
setOpacity.call(this.node.style,alpha);
},
In = function () {
this.mode = 1;
this.timerId || start.call(this,fluctuation);
return this;
},
Out = function () {
this.mode = -1;
this.timerId || start.call(this,fluctuation);
return this;
},
init = function (node,step,interval,opacity){
if (!arguments.length) return null;
var obj = new Fade (
node,
step || 5,
interval || 30,
opacity || 0
);
setOpacity.call (node.style,opacity);
return obj;
};
Fade.prototype.fadeIn = In;
Fade.prototype.fadeOut = Out;
Fade.init = init;
this.Fader = Fade;
})();
続く
No.2ベストアンサー
- 回答日時:
setTimeoutとアニメーションの理解のための参考として…
雰囲気のみですが、速度の調節はstep、intervalの値を変えることで可能です。
startはCSSから取得する方が便利かもしれませんが、手抜きして直接指定するようにしています。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head><title>sample</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<style type="text/css">
#Layer1, #Layer2, #Layer3 { position:absolute; }
#Layer1 { top:100px; left:106px; }
#Layer2 { top:153px; left:198px; }
#Layer3 { top:170px; left:200px; }
img { border:0 }
#Layer1 img { width:1050px; height:610px; }
#Layer2 img { width:445px; height:495px; }
#Layer3 img { width:445px; height:100px; }
</style>
</head>
<body>
<!-- 画像1つ目 -->
<div id="Layer1">
<img src="wakuwaku.gif" alt="wakuwaku">
</div>
<!-- 画像2つ目 -->
<div id="Layer2">
<img src="ukiuki.gif" alt="ukiuki">
</div>
<!-- 画像3つ目 -->
<div id="Layer3">
<img src="test.jpg" alt="randomn">
</div>
<script type="text/javascript">
<!--
setOp(document.getElementById("Layer1"),0);
setOp(document.getElementById("Layer3"),0);
animator("Layer1", 2, 50, 0, 100, setOp, scenario1);
function scenario1() { animator("Layer1", -2, 50, 100, 0, setOp, scenario2); }
function scenario2() {
animator("Layer2", 2, 40, 150, 280, moveV);
animator("Layer3", 1, 80, 0, 100, setOp);
}
// **** アニメーション ****
// id:対象要素のid
// step, interval:移動量(speed), 繰返し間隔(msec)
// start, end:スタート/エンド ポジション
// func:アニメーション内容
// callback:コールバック関数
function animator(id, step, interval, start, end, func, callback) {
var pos = start, elm = document.getElementById(id);
(function() {
pos += step;
var flag = (step>0 && pos>=end) || (step<0 && pos<=end)
pos = flag?end:pos;
func(elm, pos);
if (!flag) setTimeout(arguments.callee, interval); else if(callback) callback();
})();
}
function moveV(e, p) { e.style.top = p + "px"; }
function setOp(e, o) {
e.style./*@cc_on @if(1) filter = "alpha(opacity=" + o + ")"
@else*/ opacity = o/100/*@end@*/;
}
//-->
</script>
</body>
</html>
この回答への補足
ありがとうございます;;なまら勉強になりました。
私が今まで疑問で分からなかったことが一気に2個も解消されました^^
ちなみに1つわからないのが#Layer2 { top:153px; left:198px; }のtopとleftをいじってしまうと上下の動作が固定位置に戻ってからの移動になってしまうんですが。これはどこが原因でなってるんでしょうか?><
No.1
- 回答日時:
上記のソースではフェードアウトなどはしないと思いますが。
>setTimeOutのいい使い方や
と書いてありますが、setTimeOutどこにも使われてないところ見ると、コピペミスでしょうか?
さて本題ですが、どうしても全てを自作したい、というわけでないのでしたらライブラリを使いませんかね。
オススメはjQueryです。
http://jquery.com/
effect系(http://semooh.jp/jquery/api/effects/)のメソッドを使えば、表示非表示はshow、hideでもそれっぽくなりますし、移動はanimateで可能ですし。
またeasingプラグイン(http://semooh.jp/jquery/cont/doc/easing/)でアニメーションの速度を変えたりもできます。
この回答への補足
早速のご回答ありがとうございます。
作成した内容に私がsetTimeOutを使うと動作しなくなるので、動作する内容を載せました。
その上でのアドバイスが欲しかったのです。
jQueryは知らなかったです!参考にさせていただきます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jQueryで同じクラス名のものを...
-
ボタンを押すたびに交互に切り...
-
Colorboxがうまく設置できません
-
MAX関数を使ってからLEFT JOIN...
-
JSPでの画像ファイル表示
-
textareaで入力した文字を改行...
-
iframe内のリンクが飛ばないの...
-
jspでcssが読み込めない
-
jQueryスライドショー画像への...
-
どの<li><a> が押されたか判別...
-
読み込んだQRコードをフォーム...
-
Ctrl+F(検索)の窓を出したいの...
-
javascriptテキストBOX色を元に...
-
1枚の画像をクリックすると複数...
-
jQueryで特定のURLの時のみ表示
-
「jQuery」アコーディオンメニ...
-
神経衰弱 順番に裏返し
-
css固定したフッターが本文と重...
-
c++std::string型をTCHARに変換...
-
window.openで値の渡し方を教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
デフォルト非表示にしたい。【t...
-
jQueryで同じクラス名のものを...
-
Colorboxがうまく設置できません
-
Javascript初心者|jQueryの.va...
-
jQueryでのドラッグアンドドロ...
-
アップロードファイルの種類に...
-
embed要素のsrc属性の値を変更...
-
fancyboxのポップアップ時の画...
-
JQueryで画像の上で文字を動かす
-
一定時間で入れ替わるバナー画...
-
ボタンを押すたびに交互に切り...
-
全部のサイコロをjavascriptで...
-
交互に入れ替わる画像を複数配置
-
clear機能を失わずにファイルア...
-
JavaScriptが、Firefoxで動かな...
-
「画像クリックで音声再生」を ...
-
bxsliderで最初に縦に複数表示...
-
JQueryを使用して、画像をドラ...
-
イラストのボタンを押したとき...
-
背景色と連動するスライドショ...
おすすめ情報