Как с помощью jQuery убрать один «div» и добавить другой «div»?

Я создаю свое портфолио и хочу создать галерею для отображения своих проектов. У меня есть выбор из семи разделов, содержащих контент, который образует навигационный раздел моего веб-сайта с вкладками. Как и в случае с другими навигациями с вкладками, одновременно будет активен только один элемент div, содержащий содержимое. Однако, в отличие от других навигаций с вкладками, этот управляется PHP. Если определенный контент (в настоящее время установлен в функцию file_exists, но скоро будет контролироваться MySQL) доступен, div будет записан в навигацию и будет отображаться соответствующая ссылка. Если это не так, то ссылка будет скрыта и div не будет прописан. Требуемые файлы основаны на вызове $_GET, а требуемые файлы зависят от строки внутри моей переменной $_GET.

Каждая вкладка имеет уникальный идентификатор. В настоящее время (поскольку я не являюсь экспертом по Javascript) у меня есть опция «сброс», которая устанавливает стиль всех именованных div в «скрытый» стиль, прежде чем перевести выбранный div в «видимое» состояние.

Что я хочу сделать, если это возможно, так это:

Я хочу перейти от #div1 к #div2. Разделы 1, 2, 4 и 6 (для этого примера) активны. Я щелкаю ссылку, которая указывает моей странице отображать #div2 (функция в настоящее время говорит только скрыть ВСЕ div, а затем отобразить #div2, скрытие всех остальных div — это отдельная функция, которая вызывается внутри этой функции). #div1 в настоящее время виден.

  1. #div1 исчезнет
  2. #div2 исчезнет

Разделы 4 и 6 не будут затронуты. Разделы 3, 5 и 7 не будут затронуты, так как они (насколько это касается моей страницы) не существуют. Для этого примера каждое затухание может занять 3 секунды.

Я смутно знаю, что $('#div2').fadeIn(3000); будет представлять собой эффект постепенного появления для #div2, а аналог fadeOut() будет представлять собой постепенное исчезновение. Как мне использовать jQuery (у меня есть 1.5.2 на моем сайте), чтобы затухать #div1 и затухать #div2 БЕЗ воздействия на любой другой div, или проще сохранить код, поскольку он скрывает все мои div и просто добавить #div2? Пожалуйста, помните, я не являюсь экспертом по Javascript, я только начинаю, поэтому, пожалуйста, не оскорбляйте длину моего скрипта или мою неспособность понять что-то, что, как мне кажется, было бы таким простым.

Пожалуйста, помните, что в моей навигации есть до семи разделов. Сценарий должен найти видимый div на основе ссылки, по которой щелкнули, и затемнить его, затем постепенно добавить выбранный мной div, и он не должен касаться ни одного из оставшихся div.

Это достаточно легко понять и получить ответ?

РЕДАКТИРОВАТЬ @ 01:46 по Гринвичу, 30.04.2010

Спасибо, но это не похоже на то, что я хочу. Похоже, они бы работали, если бы было только два div, но помните, их может быть до семи, и ссылка должна знать, какой div виден, а какой нет.

В настоящее время у меня есть PHP-скрипт, который говорит: «Если этот файл существует, создайте этот div и примените к нему стиль 'visibleTab'. В противном случае сделайте это, но примените к нему стиль 'hiddenTab'». Мой код Javascript (теперь jQuery) выглядит следующим образом:

  function resetTabs() {
    $("#postersandprint").removeClass("tabs visibleTab").removeClass("hiddenTab").addClass("hiddenTab");
    $("#mobileapp").removeClass("tabs visibleTab").removeClass("hiddenTab").addClass("hiddenTab");
    $("#stylesheets").removeClass("tabs visibleTab").removeClass("hiddenTab").addClass("hiddenTab");
    $("#storyboards").removeClass("tabs visibleTab").removeClass("hiddenTab").addClass("hiddenTab");
    $("#motionpieces").removeClass("tabs visibleTab").removeClass("hiddenTab").addClass("hiddenTab");
    $("#interactives").removeClass("tabs visibleTab").removeClass("hiddenTab").addClass("hiddenTab");
    $("#developmentwork").removeClass("tabs visibleTab").removeClass("hiddenTab").addClass("hiddenTab");
  }

  function showTab(tabname) {
    resetTabs();
    $('#'+tabname).fadeIn(3000);
    $("#"+tabname).removeClass("hiddenTab").addClass("tabs visibleTab");
  }

Принцип таков:

Моя ссылка имеет щелчок, который вызывает мою функцию showTab и помещает соответствующий идентификатор div внутри функции, например:

<a href="javascript:;" onclick="showTab('mobileapp');">Link</a>

Функция скрывает все элементы div, а затем исчезает в том, который называется «имя вкладки», в данном случае «мобильное приложение».

Я сказал каждой функции сброса удалить любой класс с именем «hiddenTab», а также любой класс с именем «visibleTab» и «вкладки» перед добавлением класса «hiddenTab» в качестве своего рода «отказоустойчивого» подхода. Я также сказал моей функции showTab явно удалить класс «hiddenTab» из моей вкладки, которую я хочу видеть, и добавить классы «вкладки» и «visibleTab». Я забыл, почему у меня два стиля, но я уверен, что причина придет ко мне.

Я хочу, чтобы мой скрипт jQuery знал, какой div виден, а какой не входит в список из семи. В качестве примера можно привести #div1 и #div2, но это может быть любой div из выбранного. Раньше, когда я использовал функцию document.getElementById, она работала отлично, я просто хотел добавить затухание в сценарий, чтобы он выглядел лучше. Теперь это работает, но только когда я один раз перебираю элементы div. После этого он просто добавляет мой div под видимый, а не скрывает их. Я знаю, что что-то упустил или где-то напутал, но что я пропустил? Где я накосячил?


person Nathan Bunn    schedule 29.04.2011    source источник


Ответы (5)


Надеюсь, этот пример jsfiddle не настроен во вкладках. Он вам немного поможет. [Редактировать, добавлено всего 4 элемента div, дождитесь окончания анимации, прежде чем нажимать кнопку «Далее»]

По сути, он ищет в контейнере div видимый элемент с помощью :visible selector.

.eq(0) говорит, что нужно захватить только первый видимый элемент из коллекции, которую возвращает селектор. Если видимых элементов нет, он просто выбирает первый элемент.

Затем он выбирает идентификатор для отображения.

Одновременно вызывает обе анимации:

vis.fadeOut(speed);
next.fadeIn(speed);

Если вы хотите дождаться, пока один из них исчезнет, ​​прежде чем исчезнет следующий, используйте обратный вызов, упомянутый в других ответах.

Это прекрасно работает во всех новых браузерах, но немного тормозит в IE7 или младше.

В качестве альтернативы вы можете получить набор скрытых элементов с помощью :hidden.

Если вам нужен более прямой пример, вы можете опубликовать свой html, чтобы мы могли помочь с точными селекторами, которые лучше всего подходят.

person WSkid    schedule 30.04.2011

Может быть, это то, что вы хотите?

  $('#div1').fadeOut('3000', function() {
       $('#div2').fadeIn();
  });
person tradyblix    schedule 29.04.2011

Когда вы вызываете любую из функций эффекта jQuery, одним из параметров является функция обратного вызова, которая вызывается, когда анимация завершена. Вам просто нужно сделать что-то вроде этого

$("#div1").fadeOut(1000, function(){
    $("#div2").fadeIn(1000);
});

Вот пошаговая инструкция

$("#div1").fadeOut(1000, function(){

Это говорит о том, что когда div с идентификатором «div1» будет находиться лицом к лицу в течение 1000 миллисекунд (1 секунда) и после этого вызовет функцию.

$("#div2").fadeIn(1000);

Это просто заставит вашу новую идею исчезнуть после того, как другая полностью исчезнет.

});

Просто закрывает все, что мы открыли.

Я думаю, что вы беспокоитесь о том, что

$("div").fadeOut(1000);

Исчезли бы все div на странице, но поставив решетку и идентификатор, вы можете определить конкретный, мой идентификатор, например "#div1"

Кроме того, вы устанавливаете его с помощью атрибута id:

<div id = "div1"></div>
person Mark Lalor    schedule 30.04.2011

Я нашел этот jShowOff: плагин jQuery Content Rotator Эрика Каллевига — http://bit.ly/NgLRdb дайте его взгляд, кажется довольно полезным ....

в настоящее время пытаюсь разместить его в качестве модуля на моем сайте joomla

person juanm55    schedule 13.07.2012
comment
был небольшой конфликт относительно остальной части сайта с использованием $ в качестве переменной прототипа, но он был решен с помощью трюка jQuery.noConflict(){function.....} jQuery.noConflict() – jQuery API – bit.ly/NxbOTW - person juanm55; 17.07.2012

$("#button").click(function()
{
$("#div1").fadeOut("fast");
$("#div2").fadeIn("slow");
});

Этот код будет работать как нажатие кнопки, которое постепенно исчезнет из div1, а затем медленно исчезнет в другом div как div2.

person Skynet    schedule 30.07.2014