Используя Colorbox, как я могу создать состояния истории браузера для каждого модального окна?

Я использую подключаемый модуль jQuery ColorBox для создания модальных лайтбоксов для различных целей на моем сайте. В некоторых случаях мы хотели бы, чтобы модальное окно ajax создавало новое состояние истории в браузере, чтобы, если пользователь нажмет кнопку «Назад», он закрыл модальное окно и вернул их к базовому представлению.

Во-первых, возможно ли подобное поведение с ColorBox? Во-вторых, я изучил window.onhashchange, а также этот плагин hashchange, но я действительно изо всех сил пытался заставить что-то работать вместе с плагином ColorBox. Я надеюсь, что кто-то пытался или успешно выполнил что-то подобное, кто может иметь некоторое представление о том, как это можно сделать.


person Michael Irigoyen    schedule 15.11.2011    source источник


Ответы (2)


Да, это можно сделать. Здесь я предполагаю, что вы собираетесь использовать встроенный контент (скрытый) для своих модальных окон. Ссылки откроют ваши цветные окна, но вместо того, чтобы прикреплять цветное окно к ссылке обычным способом, вы просто используете обычные ссылки с параметром запроса, определяющим, какое модальное окно открывать: ?cb=modal1. Затем в вашем docReady вы просто ищете параметры цветового поля в строке запроса и открываете соответствующее цветовое поле. Таким образом, не имеет значения, где находится ваша ссылка, и нет необходимости объявлять ссылки как ссылку с цветовой рамкой. В этом примере используется функция getParameterByName в этом ответе, но Конечно, вы можете использовать любую стратегию, которая вам нравится, чтобы получить параметры запроса.

$(document).ready(function() {
    var modal = getParameterByName("cb");

    if(modal != "") {
        $.colorbox({
            href: "#" + modal,
            inline: true
        });
    }
});

Тогда любая ссылка на модальное окно будет выглядеть так:

<a href="yourpage?cb=modal1">Open modal 1</a>

Ознакомьтесь с полным кодом для этого на этом jsfiddle.

Обновление: кнопка "Назад" закрывает цветовую панель

Прочитав ваши комментарии, я лучше понимаю, чего вы хотите добиться. Итак, если вам нужно только закрыть цветовое поле, когда пользователь нажимает кнопку «Назад», вместо строк запроса вы можете использовать хэши URL-адресов в своих ссылках:

<a href="#colorbox-modal1">Open colorbox</a>

Чтобы отслеживать изменения в хэше местоположения, вы можете использовать этот подключаемый модуль jQuery onhashchange или что-то подобное. И затем в вашем docReady:

$(document).ready(function() {
    $(window).hashchange(function(){
            //gets the colorbox content id from the url hash
        var getCb = function() { return location.hash.match(/(#colorbox-.*)/) && RegExp.$1 },
            cb = getCb();

        if(cb) {
            $.colorbox({
                href: cb, 
                inline: true,
                //if closing with ESC key or overlay click, we
                //need to go back so that hashchange is fired
                //if the same colorbox is opened again
                onClosed: function() {
                    if(getCb()) {
                        history.go(-1);
                    }
                }
            });
        } else {
            $.colorbox.close();
        }
    })
});

Вот скрипт для этого, но с отказом от ответственности: IE8 и IE9 имеют проблемы с этим кодом пока он внутри скрипки. Хотя, когда я вынимаю его, все в порядке.

person uɥƃnɐʌuop    schedule 19.11.2011
comment
Это выглядит многообещающе для тех, кто использует якорные ссылки для вызова Colorbox. К сожалению, это не так. Я прикрепляю Colorbox к событию щелчка всей строки таблицы. +1, хотя, потому что это сработало бы в другой ситуации. - person Michael Irigoyen; 21.11.2011
comment
Ах, я понимаю, но тогда как вы намеревались предотвратить выход страницы при нажатии назад? Я не думал, что это возможно без Покинуть эту страницу? Родной диалог. Или вы имели в виду, что у вас будет кнопка «Назад» в цветовом поле? Потому что, если это так, я тоже делал это раньше. Если вы все еще ищете ответ, я могу обновить этот ответ с помощью решения, которое я использовал. - person uɥƃnɐʌuop; 21.11.2011
comment
Если загрузить мою начальную страницу, она покажет таблицу, полную строк с разными билетами. Щелчок по строке открывает Colorbox для отображения информации о билете. Единственный способ закрыть модальное окно — нажать кнопку закрытия в правом верхнем углу, но я хотел бы, чтобы пользователи также нажимали кнопку «Назад» в браузере, чтобы закрыть его, по существу возвращая их к табличному представлению. Это действительно то поведение, которого я пытаюсь достичь. - person Michael Irigoyen; 21.11.2011

Что ж, я нашел ответ для вопрошающего (если кому-то еще интересно). Вам понадобится плагин haschange, упомянутый выше. Я использую следующее решение на DRUPAL-сайте с плагином colorbox.

Вот так:

// When colorbox completed, add the hash "#colorbox"
$(document).bind('cbox_complete', function () { 
  window.location.hash = '#colorbox';
});

$(window).hashchange(function(){
  // Return true if hash was found
  var getCb = function() { return location.hash.match('#colorbox')},
  cb = getCb();
  // If there is no hash (which happens when using the browsers back-button), close the colorbox
  if(!cb) {
    $.colorbox.close();
  }
});  

Вот и все :)

person Fab Ulous    schedule 01.07.2013