SimpleModal, Как закрыть всплывающее окно с анимацией

Я очень новичок в jQuery. У меня есть вопрос о SimpleModal.

Я пытаюсь закрыть всплывающее окно с эффектом анимации, но не получается.

Вот мой код.

 $('#btnClose').click(function(e) {
            // Closing animations
            $("#content").modal({ onClose: function(dialog) {
                dialog.data.fadeOut('slow', function() {
                    dialog.container.hide('slow', function() {
                        dialog.overlay.slideUp('slow', function() {
                            $.modal.close();
                        });
                    });
                });
            }
            });

        });
<div id="content" style="display: none;">
    <h1>Basic Modal Dialog</h1>
    <a href='#' id="btnCloset">Close</a>
</div>

Когда я нажимаю на ссылку "Закрыть", ничего не происходит. Любая помощь, пожалуйста? Большое спасибо!


person HorseKing    schedule 08.06.2010    source источник


Ответы (2)


Исходный, принятый ответ

Ничего не происходит, потому что вы неправильно написали btnClose в теге идентификатора HTML (вы называете его btnCloset). Тем не менее, это не будет работать с предоставленным кодом, поскольку он делает следующее: когда вы нажимаете на ссылку btnClose, вы создаете блок simpleModal из #content и сообщаете ему, что когда он закроется, он должен делать то, что нужно. в варианте onClose (что правильно). Таким образом, вы на самом деле не говорите ему закрыться, просто говорите, что это модальный диалог.

Вместо этого вы должны создать модальное окно из элемента #content, как вы делаете сейчас, но сделать это отдельно от события клика #btnClose. Затем вы должны связать событие click, чтобы закрыть диалог.

Вот код

$(function() {
    /* Make #content a modal */
    $("#content").modal(
     {
        onClose: function(dialog) {
            dialog.data.fadeOut('slow', function () {
                dialog.container.slideUp('slow', function () {
                    dialog.overlay.fadeOut('slow', function () {
                        $.modal.close(); // must call this!
                    });
                });
            });

        }
     }
    );

    /* When #btnClose is clicked, close the modal */    
    $('#btnClose').click(function(e) {
        $.modal.close();
    });
});



В качестве примечания: если вы добавите класс simplemodal-close к #btnClose, simpleModal автоматически закроет диалоговое окно, и вам не нужно будет привязывать событие клика самостоятельно.

Новый ответ основан на отзывах

Хорошо, я неправильно понял, как работает этот аддон, я думал, что это похоже на простой плагин диалога jQuery, но, как я понимаю сейчас, цель состоит в том, чтобы сделать существующий видимый элемент диалогом и при его закрытии преобразовать его обратно в исходную форму. . Новый код отслеживает состояние диалога (сохраняя doOpen в data ссылки и переключая его при каждом щелчке), а также открывает и закрывает диалог. Надеюсь, это ближе к тому, как вы хотели, чтобы это работало :)

$(function() {
    $("#btnClose")
    .data("doOpen", true)
    .click( function() {
        /* check whether or not we are to open or close the dialog */
        var doOpen = $(this).data("doOpen");
        /* toggle the data */
        $(this).data("doOpen", !doOpen);

        if (doOpen) {
            $("#content").modal({
                onClose: function(dialog) {
                    dialog.data.fadeOut('slow', function () {
                        dialog.container.slideUp('slow', function () {
                            dialog.overlay.fadeOut('slow', function () {
                                $.modal.close(); // must call this!
                            });
                        });
                    });
                }
            });
        }
        else {
            $.modal.close();
        }
    });
});
person Simen Echholt    schedule 08.06.2010
comment
Следуя предоставленным вами кодам, событие закрытия работает. Однако, когда я загружаю страницу, автоматически всплывает модальное окно. Во всяком случае, вы даете мне некоторую подсказку. Спасибо большое. - person HorseKing; 09.06.2010
comment
И я знаю, что могу использовать simplemodal-close, но у него нет анимации закрытия. - person HorseKing; 09.06.2010
comment
Хорошо, я думаю, что неправильно понял. Отредактировал мой ответ. Надеюсь, теперь я понял это лучше - person Simen Echholt; 09.06.2010
comment
Большое спасибо Симен Эххольт. - person HorseKing; 09.06.2010
comment
Я думаю, что в этом случае я могу использовать функцию onShow с простым модальным окном. Я все еще учусь этому. - person HorseKing; 09.06.2010
comment
Я разместил рабочий код здесь. Просто нужно определить функции onOpen и onClose вместе. - person HorseKing; 09.06.2010

Вот код, который работает отлично.

$('#btnOpen').click(function(e) {
            $('#content').modal({
                onOpen: function(dialog) {
                    dialog.overlay.fadeIn('slow', function() {
                        dialog.data.hide();
                        dialog.container.fadeIn('slow', function() {
                            dialog.data.slideDown('slow');

                        });
                    });
                },
                onClose: function(dialog) {
                    dialog.data.fadeOut('slow', function() {
                        dialog.container.slideUp('slow', function() {
                            dialog.overlay.fadeOut('slow', function() {
                                $.modal.close(); // must call this!
                            });
                        });
                    });
                }
            });

        });
        $('#btnClose').click(function(e) {
            $.modal.close();

        });
person HorseKing    schedule 08.06.2010