【问题标题】:How to Minimize/Maximize jQuery Dialog?如何最小化/最大化 jQuery 对话框?
【发布时间】:2012-07-18 11:18:20
【问题描述】:

我正在使用jQuery UI Dialog 显示视频。视频运行良好。

我想要做的是最小化对话框元素,就像在操作系统或类似的东西中一样。像 (" - ") 这样的小图标会最小化我的对话框,当我按下 (*) 时它会关闭对话框但让视频在后台运行。

这是我的代码

//Watch Video

$(".watchVideo").live('click',function(){
    if($('div.ui-dialog').length){
        $('div.ui-dialog').remove();
    }

    var path  = $(this).attr('rel');
    var title = $(this).attr('title');

    var $dialog = $('<div>', {
        title: translator['Watch Video']
    }).dialog({
        autoOpen: false,
        modal: true,
        width: 600,
        height: 500
    });

    var tab = '<table  style="margin: 10px 10%;"><tr><td><object id="MediaPlayer1" width="500" height="400" classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" standby="Loading Microsoft® Windows® Media Player components..." type="application/x-oleobject" align="middle"><param name="'+title+'" value="'+path+'"> <param name="ShowStatusBar" value="True">  <param name="DefaultFrame" value="mainFrame"> <param name="autostart" value="false">  <embed type="application/x-mplayer2"  pluginspage = "http://www.microsoft.com/Windows/MediaPlayer/"  src="'+path+'"   autostart="false"  align="middle" width="500"    height="300"   defaultframe="rightFrame"  showstatusbar="true"> </embed></object></td></tr></table>';

    $('<div id="updateContent">').html(tab).appendTo($dialog);
    $dialog.dialog('open');
    return false;

});

var tab 等于

<object id="MediaPlayer1" width="500" height="400"
classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"
codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"
standby="Loading Microsoft® Windows® Media Player components..."
type="application/x-oleobject" align="middle">
    <param name="FileName" value="YourFilesName.mpeg">
    <param name="ShowStatusBar" value="True">
    <param name="DefaultFrame" value="mainFrame">
    <param name="autostart" value="false">
    <embed type="application/x-mplayer2"
     pluginspage = "http://www.microsoft.com/Windows/MediaPlayer/"
     src="YourFilesName.mpeg"
     autostart="false"
     align="middle"
     width="500"
    height="300"
    defaultframe="rightFrame"
    showstatusbar="true">
 </embed>

【问题讨论】:

    标签: javascript jquery jquery-ui video-streaming jquery-dialog


    【解决方案1】:

    您可以尝试几种方法。

    1. 引入一个新的最小化按钮并将其附加到ui-dialog-titlebar,然后单击将对话框更改为position: fixed 并将其放置在屏幕底部仅显示标题栏的位置。

    2. 相当相似的方法 - 将原始对话框 div 的高度更改为 0。允许对话框可拖动,以便用户可以移动它。但您可能需要将对话框偏移到视口的底部。这种方法使ui-dialog-titlebar 保持不变 - 您还可以动态更改对话框的宽度,以产生最小化效果。

    3. 使用.animate 或其他过渡(或缓动,例如easeInExpo - http://ralphwhitbeck.com/demos/jqueryui/effects/easing/

    但使用上述一些方法的最简单的方法是:

    效果需要改变的是:

    • 窗口宽度
    • 窗口高度
    • 最高位置
    • 左侧位置

    像这样:

        $('#window').dialog({
        draggable: false,
        height: 200,
        buttons: [
        {
            text: "minimize",
            click: function() {
                $(this).parents('.ui-dialog').animate({
                    height: '40px',
                    top: $(window).height() - 40
                }, 200);            
            }
        }]
    
    
    });
    
    $('#open').click(function() {
       $('#window').parents('.ui-dialog').animate({
           //set the positioning to center the dialog - 200 is equal to height of dialog
           top: ($(window).height()-200)/2,
           //set the height again
           height: 200
                }, 200); 
    });
    

    这是做什么的,它将对话框的高度设置为0,并将其定位在视口的底部。最大化时,它会重新计算中心位置,为对话框指定高度,然后将其动画化回到视图中。

    查看示例:http://jsfiddle.net/jasonday/ZSk6L/

    用最小化/最大化更新小提琴。

    【讨论】:

    • @Jason hmmm 这很好。但是如果我想再次最大化它怎么办,因为一旦最小化它在 jsfiddle 中的消失(演示)
    【解决方案2】:

    您可以使用 jQuery DialogExtend 插件。 它提供对话框最大化、最小化和折叠功能。

    【讨论】:

      【解决方案3】:

      jQuery UI 对话框有一个扩展,名为“DialogExtend”,允许您添加最大化、最小化和恢复按钮:

      完美运行。

      【讨论】:

      • 图标被最新的 jquery-ui 弄乱了
      • 老问题和答案,但是想知道移动浏览器是否支持类似的东西,这个扩展在移动设备上运行得不是很好。
      【解决方案4】:

      jQuery DialogExtend 插件解决了这个问题,但在使用 iframe 时它会不断刷新 iframe 的内容。

      【讨论】:

        【解决方案5】:

        我用小部件工厂制作了一个小插件,扩展了 jquery ui 对话框。

        我使用 jquery 小部件工厂来添加新功能

        $.widget('fq-ui.extendeddialog', $.ui.dialog, {
        ...
        })(jQuery);
        

        在 Jquery UI 对话框代码中,有一个 _createTitlebar 方法。 我覆盖它并添加一个最大化和最小化按钮

        _createTitlebar: function () {
            this._super();
            // Add the new buttons
            ...        
            },
        

        【讨论】:

          猜你喜欢
          • 2020-03-03
          • 1970-01-01
          • 2020-07-24
          • 1970-01-01
          • 1970-01-01
          • 2013-04-16
          • 1970-01-01
          • 1970-01-01
          • 2017-01-27
          相关资源
          最近更新 更多