【问题标题】:Fade in overlay in modal dialog在模态对话框中淡入叠加
【发布时间】:2009-04-15 13:52:42
【问题描述】:

我有一个 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;
 }

【问题讨论】:

    标签: jquery jquery-ui jquery-plugins


    【解决方案1】:

    您也可以将其添加到 fadeIn 模态中:

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

    希望这会有所帮助:)

    【讨论】:

    • 这对我很有用。我也希望它在对话框关闭时淡出,但由于某种原因,反转你在 open 函数中的代码不会这样做......“close:function(){$'.ui-widget-覆盖').fadeOut();}"
    【解决方案2】:

    这是对 Liam Potter 答案的扩展。他的作品非常适合淡入,但不处理淡出。我发现这是使背景也淡出的最简单方法:

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

    您不能在“关闭”方法中执行此操作,因为 jQuery 已经删除了 '.ui-widget-overlay' 容器,但是通过克隆它来进行淡入淡出,您可以避开它们的删除并仍然使用所有默认样式。

    【讨论】:

      【解决方案3】:

      我知道这是一个老问题,但我刚刚在搜索中遇到了这个问题,并且觉得我可以帮助其他人。

      我敢肯定这可以改进,但是当使用 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();
          });
      }
      

      【讨论】:

        【解决方案4】:

        您可以使用 jQuery fadeTo() 函数。更多信息可以在下面的链接中找到。 http://docs.jquery.com/Effects/fadeTo#speedopacitycallback

        【讨论】:

        • 完美,我不敢相信我没有想到!
        【解决方案5】:

        对 Liam Potter 的回答略有改进。如果您希望覆盖是全屏的,那么您可以将他的代码更改为使用$(document).height()$(document).width() 而不是body,因为后者的测量值小于可见区域。

        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();
            });
        }
        

        【讨论】:

          【解决方案6】:

          您可以创建自己的小部件扩展 $.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

          【讨论】:

            【解决方案7】:
            $('.ui-widget-overlay').hide().fadeIn();
            

            此效果在 IE 上存在问题,因为不透明度在淡入后不起作用

            【讨论】:

            • 为什么要给出一个没有帮助并且在浏览器中有问题的答案?
            【解决方案8】:

            我必须修改 Sam Barnes 的答案以使其正常工作(我还将对话框单击函数放入 $(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();
              }
            });
            

            【讨论】:

              猜你喜欢
              • 2011-03-26
              • 2014-07-15
              • 1970-01-01
              • 2016-02-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-01-22
              • 1970-01-01
              相关资源
              最近更新 更多