2016-09-03 2 views
1

Я хочу создать социальную боковую панель, которая может быть скрыта при нажатии на стрелку. Она скрывается по краю слева. Я пытался переключать классы, если операторы, но он только скрывает его и не отображается после второго щелчка. Это мой код прямо сейчас: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

Так что, когда первый $ ("фа-угол правый") работает селектор, есть нет такого элемента класса, поэтому click() не применяется ни к чему. Вы создадите элемент с этим классом позже. Таким образом, вам действительно нужно повторно запустить эти настройки click() после изменения вашего класса. Нравится:

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"); 

Таким образом, событие click изменяется при каждом изменении классов.

Смежные вопросы