2014-07-10 88 views
3

我試圖實現滑動切換從左到右,反之亦然使用jQuery toggle()jQuery滑動切換動畫連同其他元素

切換工作,但我希望div的下一個元素切換到平滑動畫平行於切換效果。

校驗碼我想:jsFiddle

HTML

<button id="button" class="myButton">Run Effect</button> 

<div id="myDiv"> 
    <p>This div will have slide toggle effect.</p> 
</div> 
<div class="other_details"> 
    This should move parallel with re-size of div being toggled. 
</div> 

jQuery的

$(".myButton").click(function() { 
    var effect = 'slide'; 
    var duration = 500; 
    $('#myDiv').toggle(effect, {direction: "left"}, duration); 
}); 

CSS

#myDiv { 
    color:Green; 
    background-color:#eee; 
    border:2px solid #333; 
    text-align:justify; 
    float:left; 
    width:200px; 
} 
.other_details{ 
    float:left; 
    font-weight:bold; 
    width:200px; 
    border:1px solid black; 
    padding:5px; 
    margin-left:2px; 
}  

您可以在輸出中看到"other_details" div不與切換效果平行移動。 只有在切換效果完成後才能移動。

請幫我解決問題。

+0

更新的版本,我認爲你將不得不他們兩人包裝成一個容器中的「保證金左」屬性和將動畫應用於容器div。 – j809

+0

@ j809,謝謝你的寶貴意見。但是我認爲它會使用'#myDiv'切換'.other_details' div。我不想要的。我只想'#myDiv'切換,'.other_details'應該始終保持可見狀態。 –

+0

爲什麼你不使用jQuery .animate()? (http://api.jquery.com/animate/) – Izzy

回答

5

我用animate()

看看這個jsFiddle

$(".myButton").click(function() { 
var effect = 'width'; 
var duration = 500; 
//if the current width is 200px, then the target width is 0px otherwise the target width is 200px 
var targetWidth = $('#myDiv').css("width")=="200px"?"0px":"200px"; 
//Check if the div was hidden then display it 
if(!$("#myDiv").is(":visible")){ 
    $("#myDiv").show(); 
} 
$('#myDiv').animate({width: targetWidth},duration,function(){ 
    if($(this).css("width")=="0px"){ 
     $(this).hide(); 
    } 
    else{ 
    $(this).show(); 
    } 
}); 
}); 

我已經修改了CSS的#myDiv並添加

overflow:hidden; 

編輯:

我已經修改,而不是「寬度」屬性

退房在這個jsFiddle

$(".myButton").click(function() { 
var effect = 'width'; 
var duration = 500; 
//get the outer width of the div 
var divOuterWidth= $("#myDiv").outerWidth(); 
divOuterWidth+= 8; //the margin on the body element 

var targetMargin = $('#myDiv').css("margin-left")==((-divOuterWidth)+"px")?"0px":(-divOuterWidth)+"px"; 

$('#myDiv').animate({marginLeft: targetMargin},duration); 
}); 
+0

1+爲答案和努力。但是我面臨的問題是,它重新調整大小##myDiv,這樣它的內容就會下降,並且它的高度適應內容(這顯然會干擾我網站中的其他元素和響應)。我想要「移動幻燈片」效果,而不是「調整大小」。 :) –

+0

我已經更新了答案,請檢查這是你需要的:) – Dola

+1

非常感謝你的完美答案。這個比前一個短得多。所以我真的很喜歡你提供的解決方案... +1111 :) –