#jquery #slideshow #fadein #fadeout
#jquery #слайд-шоу #затухание
Вопрос:
Вкл http://judi.simpleupdates.com Я пытаюсь создать слайд-шоу из изображений на странице, используя jQuery fadeIn
и fadeOut
эффекты. Оба элемента fadeIn
без проблем. Однако fadeOut
не изменяет display
свойство div
, которое должно исчезнуть. Есть идеи, почему это может работать не так, как ожидалось?
Это строка, в которой происходит сбой:
$( ".carousel_item:nth-child(" selected ")" ).fadeOut(600);
ОБНОВЛЕНИЕ: Похоже, проблема связана с fadeOut
элементом, у которого нет width
и height
. Когда значения добавляются к свойствам width
и height
div.carousel_item
, fadeOut
вызов не работает должным образом. Другой метод заключается в удалении position: absolute
из потомка, img
в результате чего div
увеличивается до img
размеров.
Комментарии:
1. Можете ли вы предоставить несколько строк кода из вашего приложения?
2. не могли бы вы, пожалуйста, удалить комментарий к fadeout, чтобы мы могли его протестировать
3. рассматриваемый код теперь запущен. извините за это: P
Ответ №1:
похоже, проблема связана с fadeOut
элементом, у которого нет width
и height
. когда значения добавляются к свойствам width
и height
div.carousel_item
, fadeOut
вызов не работает должным образом. другой метод заключается в удалении position: absolute
из потомка, img
в результате чего div
увеличивается до img
размеров.
спасибо за всю вашу помощь и предложения!
Ответ №2:
может быть, вам просто нужно заменить текущую и выбранную переменные друг на друга в jQuery-selector? если я правильно понимаю, вы хотите отключить текущее и отключить выбранное, не так ли?
Комментарии:
1. нет,
current
этоdiv
то, что должно быть показано, иselected
это элемент, который должен исчезнуть, хотя мне нравится ваше предложение о смене имен переменных, если это делается по всему файлу.
Ответ №3:
Изменение параметра отображения в HTML на <div id="txt2" class="carousel_item" style="display: none; ">
должно корректно вызвать затухание.
Вам также может потребоваться изменить jQuery на: $( ".carousel_item:nth-child(" selected ")" ).fadeOut(600).hide();
Вы вызываете fadeIn / fadeOut для элементов, для которых оба значения равны display: block
. Для работы ему нужны альтернативные состояния.
ОБНОВИТЕ После загрузки локальной копии вашего сайта, изменив функцию showhide() в вашем js на:
var inc = 1
function showhide(current) {
if (inc == 1) current = 2;
$( ".carousel_item:nth-child(" selected ")" ).fadeIn(600);
$( ".carousel_item:nth-child(" current ")" ).fadeOut(600).hide();
selected = current;
inc ;
}
работает в моем тестировании. Надеюсь, у вас это работает. Я добавил счетчик, поскольку ваш первоначальный счетчик, похоже, устанавливает оба selected
и current
в 1.
Комментарии:
1. для всех разделов с классом .carousel_item уже установлено значение display: none; во внешнем файле css. свойство отображения изменяется на block только после вызова fadeIn для этого конкретного div. я также попытался установить значение inline, не решив проблему.
2. это предложение сработало для меня. единственная проблема заключается в том, что если в слайд-шоу будет добавлено больше элементов (контролируемых клиентом), то это не сработает. итак, ваше решение было правильным, учитывая имеющуюся у вас информацию. окончательное решение обсуждалось выше.