2016-09-03 13 views
1

私は矢印をクリックすると非表示にできるソーシャルなサイドバーを作りたいと思っています。余白左に隠れています。私はクラスのif文をトグルしようとしましたが、それは隠すだけで、2回目のクリック後には表示されません。これが今の私のコードです:JavaScriptは要素を隠すだけです

のjavascript-のjQuery:

$(".socialArrow").click(function() { 
    $(".arrowLeft").toggleClass("fa-angle-left fa-angle-right"); 
}); 
var wrapper = document.getElementById("socialWrapper"); 
$(".fa-angle-left").click(function() { 
    wrapper.style.marginLeft = ("-80px"); 
}); 

$(".fa-angle-right").click(function() { 
    wrapper.style.marginLeft = ("0px"); 
}); 

HTML:

<div class="socialContainer"> 
    <ul id="socialWrapper"> 
     ...some links... 
    </ul> 

    <span class="socialArrow"> 
     <i class="arrowLeft fa fa-angle-left"></i> 
    </span> 

</div> 

それを修正するためにどのように任意のアイデア?

私の英語は申し訳ありませんが、私は英国/米国ではありません。

+0

このデモを使用するhttp://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_eff_toggle –

+0

まだ存在しない要素(.fa-angle-right)にイベントリスナー(クリック)を追加します。 1つのクリックハンドラだけでコードを改善できます。 clickメソッド内では、.fa-angle-rightが存在するかどうかをチェックし、それに基づいてクラスを追加または削除します。 – meavo

答えて

0

それはtoggleClassで動作するはず、この方法:

$(".socialArrow").click(function() { 
    $("#socialWrapper").toggleClass("closed"); 
}); 

とCSS:

#socialWrapper.closed { 
    margin-left: -80px; 
} 
+0

ありがとう!かなり良い作品。 –

1

だから最初の$( "FA-角度右")セレクタを実行すると、そこにありますそのようなクラス項目はまだないので、click()は何にも適用されません。後でそのクラスを持つ要素を作成します。したがって、クラス変更後にclick()割り当てを再実行する必要があります。 Like:

function setClick() { 
    $(".fa-angle-left").click(function() { 
     wrapper.style.marginLeft = ("-80px"); 
    }); 
    $(".fa-angle-right").click(function() { 
     wrapper.style.marginLeft = ("0px"); 
    }); 
} 

$(".socialArrow").click(function() { 
    $(".arrowLeft").toggleClass("fa-angle-left fa-angle-right"); 
    setClick(); 
}); 

var wrapper = document.getElementById("socialWrapper"); 

このようにして、クリックイベントはクラスが変更されるたびにリセットされます。

関連する問題