【问题标题】:A full page layout with resizable panes using jQuery UI使用 jQuery UI 的可调整大小窗格的全页面布局
【发布时间】:2014-02-14 16:31:16
【问题描述】:

我正在尝试创建 web 应用程序的整体布局。该应用程序是全屏的,具有固定的标题和三列/窗格。中间窗格由两行组成:

应该通过用鼠标拖动窗格边缘来调整窗格的大小(参见上图中的箭头)。

各个窗格应具有垂直滚动条以防内容溢出,即没有全局浏览器窗口滚动条。

使用 jQuery 和 jQuery UI Resizable,我创建了this (partly working) JSFiddle

HTML:

<div class="header">
  Fixed header    
</div>
<div class="wrapper">
   <div class="inner-wrapper">
       <div class="left pane">Left</div>
       <div class="center pane">
           <div class="inner">
               <div class="top">Center top</div>
               <div class="bottom">Center bottom</div>
           </div>
       </div>
       <div class="right pane">Right</div>
   </div>
</div>

CSS:

html, body {
    height: 100%;
}
.header {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    height: 20px;
    background-color: moccasin;  
}
.wrapper {
    position:absolute;
    top: 21px;
    right: 0;
    bottom: 0;
    left: 0;
    background-color: fuchsia;
}
.inner-wrapper,
.center.pane .inner {
    display: table;
    width: 100%;
    height: 100%;
}
.pane {
    display: table-cell;
}
.left.pane {
   background-color: olivedrab; 
}
.center.pane {
    background-color: lightblue;
}
.center.pane .inner .top,
.center.pane .inner .bottom{
    display: table-row;  
}
.center.pane .inner .top {
    background-color: lightcoral;   
}
.center.pane .inner .bottom {   
    background-color: orange;
    height: 100%;
    width: 100%;
}
.right.pane {
    background-color: #999;
}

JavaScript:

$(function () {
    $(".left.pane").resizable({
        handles: "e, w"
    });
    $(".right.pane").resizable({
        handles: "e, w"
    });
    $(".center.pane .inner .bottom").resizable({
        handles: "n, s"
    });
});

它有几个问题,包括:

  • 在向左调整大小时,向右也会调整大小(不应该)
  • 当向左调整到全宽时,中心内容隐藏在右下
  • 向右调整大小时,包装(紫红色)部分可见
  • 中心底部通过中心顶部的顶部而不是通过它自己的顶部调整大小

我知道 jQuery 布局插件,但据我所知,它并没有提供我所追求的布局。另外,我想让它尽可能简单。

此外,我尝试过 Methvins 分离器插件,但无法正常工作。

我的问题:

关于如何从 jQuery UI Resizable 和我在 JSFiddle 中创建的图像中的布局有什么建议吗?

【问题讨论】:

    标签: jquery-ui web-applications jquery-ui-resizable


    【解决方案1】:

    还有更合适的插件,基于jQuery来获取你想要的。

    选项 1

    我个人在我的项目中使用了UI Layout

    这是一个几乎老旧的项目(6 年前),但在 2014 年年中重新开始开发,即使 2014 年 9 月之后没有更多信息

    实际上,最后一个稳定版本是 1.4.3,于 14 年 9 月发布。新网站是:


    选项 2

    如果你需要更完整的解决方案,可以考虑jEasy UI,这是一个完整的框架

    [...] 帮助您轻松构建网页

    它是 jQuery UI 的一种替代品,带有一些类似的小部件(对话框、手风琴等)和一些独特的东西,比如 Layout module,已经在我的回答中链接了。 p>


    选项 3: 与上一个类似的解决方案是Zino UI,这是另一个完整的 UI 框架,具有专用于“Split Layout”的特定组件


    选项 4jQWidgets 是另一个库,与以前的目的相似,特别是 jqxSplitter 模块可能很有趣。


    相关替代(类似)

    还有另一种选择,它允许在浏览器窗口中分割面板,但此外还允许拖放单个面板创建不同的选项卡和并排的子窗口。

    这称为Golden Layout。它与以前的不同,由于许多原因也更强大,但目前肯定 它不支持 Touch ...

    【讨论】:

    • 这实际上是我们最终使用的。
    • 哈哈好吧。如果您认为这是最正确的,请点击“复选标记”接受答案:-)
    • 查看UI Layout的代码,文档太差,加上代码过于复杂,一个layout lib不需要那么复杂,用css可以做很多事情而不是javascript跨度>
    • @KevinSimple 开发人员在一年前清楚地写道,基于新技术(因此更简单)的新版本正在开发中。从那天起没有消息传出,所以这个项目是否仍在进行中是未知的。
    • @LucaDetomi 这是一个极好的工具集汇编...谢谢。
    【解决方案2】:

    有一些小问题导致了你不喜欢的行为。

    这些已在此 Fiddle 中修复

    问题是:

    在向左调整大小时,向右也会调整大小(它不应该)

    通过设置初始宽度(百分比)修复

    当向左调整到全宽时,中心内容隐藏在右下

    无法复制

    当向右调整大小时,包装器(紫红色)部分显示 可见的中心底部通过中心顶部的顶部调整大小, 不是通过它自己的顶部

    通过在调整大小期间将 left 设置为 0 来修复。

    $(".right.pane").resizable({
        handles: "e, w",
        resize: function(event, ui) {
          ui.position.left = 0;
        }
      });
    

    中心底部通过中心顶部的顶部调整大小,而不是通过它自己的顶部

    这是因为 JQuery UI Resizable 使用了在表格单元格中不起作用的相对定位。通过添加处理调整大小的内容 div 来修复。

    <div class="top pane"> 
       <div class="top-content">Center top</div>
    </div>
    

    【讨论】:

      【解决方案3】:

      如果您正在寻找与 jEasy UI 相比更简约的东西,我发现了一个似乎可以满足此要求的要求。 :)

      我会试一试的。只是想分享这个,希望能节省其他人的搜索时间。

      【讨论】:

      • 谢谢。这个库看起来很有趣。很高兴知道它仍在开发中。
      【解决方案4】:

      我正在使用这个插件 用 jquery

      http://www.bramstein.com/projects/jlayout/jquery-plugin.html

      【讨论】:

        【解决方案5】:

        我自己想出了这个问题的答案,尽管最终我花了一年多的时间开发!结果是使用 jQuery 和 jQuery UI 小部件工厂构建的现代、响应式面板布局小部件。

        http://www.silvercore.co.uk/widgets/propanellayout/

        当时提出问题的最佳解决方案无疑是 jQuery UI.Layout,但随着时间的推移,该项目停滞不前,该插件无法与 jQuery 2 一起使用。尽管代码已在 GitHub 上发布,但它的命运是未知的,这使用它作为长期项目的基础是有问题的。

        此处发布的其他一些链接现已失效,如果您不想要或不需要完整的应用程序框架,您的选择将受到限制。

        【讨论】:

        • 答案没有提到该库是根据商业许可分发的。
        • 链接好像失效了
        【解决方案6】:

        好的,希望是我的最后一次编辑。经历了这些,最终得到了 jQuery UI 布局。

        Goldenlayout 不错,但您必须通过 javascript 在每个窗格中实际添加 html。如果你的所有东西都放在 react 组件中,我想这可能没问题,但不适用于我的用例。

        jQuery UI 布局似乎非常健壮,并且在 2014 年刚刚更新。

        【讨论】:

        • 你能发布你最终得到的jQuery UI解决方案吗?
        • 嗯,已经有一段时间了。它与一堆商业代码混合在一起。希望有一天我能回到这里帮忙。不幸的是,今天不是那一天!
        【解决方案7】:

        您可以使用Gridstack 它易于使用且功能强大。

        【讨论】:

          猜你喜欢
          • 2016-07-17
          • 1970-01-01
          • 2012-07-29
          • 2012-06-26
          • 1970-01-01
          • 2010-12-30
          • 1970-01-01
          • 1970-01-01
          • 2015-02-08
          相关资源
          最近更新 更多