0

setAttribute を使用して、各要素のマージンを変更しようとしています。

変数dist 「距離」を使用して、遅延「間隔」ごとに値を 10 まで減らすにはどうすればよいですか?

var dist=200; var speed = 2000;

function slideLeft(x){
    dist--; 
    slideSet[x].setAttribute("style","margin-right:"+dist+"px;");   
    setTimeout(slideLeft(x), delay);    
}

これらのスタイルと要素を例にとると...

.widiv { margin-right:200px; }

<div>
    <div class="widiv" ></div>
    <div class="widiv" ></div>
</div>

どうもありがとう。

4

1 に答える 1

0

いくつかの変更を加えたコードを次に示します。fiddle http://jsfiddle.net/chrismoutray/4p3xX/を参照してください。

var dist = 200, delay = 500,
    slideSet = document.getElementsByTagName('div');

function slideLeft(x) {
    dist--;
    if (dist < 0) return;
    slideSet[x].setAttribute("style", "margin-right:" + dist + "px;");
    setTimeout(function() {
        slideLeft(x);
    }, delay);
}

slideLeft(1);

スタイリングにいくつかの追加があります。

.widiv { 
    margin-right:200px; 
    float:left; 
    width: 100px; 
    border: 1px solid black; 
    height: 100px; }

主な違いは、setTimeout を呼び出すときに関数デリゲート ( function() { <your code here> }) を使用してslideLeftメソッドを呼び出すことで、x 変数が正しく使用されるようになっていることです。このようにしないと setTimeout にステートメントを渡すことはできないと思います。

また、div のスタイリングでは、float left を含めるようにしました。それ以外の場合は、margin rightへの変更は意味がありません。代わりに、margin leftにする必要がありますか?

于 2012-11-14T10:34:50.163 に答える