jQuery toggleClass - ослабление не работает
у меня возникли проблемы с получением смягчающего свойства toggleClass
на работу. Я искал на этом сайте и других, но до сих пор не могу заставить его работать так, как ожидалось. Класс переключается просто отлично, но он не облегчает вход или выход плавно.
вот мой пример кода: демо
вот (все) скрипты, которые я загружаю в свой проект:
<!-- Scripts -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
у меня есть подозрение, что это имеет какое-то отношение к сценариям, которые я загружаю (или, может быть не заряжается?) потому что я просмотрел код несколько раз и сравнил его непосредственно с документами jQuery. Я очень новой для jQuery.
то, что я пытаюсь сделать, похоже на эффект раскладушки. На странице загрузите <div>
отображается или скрывается в зависимости от значения, взятого из базы данных, и флажок предназначен для переключения <div>
открыть или закрыть.
3 ответов
в вашем демо-коде я изменил:
.hideMe {
display:none;
}
to
.hideMe {
opacity: 0;
}
это работает с эффектом смягчения, но это создает проблему, когда элемент просто занимают пространство. Это не супер-элегантный, но я решил это проблема для вас здесь, используя второй класс removeMe здесь:
https://jsfiddle.net/je7d9wgr/
бонус:
в качестве альтернативы использовать slideToggle()
, пример здесь:https://jsfiddle.net/gL0vnhc2/
Бонус 2:
этот код проверяет текущее состояние флажка, а затем условно анимирует на основании значения:
это также можно сделать с помощью css transitions
, отсутствие потребности для jQuery облегчая влияния
вот простая демонстрация.
в CSS
.hideMe {
height:0px !important;
border:none !important;
overflow:hidden;
}
#create-login-group {
-webkit-transition:all 0.4s ease;
transition: all 0.4s ease;
border: 2px solid #000;
height: 100px;
width: 150px;
}
JS
$( "#create-login-button" ).change(function() {
$('#create-login-group').toggleClass("hideMe", 100);
});
работающего JS Fiddle
работающего фрагмент
$(function(){
$( "#create-login-button" ).change(function() {
$('#create-login-group').toggleClass("hideMe", 100);
});
});
.hideMe {
height:0px !important;
border:none !important;
overflow:hidden;
}
#create-login-group {
-webkit-transition:all 0.4s ease;
transition: all 0.4s ease;
border: 2px solid #000;
height: 100px;
width: 150px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" id="create-login-button" role="button">
<div id="create-login-group" class="hideMe">
Some text is here
</div>
<div>
more content
</div>
Если вы хотите использовать опцию toggleClass, это немного сложно, но будет работать.
добавление другого класса, который отвечает за "display: none", и переключение его после или до фактического анимированного класса.
var lGroupEle = $('#create-login-group');
$("#create-login-button").change(function() {
if ($(lGroupEle).hasClass("hidden")) {
$(lGroupEle).toggleClass("hidden");
$(lGroupEle).toggleClass("hideMe", 1000, "easeInOutQuad");
} else {
$(lGroupEle).toggleClass("hideMe", 1000, "easeInOutQuad", function() {
$(lGroupEle).toggleClass("hidden");
});
}
});
.hideMe {
opacity: 0;
}
.hidden {
display: none;
}
#create-login-group {
border: 2px solid #000;
height: 100px;
width: 150px;
}
<!-- Scripts -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
<input type="checkbox" id="create-login-button" role="button">
<div id="create-login-group" class="hidden hideMe">
Some text is here
</div>
<div>
more content
</div>
или скрипка, если вы предпочитаете -https://jsfiddle.net/63o92nms/1/