#javascript #jquery #html #css #transition
#javascript #jquery #HTML #css #переход
Вопрос:
В настоящее время я настраиваю свою домашнюю страницу и делаю несколько разборных блоков для лучшей структуры. Сворачиваемые блоки были созданы с использованием чистого CSS и HTML, но при активации сворачиваемого элемента (очевидно) div-элемент, где находится сворачиваемый, также должен быть увеличен (изменение высоты).
Чтобы достичь этого, я использую jquery и придумал следующее (это просто быстрый / маленький пример для демонстрации проблемы):
$(function() {
var height_content = $("#content").height();
$('#btn').click(function() {
if ($(this).is(':checked')) {
$('#content').css({
'height': height_content 700 'px',
});
height_content = $("#content").height();
console.log(height_content);
} else {
$('#content').css({
'height': height_content - 700 'px',
});
height_content = $("#content").height();
console.log(height_content);
};
});
});
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#content {
border: 1px solid red;
height: 200px;
width: 200px;
margin-left: auto;
margin-right: auto
}
#footer {
border: 1px solid green;
height: 50px;
width: 200px;
margin-left: auto;
margin-right: auto
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<div id="content">
<br><br><br><br><br><br><br><br>
<input id="btn" type="checkbox">
</div>
<div id="footer">
<p>Footnote</p>
</div>
</body>
</html>
И это работает, когда я нажимаю на флажок, содержимое div увеличивается. Теперь, поскольку это выглядело очень статично, я решил включить элемент `transition-для плавности, подобный этому:
...
if($(this).is(':checked')) {
$('#content').css({
'height': height_content 700 'px',
'transition': 'height 0.5s'
});
...
else {
$('#content').css({
'height': height_content - 700 'px',
'transition': 'height 0.5s'
});
...
Но теперь элемент высоты играет странно и расширяет его до разных ложных размеров. Журнал правильного процесса с возможностью расширения выглядит следующим образом:
test.html:26 900
test.html:36 200
test.html:26 900
test.html:36 200
test.html:26 900
test.html:36 200
test.html:26 900
test.html:36 200
test.html:26 900
test.html:36 200
test.html:26 900
test.html:36 200
test.html:26 900
test.html:36 200
test.html:26 900
test.html:36 200
test.html:26 900
test.html:36 200
test.html:26 900
test.html:36 200
test.html:26 900
test.html:36 200
С помощью опции перехода я получаю этот журнал:
test.html:26 200
test.html:36 900
test.html:26 0
test.html:36 1600
test.html:26 0
test.html:36 2300
test.html:26 0.484375
test.html:36 2995.36
test.html:26 4.60938
test.html:36 3695.36
test.html:26 0
test.html:36 4388.78
test.html:26 0
test.html:36 5087.64
test.html:26 0
test.html:36 5786.27
test.html:26 0
test.html:36 6486.27
test.html:26 0
test.html:36 7186.27
test.html:26 10.4062
test.html:36 7886.27
test.html:26 0
Есть ли у кого-нибудь идея, как я могу это исправить?
Комментарии:
1. Да, в вашем
else
у вас все еще добавляется высота'height': height_content 700 'px',
Кроме того, я не знаю, почему вы добавляете переход в свой JS, когда вы можете поместить его в свой CSS какtransition: height .5s ease;
в#content
div2. о, блин, это была орфографическая ошибка в
else
, конечно, есть-
, просто исправил это. Я попробую добавить идентификатор непосредственно в CSS, не подумал об этом, спасибо за предложение! редактировать: вводtransition
непосредственно в CSS#content
дает тот же результат..3. Если вы посмотрите на плохой результат, вы увидите, что он добавляет 700 пикселей каждый раз, когда вы нажимаете на него.