2020年9月12日 星期六

一個 jQuery UI 的 Web App 介面架構

我在一本 jQuery UI 的舊書 (2014) "jQuery 應用程式設計極速上手" (Jay Blanchard, 上奇), 此書原文版書名為 "Applied jQuery : develop and design".  在最後一章作者提出的一個 jQuery UI 為基礎的 Web App 架構, 它是一個單頁應用程式 (Single Page Application, SPA), 版面結構如下 :




上面的主導覽區作者使用精靈動畫 (sprite) 來製作圖片超連結; 次導覽區使用手風琴 (accordion, 摺疊選單), 右側則是透過 Ajax 方式載入之內容區.

作者曾為此書設立如下網站以便讀者可下載範例程式碼, 但現在已經關站了 :

# http://www.appliedjquery.com (無法連接)

於是我只好照書本內容逐一拼湊出原始程式樣貌 (但沒有處理上方主導覽區的精靈動畫, 因為我覺得有點複雜), 紀錄如下 :


測試 1 : jQuery UI 單頁應用程式 [看原始碼]

<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <meta charset="utf-8">
    <meta http-equiv="cache-control" content="no-cache">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
    <link href="https://code.jquery.com/ui/1.12.1/themes/hot-sneaks/jquery-ui.css" rel="stylesheet">
    <style>
      body {font-family: Arial, Helvetica, sans-serif;
            height: 100%;
            margin: 0px auto;
            overflow-x: auto !important;
            overflow-y: hidden !important
            }
      .ui-widget {font-size:80%;}
      #mainNavBar {height: 75px;
                   padding: 0px 0px 0px 25px;
                   }
      #content1 {width: 20%;
                 height: 80%;
                 background-color: transparent;
                 vertical-align: bottom;
                 float: left;
                 margin: 5px 5px 0px 10px;
                 position: relative;
                 bottom: 0px;
                 }
      #contentArea1 {position: relative;
                     padding: 10px;
                     }
      #content2 {width: 77%;
                 height: 80%;
                 background-color: transparent;
                 vertical-align: top;
                 float: left;
                 margin: 5px 5px 0px 0px;
                 position: relative;
                 }
      #contentArea2 {position: relative;
                     padding: 10px;
                     overflow: auto;
                     }
      #footer {width: 99%;
               height: 75px;
               position: absolute;
               bottom: 0px;
               margin: 5px 5px 0px 5px;
               }
      #mainNavBar, content1, #content2, #footer {
               border: 1px dashed #ffff00;
               }
      #contentArea1, #contentArea2 {
               border: 1px dashed #00ff00;
               }
    </style>
  </head>
  <body>
    <!--上方主導覽列-->
    <div id="mainNavBar">

    </div>
    <!--左方次導覽列-->
    <div id="content1">
      <div id="contentArea1">
        <div id="accordion">
          <h2><a href="#">第 1 列標題</a></h2>
          <div>
            <ul style="padding: 0px; margin: 0px;">
              <li><a href="http://www.google.com.tw">Google</a></li>
              <li><a href="http://tw.yahoo.com">Yahoo</a></li>
            </ul>
          </div>
          <h2><a href="#">第 2 列標題</a></h2>
          <div>第 2 列內容</div>
          <h2><a href="#">第 3 列標題</a></h2>
          <div>第 3 列內容</div>
        </div>
      </div>
    </div>
    <!--右方主內容區-->
    <div id="content2">
      <div id="contentArea2">
        <div id="tabs">
          <ul>
            <li><a href="#tab1">頁籤 1</a></li>
            <li><a href="#tab2">頁籤 2</a></li>
            <li><a href="#tab3">頁籤 3</a></li>
            <li><a href="#tab4">頁籤 4</a></li>
          </ul>
          <div id="tab1">
            <p>這是頁籤 1</p>
          </div>
          <div id="tab2">
            <p>這是頁籤 2</p>
          </div>
          <div id="tab3">
            <p>這是頁籤 3</p>
          </div>
          <div id="tab4">
            <p>這是頁籤 4</p>
          </div>
        </div>
      </div>
    </div>
    <!--頁尾-->
    <div id="footer">
    </div>
    <script>
      $(function(){
        $(window).resize(function(){
          var windowHeight=$(window).height();
          $("#content1").height(windowHeight - 175 + "px");
          $("#contentArea1").height(windowHeight - 205 + "px");
          $("#content2").height(windowHeight - 175 + "px");
          $("#contentArea2").height(windowHeight - 205 + "px");
          });
        $("#accordion").accordion();
        $("#tabs").tabs();
        });
    </script>
  </body>
</html>

結果如下 :




看起來似乎還不錯, 但 Ajax 部分需要補強一下, 先記錄結果, 等有空再繼續. 以前在寫 EasyUICMS 時曾使用其 Layout 元件排版, 參考 :

# 用 jQuery EasyUI 打造輕量級 CMS (一)

但由於 jQuery UI 本身沒有這種元件, 必須透過 plug-in 外掛 UI Layout 支援才行, 參考 :

http://layout.jquery-dev.net/
jQuery佈局外掛UI Layout簡介及使用方法

沒有留言 :