我缺少什么?在这段代码上

What i'm missing? On this code

我正在尝试打开和关闭面板。使用这个..

$('.closed').click(function(){

    $('.social_bar').animate({right: "20px"},800);
    $(this).removeClass('closed');
    $(this).addClass('opened');

});

$('.opened').click(function(){

    $('.social_bar').animate({right: '-20px'},800);
    $(this).removeClass('opened');
    $(this).addClass('closed');

  });

但不明白我做错了什么.. 从逻辑上讲这应该是可行的..

当此 JavaScript 为 运行 时,您的代码将 click 事件绑定到 DOM 中存在的元素。

由于您是在单击时动态分配 class openedclosed,因此您需要使用 .on 在元素上绑定适当的事件。

试试下面的代码:

$(document).on('click', '.closed', function(){

    $('.social_bar').animate({right: "20px"},800);
    $(this).removeClass('closed');
    $(this).addClass('opened');

});

$(document).on('click', '.opened', function(){

    $('.social_bar').animate({right: '-20px'},800);
    $(this).removeClass('opened');
    $(this).addClass('closed');

});

您在运行时更改 classes,但您仅在加载时附加事件。要使事件处理程序对 class 更改做出反应,您需要委托它们,如下所示:

$(document).on('click', '.closed', function(){
  $('.social_bar').animate({ right: "20px" }, 800);
  $(this).toggleClass('opened closed');
}).on('click', '.opened', function() {
  $('.social_bar').animate({ right: '-20px' }, 800);
  $(this).toggleClass('opened closed');
});
.social_bar {
  height: 100px;
  width: 100px;
  background: red;
  position: relative;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="closed">click</button>
<div class="social_bar">

</div>

最好做一个变量来判断面板是打开还是关闭。

var pressed = false;
function show = {...};//here you can provide addClass and removeClass and don't forget to set pressed = true;



function hide = {...};//the same here + pressed = false;
$(your target).on("click", function(){
   if(!pressed){ //if not pressed then show
    show(); 
   } else {
    hide();
   };
});