Вот моя проблема:
$(document).ready(function () {
$("#field-type").change(function () {
$val = $(this).val();
if ($val == "checkbox") {
$("#check-boxes").addClass("shown");
} else {
$("#check-boxes").removeClass("shown");
}
})
});
Нажмите на поле и установите флажок. Мой хороший переход на показ скрытых опций работает. Но я хотел бы использовать элемент HIDE #check-boxes
, так что между Field type
и Description
будет не так много пробелов. Я попробовал display:none
в элементе #check-boxes
а затем в Javascript fadeIn
и я получаю очень глючные результаты.
Можно ли это сделать?
Добавьте эти стили:
#check-boxes {
transition: all 1.2s ease-in-out;
transform: translateX(250px) rotateX(135deg);
opacity: 0;
display: none;
}
#check-boxes.shown {
transform: translateX(0px) rotateX(0deg);
opacity: 1;
display:block
}
Если вы хотите использовать slideDown()
и slideUp()
с непрозрачностью, вы можете сделать это, используя animate()
if ($val == "checkbox") {
$("#check-boxes").css('opacity', 0).slideDown('slow').animate({ opacity: 1 },{duration: 'slow' });
} else {
$("#check-boxes").css('opacity', 1).slideUp('slow').animate({ opacity: 0 },{duration: 'slow' });
}
})
Демо- скрипт
Вы можете легко изменить это, установив свойство margin-bottom
ваших .form-group
в 0
:
.form-group {
margin-bottom: 0;
}
В jQuery встроены методы затухания в/из. Например:
//replace $("#check-boxes").addClass("shown"); with
$("#check-boxes").show(400); //fade in 400 ms, essentially the same as jQuery fadeIn()
//$("#check-boxes").removeClass("shown"); with
$("#check-boxes").hide(400); //fade out 400 ms, essentially the same as jQuery fadeOut()
Показать документы
Скрыть документы
Кроме того, для пользовательских анимаций вы можете посмотреть в функции animate
jQuery. Взгляните на документы для получения подробной справки.
Я понимаю, что вы имеете в виду, я получал непоследовательные результаты. Как и следовало ожидать, отображение не является анимированным, что может быть проблемой при объединении переходов с этим. Я пробовал переходить на высоту, но это выглядело странно.
В конце я использовал setTimeout, чтобы отделить изменение свойства отображения и сделать переход:
http://jsfiddle.net/BYossarian/GDj7v/28/
Изменения в HTML:
<div id="check-boxes" class="hidden">
Добавлен CSS:
.hidden {
display: none;
}
JS:
$(document).ready(function () {
$("#field-type").change(function () {
var $val = $(this).val(),
checkboxes = $("#check-boxes");
if ($val === "checkbox") {
checkboxes.removeClass('hidden');
setTimeout(function () {
checkboxes.addClass('shown');
}, 10);
} else {
checkboxes.removeClass('shown');
setTimeout(function () {
checkboxes.addClass('hidden');
}, 1210);
}
});
});
EDIT/ALTERNATE SOLUTION: Кроме того, перемещение правила свойства transition
в правила для #check-boxes.shown
означает, что переход происходит только в одном направлении, что устраняет проблему, с которой я #check-boxes.shown
с плохой высотой:
http://jsfiddle.net/BYossarian/GDj7v/30/
CSS:
#check-boxes {
-webkit-transform: translateX(250px) rotateX(135deg);
transform: translateX(250px) rotateX(135deg);
opacity: 0;
height: 0;
}
#check-boxes.shown {
transition: all 1.2s ease-in-out;
-webkit-transform: translateX(0px) rotateX(0deg);
transform: translateX(0px) rotateX(0deg);
opacity: 1;
height: auto;
}
Что-то вроде этого?
$(document).ready(function() {
$('#check-boxes').hide();
$("#field-type").change(function() {
$val = $(this).val();
if($val == "checkbox") {
$('#check-boxes').show(0, function(){
$("#check-boxes").addClass("shown");
});
} else {
$("#check-boxes").removeClass("shown");
}
})
});