Fade in overlay в модальном диалоге - PullRequest
19 голосов
/ 15 апреля 2009

У меня есть диалоговое окно JQuery UI, которое является модальным и имеет черный фон с непрозрачностью 50%. Можно ли уменьшить прозрачность фона от 0% до 50%? Если так, то как? Потому что в настоящее время это похоже на удар по лицу, когда отображается диалоговое окно.

FWIW, это CSS, который я сейчас использую:

.ui-widget-overlay {
    background: black;
    opacity: 0.5;
    filter: alpha(opacity = 50);
    position: absolute;
    top: 0;
    left: 0;
 }

Ответы [ 8 ]

37 голосов
/ 22 сентября 2010

Вы также можете добавить это к fadeIn модал:

$(loginForm).dialog({
        resizable: false,
        open: function(){
            $('.ui-widget-overlay').hide().fadeIn();
        },
        show: "fade",
        hide: "fade" 
});

Надеюсь, это поможет:)

7 голосов
/ 12 октября 2012

Это расширение ответа Лиама Поттера. Его работы отлично подходят для появления, но не справляются с исчезновением. Я обнаружил, что это самый простой способ заставить фон исчезать:

beforeClose: function(){
    $('.ui-widget-overlay:first')
        .clone()
        .appendTo('body')
        .show()
        .fadeOut(400, function(){ 
            $(this).remove(); 
        })
    ;
}

Вы не можете сделать это в методе "close", потому что jQuery уже удалил контейнер '.ui-widget-overlay', однако, клонируя его, чтобы просто сделать фейдеры, вы можете обойти их удаление и по-прежнему использовать все стили по умолчанию.

5 голосов
/ 15 сентября 2011

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

Я уверен, что это можно улучшить, но при использовании диалогового окна jQuery UI это нарастает и исчезает при наложении.

open: function(){
    $('.ui-widget-overlay').hide().fadeIn();
},
beforeClose: function(){
    $('.ui-widget-overlay').remove();
    $("<div />", {
        'class':'ui-widget-overlay'
    }).css(
        {
            height: $("body").outerHeight(),
            width: $("body").outerWidth(),
            zIndex: 1001
        }
    ).appendTo("body").fadeOut(function(){
        $(this).remove();
    });
}
2 голосов
/ 15 апреля 2009

Вы можете использовать функцию jQuery fadeTo(). Более подробную информацию можно найти по ссылке ниже. http://docs.jquery.com/Effects/fadeTo#speedopacitycallback

1 голос
/ 01 мая 2012

Вы можете создать свой собственный виджет, расширяющий $ .ui.dialog, чтобы добавить наложение шоу и скрыть анимацию с точной настройкой, используя параметр.

Также легко добавляется еще один недостаток, позволяющий закрыть диалог нажатием на оверлей:

в каком-то файле, скажем, jquery-ui.fsrc.dialog.js:

(function( $, undefined ) {

$.widget('fsrc.fsrc_dialog', $.ui.dialog, {
open: function() {
    // some helpful vars
    var self = this,
        options = self.options;

    // call parent method - it will create overlay and save it in self.overlay variable
    var ret = $.ui.dialog.prototype.open.apply(this, arguments);

    if (options.showOverlay) {
        // immediately hide and animate overlay
        // kind a hack, but jquery ui developers left no better way
        self.overlay.$el.hide().show(options.showOverlay)
    }
    if (options.closeOnOverlay) {
        // close dialog on click on overlay
        self.overlay.$el.click(function() {
            self.close();
        })
    }
    return ret;
},
close: function(event) {
    var self = this,
        options = self.options;

    if (options.hideOverlay) {
        // save and unset self.overlay, so it will not be destroyed by parent function during animation
        var overlay = self.overlay
        self.overlay = null;
        overlay.$el.hide(options.hideOverlay, function() {
            // destroy overlay after animation as parent would do
            overlay.destroy();
        })
    }

    // call parent method
    var ret = $.ui.dialog.prototype.close.apply(this, arguments);
    return ret;
}
});

}(jQuery));

На странице:

<script src='/js/jquery-ui.fsrc.dialog.js' type='text/javascript'></script>
<script type="text/javascript">
<!--
    jQuery(document).ready(function(){
        jQuery('#show').click(function(){
            jQuery('#order_form_container').fsrc_dialog({
                modal: true,
                closeOnOverlay: true,
                show: {effect: "fade", duration: 500},
                showOverlay: {effect: "fade", duration: 500},
                hide: {effect: "fade", duration: 300},
                hideOverlay: {effect: "fade", duration: 300},
            });
        })
    })
-->
</script>`

Я назвал пространство имен, виджет и параметры в мою пользу.

Протестировано jquery1.7.2, jquery-ui1.8.19, IE9, ff11, chrome18.0.1025.168m, opera11.61

1 голос
/ 18 января 2012

Просто незначительное улучшение ответа Лиама Поттера. Если вы хотите, чтобы наложение было полноэкранным, вы можете изменить его код, чтобы использовать $(document).height() и $(document).width() вместо тела, потому что последнее будет измеряться меньше, чем видимая область.

open: function(){
    $('.ui-widget-overlay').hide().fadeIn();
},
beforeClose: function(){
    $('.ui-widget-overlay').remove();
    $("<div />", {
        'class':'ui-widget-overlay'
    }).css({
        height: $(document).height(),
        width: $(document).width(),
        zIndex: 1001
    }).appendTo("body").fadeOut(function(){
        $(this).remove();
    });
}
0 голосов
/ 08 июля 2014

Мне пришлось изменить ответ Сэма Барнса, чтобы он заработал (я также добавил функцию щелчка диалога в функции $ (document) .ready):

<script type='text/javascript'>
  $(".dialog").click(function(){
    $('.ui-widget-overlay').hide().fadeIn();        
    $("div.dialog").dialog({
        resizable: false,
        close: function(){
            $('.ui-widget-overlay').hide();
        },
        show: "fade",
        hide: "fade" 
    });
    $(".ui-dialog").fadeIn();
    return false;
  });
  $(".ui-widget-overlay").click(function(){
    $(this).hide();
    $(".ui-dialog").hide();
  });
</script>
<style>
  .ui-widget-overlay {
    background: black;
    opacity: 0.5;
    filter: alpha(opacity = 50);
    position: absolute;
    top: 0;
    left: 0;
   }
</style>
<div class='ui-widget-overlay'></div>
<div class='dialog' title='Heading!'>Some Message!</div>

Вы можете добавить вещь, которая прячется при нажатии кнопки выхода, добавив:

$(document).keyup(function(e) {

  if (e.keyCode == 27) { 
       $(".ui-dialog").hide();
       $('.ui-widget-overlay').hide();
  }
});
0 голосов
/ 14 ноября 2010
$('.ui-widget-overlay').hide().fadeIn();

Этот эффект имеет проблему с IE, так как непрозрачность не будет работать после появления

...