重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

以下のコードで、幅670ピクセルの範囲で100~600ピクセルの範囲で左から右に動く動画を表示させて、0~100と600~670の範囲では表示させないようにする動作を繰り返しているのですが、
100で画像が現れる時と、600で画像が消えていく時に、いっぺんに消えたり現れたりするのではなく、marqueeのようにその境界で、徐々に消えたり現れたりするように動作を変更したいのですが、これをJavascritoで実行したい場合、どういった書き方をすればいいのでしょうか?
ご経験のある方は、御教示願えればと思います。


<html>
<head>
<title>指定範囲内を動き続ける画像</title>
<script type="text/javascript">

xmin = 0; // 左 動く範囲の設定
ymin = 0; // 上
xmax = 670; // 右
ymax = 360; // 下
xmid_l = 100;
xmid_u = 600;
//x = 1;
// y = 1;
function move(){ // 画像の移動
img1.style.pixelLeft = img1.style.pixelLeft + 1;
if((img1.style.pixelLeft >= xmin) && (img1.style.pixelLeft <= xmid_l )) {
img1.style.visibility = 'hidden';
}
if((img1.style.pixelLeft >= xmid_l) && (img1.style.pixelLeft <= xmid_u )) {
img1.style.visibility = 'visible';
}
if((img1.style.pixelLeft >= xmid_u) && (img1.style.pixelLeft <= xmax )) {
img1.style.visibility = 'hidden';
}
if(img1.style.pixelLeft >= xmax) {
// x = 2;
img1.style.pixelLeft = 0;
}
}

function tm(){ // タイマー
setInterval("move()",30);
}

</script>
</head>
<body onLoad="tm()">
<img src="./img/img2.gif" ID="img1" STYLE="position:absolute;top:100;left:200">
</body>
</html>

A 回答 (2件)

とりあえず思いつく方法は…


・画像の一部を表示するのならclipを利用するとか
 http://w3g.jp/css/display_position/clip

・あるいは親要素を設けておいて、overflow:hiddenに設定しておくとか
 http://w3g.jp/css/display_position/overflow


簡単な方で、二番目を利用した例
* スクリプトは画像を移動しているだけで、後はブラウザ任せという方法
* bodyのmarginやpaddingなどがあるので、位置は正確にはご質問通りではありません。

(全角空白は半角に)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//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">
#box{
position: relative;
width: 500px;
height: 50px;
margin-left: 100px;
overflow:hidden;
}
#box img{
position:absolute;
}
</style>
</head>
<body>

<div id="box">
<img src="btn2.gif" alt="">
</div>

<script type="text/javascript">
<!--
(function(){
 var min = -100; // min position
 var max = 570; // max position

 var interval = 30; // 速度(インターバル)
 var step = 1; // 速度(ステップ)
 var left = 0; // leftの初期値

 var img = document.getElementById("box").getElementsByTagName("img")[0];
 var id = setInterval(function(){
  left += step;
  if(left > max) left = min;
  img.style.left = left + "px";
 }, interval);
})();
//-->
</script>
</body>
</html>
    • good
    • 0
この回答へのお礼

返信遅くなって申し訳ないです。
これでうまくいくようです。JavaScriptの問題というよりは、ブラウザの表示方法の仕方の問題ということですね。

ありがとうございました。

お礼日時:2011/04/08 04:04

時間が無いので、コード自体は掛けませんが、


クローンでDOMを複製して、移動距離だけ調整すればいかがでしょうか。
    • good
    • 0

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