Вкладки пользовательского интерфейса jQuery: показывать другой div с каждой активной вкладкой

#javascript #jquery #jquery-ui-tabs

#javascript #jquery #jquery-ui-tabs

Вопрос:

Я использую пользовательский интерфейс jQuery Tabs со стандартной структурой вкладок (http://jqueryui.com/demos/tabs / ). Я не включил сюда весь html, поскольку это излишне, если вы знакомы с пользовательским интерфейсом Tabs.

Но в этом случае, что мне нужно сделать, это показать другое изображение для каждой активной вкладки. Т.Е. другое изображение в #headerwrapper, когда активен #tabone, и другое, когда активен #tabtwo и т.д. И в идеале добавлять / выключать эти изображения с чем-то вроде эффекта прозрачности fx.

Инициализация моих вкладок выглядит следующим образом:

 var $tabs= $("#tabs").tabs({
    }); 
  

Похоже, мне нужно сделать это (согласно ответу Мэтта, приведенному ниже), чтобы найти активную вкладку:

 $('#tabs').tabs({
select: function(event, ui) { .... });
  

Но мне не повезло с ответом Мэтта.

Это headerwrapper и image CSS:

 #headerwrapper {
background: url(images/image.jpg) top center no-repeat;
height:88px;
}
  

Возможно ли показывать разные изображения для каждой вкладки и изменять их (т. Е. fx: {opacity: ‘toggle’}) по мере их изменения?

Ответ №1:

Вы могли бы использовать data-* атрибуты:

 $("#tabs").tabs({
    select: function($event, ui) {
        /* Extract the image from the active tab: */
        var img = $(ui.panel).data("image");

        /* Animate the header out, set the background css, then animate back in: */
        $("#headerwrapper")
            .animate({ opacity: 'toggle' }, function() {
                $(this).css("background-image", "url("   img   ")")
                    .animate({ opacity: 'toggle' });
            });
    }
});
  

И на каждой панели вкладок было бы data-image определено:

 <div id="tabs-1" data-image="http://placekitten.com/g/300/88">...</div>
  

Вот рабочий пример: http://jsfiddle.net/8muBm/2 /

Комментарии:

1. Это близко к тому, что я пытаюсь сделать, но как я могу поменять фоновое изображение в CSS?

2. @songdogtech: Я еще раз взгляну на вопрос и соответствующим образом обновлю свой ответ.

3. @songdogtech: Смотрите мой обновленный ответ — пожалуйста, дайте мне знать, если он не соответствует вашим требованиям.

4. Спасибо! Это отлично работает. Между изображениями есть приятный переход. Единственная проблема, с которой я сталкиваюсь сейчас, заключается в том, что когда я загружаю страницу Tabs в первый раз (или перезагружаю страницу, чего никто не будет делать при обычном использовании), изображение не отображается, поэтому я не знаю, как это исправить. Каким-то образом установить изображение по умолчанию?

5. @songdogtech: Если вы загружаете страницу в первый раз, должно отображаться значение по умолчанию background-image для #headerwrapper (по крайней мере, в примере). Это то, что вы имеете в виду?

Ответ №2:

Вы можете установить само изображение. Итак, в зависимости от того, на какой вкладке вы находитесь, вы можете переименовать изображения в header0, header1 и т.д… Вы можете использовать

 $('#example').tabs({
    select: function(event, ui) {
        var selected = $('#example').tabs('option', 'selected');
        $("#headerimg").attr("src", "/new/image/header"   selected   ".jpg");
    }
});
  

Что-то подобное должно сработать. Вы можете получить текущую выбранную вкладку. В противном случае вы также всегда можете использовать оператор if / else.

Комментарии:

1. Гораздо лучшая идея, чем то, о чем я думал; Я могу использовать headerimg1 и т.д. Для названий изображений. Как бы я работал с CSS (добавленным выше) и attr в функции, чтобы учесть, что это фоновое изображение?

2. @songdogtech Я, честно говоря, никогда раньше не работал с jquery и css, но api.jquery.com/css им можно манипулировать.