2016-04-25 1 views
0

私が達成しようとしているのは、divを隠した後にleftプロパティのelemement(画像)を移動することです。JQueryを使用して要素を非表示にした後で、leftプロパティを変更するにはどうすればよいですか?

これを行うには、.promise()というJQueryの関数を使用します。ここに私のコードは次のとおりです。

HTMLコード:

<div id="outerContainer"> 
    <div id="left"></div> 
    <div id="container"> 
    <div id="div1" class="square red"></div> 
    <div id="div2" class="square green"> 
     <img id="image" src="http://cdn.sstatic.net/Sites/stackoverflow/img/[email protected]?v=73d79a89bded&a"> 
    </div> 
    <div id="div3" class="square blue"></div> 
    </div> 
    <div id="right"></div> 
</div> 

CSSコード:

#outerContainer{ 
    display: flex; 
    height: 100vh; 
} 

#left{ 
    display: block; 
    width: 20%; 
    border: solid 1px; 
    border-color: #e0e0d1; 
} 

#container{ 
    display: flex; 
    position: relative; 
    flex-flow: row wrap; 
    width: 100%; 
    flex: 2; 
} 

#right{ 
    flex: 1; 
    padding: 20px; 
    width: 20%; 
    background-color: #354551; 
} 
.red{ 
    background-color: red; 
} 

.green{ 
    background-color: green; 
} 

.blue{ 
    background-color: blue; 
} 

.square{ 
    flex: 1 0 10%; 
    height: 50px; 
} 

#image{ 
    position: absolute; 
    z-index: 1; 
    width:50px; 
    height:50px; 
    left: 30px; 
} 

#div2{ 
    position: relative; 
} 

はJQueryコード:

$('#left').click(function() { 
    $(this).hide(); 
}); 

$("#left").promise().done(function(){ 
    $("#image").css({left: "+=" + 30}); 
    //$("#image").css({left: "+=" + 30 + "px"}); Same behaviour as before 

}); 

あなたがそれを証明できる

left要素を削除した後、画像を右に移動したいのですが(ピクセルを左に追加する必要があります)、左の要素が完全に削除されるまで待つ必要がありますなぜ私は.promise()関数を使用する理由)。

leftプロパティが変更されないため、.promise()はブラウザをブロックしているようです。

削除した要素が完全に非表示になった後で、要素のleftプロパティを変更するにはどうすればよいですか?

ありがとうございます!

$('#left').click(function() { 
    $(this).hide(0, function() 
    { 
     $("#image").css({left: "+=" + 30}); 
    }); 
}); 

:あなたはpromise()機能を使用して主張しますが、そうでなければ、あなたもこのように、隠ぺいが完了した後に呼び出されhide()機能、でコールバックを使用することができれば

+0

。 デフォルトでは、タイプ選択された要素のすべてのアニメーションが完了したときに返されるPromiseが解決されることを意味する "fx"です。 – j08691

+0

@ j08691しかし、ここでは 'left' divに影響を与える' .hide() '関数しかありません。私はそれが終わったと思った。 –

答えて

0

わかりません「.promise()メソッドは、コレクションにバインドされた特定のタイプのすべてのアクションは、キューに入れられたかどうか、一度に解決され、動的に生成された約束、終了しているが返されますFIDDLE

+0

いいえ、私は '.promise()'関数の使用を主張しませんでした。機能を使用せずにソリューションを提供していただきありがとうございます! –

1
$("#left").promise().done(function(){ 
    $("#image").css({left: $("#image").position().left + 30}); 
}); 
+0

私が望んだのは、左のdivを隠した後に画像を移動することでした。 divを非表示にする前に移動しないでください。とにかく、質問に答えてくれてありがとう! –

関連する問題