jQuery UI结合Ajax创建可定制的Web界面

如今,网站比以往更具可定制性,允许用户更改其空间,根据自己的喜好对其进行个性化。个性化的主页或仪表板页面(例如 iGoogle、MyYahoo! 和 MyAOL)日渐普及,大多数 Web 应用程序内甚至也整合了类似的功能。jQuery 库简化了此类复杂 JavaScript 交互的编写,随着 jQuery UI 的引入,这项功能得到了进一步的简化,该库以易于访问的 jQuery 插件的形式提供了常用用户界面类型。
本文介绍了如何利用 Ajax 和 jQuery UI 创建具有各种定制功能的高度可定制的 UI。您将了解如何定制 Web 页面的各个方面,以及如何使用 Ajax 保存首选项。此外,您还将利用拖放操作等技术来排序列表项,以及组织页面元素和 UI 小部件来切换主题和配色方案 —一切都能在单独一个 Web 页面中完成。
创建定制 UI 功能
jQuery UI 是一个 UI 库,其中包含易于编写的交互、动画和效果,还包括可轻松定制主题的小部件。您可以对下载进行定制,选择您希望包含的主题,还可以提取组件,例如 UI 内核(必需)、交互、小部件或效果。要使用 jQuery UI,您还需要最新版本的 jQuery 库。下载部分包含此库,但您也可以在稍后需要更新此库时直接从 jQuery 网站下载最新版本的库。清单 1 展示了如何在 Web 页面中包含 jQuery UI 库和其他必备文件。

清单 1. 创建包含 jQuery UI 代码的 Web 页面 

 <!DOCTYPE html>
 <html>
 <head>
 <meta charset="utf-8">
 <title>
 Creating Customizable Web Interfaces with the jQuery UI and Ajax
 </title>
 <link type="text/css" href="css/ui-lightness/jquery-ui-1.8.6.custom.css"
 rel="stylesheet" />
 <link type="text/css" href="css/custom.css" rel="stylesheet" />
 <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
 <script type="text/javascript" src="js/jquery-ui-1.8.6.custom.min.js">
 </script>
 </head>
 <body>
 </body>
 </html> 

所包含的第一个 CSS 提供了所选主题 ui-lightness 的代码。 这是默认主题,是在 jQuery UI 下载过程中选定的,但您可以将其更改为所提供的任意主题。如果您已经下载了该库,希望更新正在使用的主题,只需访问 ThemeRoller,从库中下载现有主题即可,也可以利用它来定制您自己的主题。代码中包含的第二个 CSS 提供了定制类,用于设定页面样式,或者覆盖所选主题内使用的属性。最后,代码中包含的 JavaScript 文件是 jQuery 和 jQuery UI 库。
利用 jQuery UI 创建拖放式界面
拖放功能如今越来越常见,可用于排序列表和组织页面元素,许多 Web 应用程序的个性化主页中也使用了这种功能。jQuery UISortable 插件提供了为 Web 页面添加可排序功能的快捷方法,带有许多选项和事件,支持您按照自己希望的方式定制交互。
清单 2 中的示例展示了如何利用 Sortable 插件创建简单的可排序列表。您可以利用此插件让简单的 HTML 列表成为可排序的拖放式列表。首先要为此列表添加一个标识符 —本例中指定 sortable 作为 ID,以便使用 jQuery 轻松找到此列表,并为其添加可排序函数调用。还要为各项添加 ui-state-default 类,以便保持其样式与所选主题一致。

清单 2. 利用 jQuery UI Sortable 插件创建一个简单的可排序列表 
 <!DOCTYPE html>

 <html>
 <head>
  <meta charset="utf-8">
  <title>
 Creating Customizable Web Interfaces with the jQuery UI and Ajax
 </title>
  <link type="text/css" href="css/ui-lightness/jquery-ui-1.8.6.custom.css"
 rel="stylesheet" />
 <link type="text/css" href="css/custom.css" rel="stylesheet" />
  <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
  <script type="text/javascript" src="js/jquery-ui-1.8.6.custom.min.js">
 </script>
  <script type="text/javascript">
    $(function(){
      $( "#sortable" ).sortable();
    });
  </script>
 </head>
 <body> 

  <h1>
 Creating Customizable Web Interfaces with the jQuery UI and Ajax
 </h1> 

  <ul id="sortable">
    <li id="item1" class="ui-state-default">Item 1</li>
    <li id="item2" class="ui-state-default">Item 2</li>
    <li id="item3" class="ui-state-default">Item 3</li>
    <li id="item4" class="ui-state-default">Item 4</li>
    <li id="item5" class="ui-state-default">Item 5</li>
    <li id="item6" class="ui-state-default">Item 6</li>
    <li id="item7" class="ui-state-default">Item 7</li>
  </ul> 

 </body>
 </html>

如果需要保存列表项位置,可能必须将详细信息保存到 cookie 或数据库,以便正确呈现页面,从而支持后续的页面查看。如果您使用的是数据库,就可以使用 Ajax 将此数据发送到服务器端脚本,使之能够将值写入数据库,并在随后初始页面加载时返回带有恰当位置的 XML 或 JSON 响应,以将各元素放置在正确的位置。清单 3 中的示例代码展示了如何将位置值发送到服务器端 PHP 脚本。

清单 3. 将位置值发送到服务器端脚本

 $( "#sortable" ).sortable({
 stop: function(event, ui) {
  $("#sortable li").each(
   function(index){
    $.ajax({
     type:'POST',
     url:'filename.php',
     data:'method=updateposition&id='+$(this).attr('id'))+'&positions='+index,
     success: function(xml){
      // Success
     }
    });
    }
   );
  }
 });

要保存可排序列表中项的位置,需要利用一个事件来确定排序项的时间。您可以利用多种可排序事件,但这个示例需要 stop 事件,因为只有该事件能够在所有可排序元素完成排序后触发。这一点非常重要,因为您需要在尝试保存位置之前,确保所有元素都处于新位置。触发 stop 事件之后,您要遍历各列表项,以获取其在列表中的索引,随后检索各项的 ID,再利用 Ajax 将这些值发送到一个 PHP 文件,这会将结果保存到数据库,以便在稍后您返回该页面时排序元素。
所用的 Sortable 插件还提供了许多可实现其他定制的选项,例如:
----定义一个占位符类,设定拖动一项时占位符元素的样式
----连接列表,使元素可以拖放到相同 Web 页面中的另一个可排序列表
----在网格中显示和限制可排序元素
----创建多栏界面,支持在各栏间拖动和排序元素
清单 4 中的示例展示了如何创建包含拖放式元素的三栏界面。这三个栏使用 CSS 中三个彼此相邻的 <div> 元素表示。为使 Sortable插件处理分栏结构,只需使用 connectWith 选项,并将其值设置为各分栏元素上使用的 column 类。选项 connectWith 允许使用多栏界面,在各栏间拖动和排序元素。

清单 4. 三栏拖放式界面

 <!DOCTYPE html>
 <html>
 <head>
 <meta charset="utf-8">
 <title>
 Creating Customizable Web Interfaces with the jQuery UI and Ajax
 </title>
 <link type="text/css" href="css/ui-lightness/jquery-ui-1.8.6.custom.css"
 rel="stylesheet" />
 <link type="text/css" href="css/custom.css" rel="stylesheet" />
 <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
 <script type="text/javascript" src="js/jquery-ui-1.8.6.custom.min.js">
 </script>
 <script type="text/javascript">
 $(function(){
  $( ".column" ).sortable({
  connectWith:".column"
  }); 

  $( "#sortable" ).sortable();
 });
 </script>
 </head>
 <body> 

 <h1>
 Creating Customizable Web Interfaces with the jQuery UI and Ajax
 </h1> 

 <ul id="page">
 <li class="column">
 <div class="portlet ui-widget ui-widget-content ui-helper-clearfix ui-corner-all">
 <div class="portlet-header ui-widget-header ui-corner-all">ToDo List</div>
 <div class="portlet-content">
  <ul id="sortable">
  <li class="ui-state-default">Item 1</li>
  <li class="ui-state-default">Item 2</li>
  <li class="ui-state-default">Item 3</li>
  <li class="ui-state-default">Item 4</li>
  <li class="ui-state-default">Item 5</li>
  <li class="ui-state-default">Item 6</li>
  <li class="ui-state-default">Item 7</li>
  </ul>
 </div>
 </div> 

 <div class="portlet ui-widget ui-widget-content ui-helper-clearfix ui-corner-all">
 <div class="portlet-header ui-widget-header ui-corner-all">Header</div>
 <div class="portlet-content">content</div>
 </div>
 </li> 

 <li class="column">
 <div class="portlet ui-widget ui-widget-content ui-helper-clearfix ui-corner-all">
 <div class="portlet-header ui-widget-header ui-corner-all">Header</div>
 <div class="portlet-content">content</div>
 </div>
 </li> 

 <li class="column">
 <div class="portlet ui-widget ui-widget-content ui-helper-clearfix ui-corner-all">
 <div class="portlet-header ui-widget-header ui-corner-all">Header</div>
 <div class="portlet-content">content</div>
 </div> 

 <div class="portlet ui-widget ui-widget-content ui-helper-clearfix ui-corner-all">
 <div class="portlet-header ui-widget-header ui-corner-all">Header</div>
 <div class="portlet-content">content</div>
 </div>
 </li>
 </ul> 

 </body>
 </html>

为保持这些元素的样式与您选择的 jQuery UI 主题一致,您要使用某些 CSS 类将各元素定义为包含标头和内容的 portlet。 这些 CSS 类构成了 jQuery UI CSS 框架,允许您轻松设定 UI 元素的主题。
jQuery UI CSS 框架
至此为止,您已经用到了 jQuery UI CSS 框架中的一些类。在这一节中,我们将进一步探索,学习如何利用这些类让用户能动态更改其个性化仪表板页面的外观。该框架包含许多类,涵盖了常见的 UI 元素。应用这些类时,它们会根据您选择的主题自动为您的小部件设定主题。可用类的类别包括布局帮助元素、小部件容器、交互状态、交互线索、图标(包括状态、图像和图标类型)以及其他可视化元素,例如圆角帮助元素、覆盖和阴影。
使用该框架中的类时,可以轻松在可用主题间切换。清单 5 展示了利用 ThemeRoller 提供的主题切换器工具能多么轻松地完成此过程。

清单 5. 用于为示例 Web 页面上的定制 portlet 添加主题切换器的 JavaScript 和 HTML 

 <script type="text/javascript">
 $(function(){
 $('#switcher').themeswitcher(); 

 $( ".column" ).sortable({
  connectWith:".column"
 });    

 $( "#sortable" ).sortable();
 });
 </script> 

 <div class="portlet-content">
 <script type="text/javascript"
 src="http://jqueryui.com/themeroller/themeswitchertool/"></script>
 <div id="switcher"></div>
 </div>
 </div>

清单 5 中的示例展示了您能多么轻松地为现有示例 Web 页面中的 portlet 添加主题切换器工具。通过为小部件包含相关 JavaScript 文件,并创建一个作为容器的 <div> ,即可轻松定位该 <div> ,并为其应用 themeswitcher 。这种做法会得到一个包含 jQuery UI 提供的可用主题的下拉菜单。选中一个主题时,整个页面将立即更新来匹配该主题。在允许用户定制其页面时,此类小部件非常有用,其选项甚至可以保存到前面叙述的数据库中,以保存元素位置(但这种工具本身已经拥有基于 cookie 的存储,在用户刷新页面时,此前用户选中的主题将仍然保持可用)。
该库还包含有用的预构建小部件,您可轻松地将其添加到自己的页面中。每个小部件均已结构化为您的自定义主题或者您选定的主题呈现。清单 6 中的示例展示了如何在页面中利用 Tab 小部件来为用户组织某些内容,并使用现有主题加以呈现。

清单 6. 在现有主题内添加 jQuery UI 小部件

 <!DOCTYPE html>
 <html>
 <head>
  <meta charset="utf-8">
  <title>
 Creating Customizable Web Interfaces with the jQuery UI and Ajax
 </title>
  <link type="text/css" href="css/ui-lightness/jquery-ui-1.8.6.custom.css"
 rel="stylesheet" />
 <link type="text/css" href="css/custom.css" rel="stylesheet" />
  <script type="text/javascript" src="js/jquery-1.4.2.min.js">
  </script>
  <script type="text/javascript" src="js/jquery-ui-1.8.6.custom.min.js">
 </script>
  <script type="text/javascript">
    $(function(){
  $( "#tabs" ).tabs(); 

      $('#switcher').themeswitcher(); 

      $( ".column" ).sortable({
        connectWith:".column"
      }); 

      $( "#sortable" ).sortable();
    });
  </script>
 </head>
 <body> 

 <h1>
 Creating Customizable Web Interfaces with the jQuery UI and Ajax
 </h1> 

 <div id="tabs">
 <ul>
 <li>
  <a href="#tabs-1">Portlets</a>
 </li>
 <li>
  <a href="#tabs-2">Profile information</a>
 </li>
 </ul>
 <div id="tabs-1"> 

 <ul id="page">
 <li class="column">
 <div class="portlet
       ui-widget
       ui-widget-content
       ui-helper-clearfix
       ui-corner-all">
 <div class="portlet-header ui-widget-header ui-corner-all">
 ToDo List
 </div>
 <div class="portlet-content">
  <ul id="sortable">
  <li class="ui-state-default">Item 1</li>
  <li class="ui-state-default">Item 2</li>
  <li class="ui-state-default">Item 3</li>
  <li class="ui-state-default">Item 4</li>
  <li class="ui-state-default">Item 5</li>
  <li class="ui-state-default">Item 6</li>
  <li class="ui-state-default">Item 7</li>
  </ul>
 </div>
 </div> 

 <div class="portlet
 ui-widget
 ui-widget-content
 ui-helper-clearfix
 ui-corner-all">
 <div class="portlet-header ui-widget-header ui-corner-all">
 Header
 </div>
 <div class="portlet-content">content</div>
 </div>
 </li> 

 <li class="column">
 <div class="portlet
 ui-widget
 ui-widget-content
 ui-helper-clearfix
 ui-corner-all">
 <div class="portlet-header ui-widget-header ui-corner-all">
 Header
 </div>
 <div class="portlet-content">content</div>
 </div>
 </li> 

 <li class="column">
 <div class="portlet
 ui-widget
 ui-widget-content
 ui-helper-clearfix
 ui-corner-all">
 <div class="portlet-header ui-widget-header ui-corner-all">
 Theme
 </div>
 <div class="portlet-content">
  <script
  type="text/javascript"
  src="http://jqueryui.com/themeroller/themeswitchertool/">
  </script>
  <div id="switcher"></div>
 </div>
 </div> 

 <div class="portlet
 ui-widget
 ui-widget-content
 ui-helper-clearfix
 ui-corner-all">
 <div class="portlet-header ui-widget-header ui-corner-all">
 Header
 </div>
 <div class="portlet-content">content</div>
 </div>
 </li>
 </ul>
 <br class="clear" />
 </div>
 <div id="tabs-2">
 <p>Show profile information here</p>
 </div>
 </div> 

 </body>
 </html>

选项卡式界面包含一个作为容器的 <div> 元素,该元素具有选项卡的 ID,还有两个用作实际选项卡的列表项,包含选项卡名称,两个带有 ID 的选项卡与选项卡列表项中的锚定标记匹配。如您所见,可以轻而易举地添加恰当的 HTML,以显示选项卡和选项卡内容,随后还能轻松地将 Tab 小部件应用于选项卡容器。这将自动显示一个选项卡式界面,并根据您选择的类,应用已选主题。
使用效果增强 UI
通过 jQuery UI 库可以利用许多类别的效果,其中许多过渡都是对现有 jQuery 方法的简单扩展。每个类别都包含带有自定参数的方法,例如:
Color transitions:
------Animate.用于为一个 Web 页面实现动画和彩色效果
Visibility transitions:
------Toggle.开关一个元素的可视与否,隐藏或显示此元素
------Show.显示一个元素,可以使用下列任何动画类型实现动画效果
------Hide.隐藏一个元素,可以使用下列任何动画类型实现动画效果
Class transitions:
------addClass .可用于为一个元素添加类,可以包含类呈现的两种不同显示状态之间的动画效果
------removeClass .可用于为一个元素删除类,可以包含类呈现的两种不同显示状态之间的动画效果
------switchClass .可用于在两个类之间切换,可以包含类呈现的两种不同显示状态之间的动画效果
------toggleClass .可根据元素中是否已经包含类来为一个元素添加或删除类,可以包含类呈现的两种不同显示状态之间的动画效果
如部分方法说明所示,还有一些可与其他效果方法联合使用的动画效果。这些效果包括 Blind、Bounce、Clip、Drop、Explode、Fade、Fold、Highlight、Puff、Pulsate、Scale、Shake、Size、Slide 和 Transfer。另外利用 jQuery 插件,您还可以轻松应用其他一些高级技术。
与 jQuery UI 库中的其他内容相同,效果的应用非常容易,只需在 Web 页面中定位一个 HTML 元素或元素组,然后应用恰当的方法即可。清单 7 展示了如何对示例 Web 页面中各 portlet 内容应用的方法,以使用 Toggle 效果。在这个例子中,Toggle 效果是通过双击一个 Portlet 的标题触发的,这会导致内容在隐藏和显示之间切换。

清单 7. 应用 Toggle 效果隐藏和显示 portlet 内容 

 <script type="text/javascript">
 $(function(){
 $( ".portlet-header" ).dblclick(function(){
  $(this).parent().find(".portlet-content").toggle();
 });
 });
 </script>

portlet 的内容是通过遍历标头元素实现的,随后利用 jQuery find 方法定位带有 portlet-content 类的相关元素。
结束语
利用 jQuery UI 增强 Web 页面非常简单,基本上只需要包含恰当的文件,并执行一次函数调用即可。在 jQuery 和 jQuery UI  这样的库出现之前,构建高度交互式的界面极为困难,因为必须从零开始编写代码,而且需要执行大量测试来保证代码能在所有主流浏览器中正常工作。如今,您只要包含一个文件并执行一次函数调用即可创造效果和可排序的元素,或者更改主题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Jquery插件 easyUI属性汇总

    此属性列表请对照jQuery EasyUI 1.0.5,关于它的更多资讯请猛击这里. 属性分为CSS片段和JS片段. CSS类定义:1.div easyui-window        生成一个window窗口样式.      属性如下:                   1)modal:是否生成模态窗口.true[是] false[否]                   2)shadow:是否显示窗口阴影.true[显示] false[不显示] 2.div easyui-panel    

  • JQuery EasyUI 对话框的使用方法

    下面看一下EasyUI的对话框效果图 js代码: 复制代码 代码如下: <script language="javascript" type="text/javascript"> function Open_Dialog() { $('#mydialog').show(); $('#mydialog').dialog({ collapsible: true, minimizable: true, maximizable: true, toolbar: [

  • jQuery EasyUI API 中文文档 - ComboBox组合框

    扩展自 $.fn.combo.defaults. 用 $.fn.combobox.defaults 重写了 defaults. 依赖 combo 用法 <select id="cc" name="dept" style="width:200px;"> <option value="aa">aitem1</option> <option>bitem2</option>

  • jQuery EasyUI API 中文文档 - DataGrid数据表格

    扩展自 $.fn.panel.defaults ,用 $.fn.datagrid.defaults 重写了 defaults . 依赖 panel resizable linkbutton pagination 用法 复制代码 代码如下: <table id="tt"></table> 复制代码 代码如下: $('#tt').datagrid({ url:'datagrid_data.json', columns:[[ {field:'code',title:'

  • Jquery EasyUI的添加,修改,删除,查询等基本操作介绍

    初识Jquery EasyUI看了一些博主用其开发出来的项目,页面很炫,感觉功能挺强大,效果也挺不错,最近一直想系统学习一套前台控件,于是在网上找了一些参考示例.写了一些基本的增删改查功能,算是对该控件的基本入门.后续有时间继续深入学习. 在学习jquery easyui前应该先到官网下载最新版本http://www.jeasyui.com/download/index.php 先看一下运行后的页面 1.列表展示 2.新增页面 3.修改页面 把jquery easyui下载好之后,一般引用下页几

  • jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍

    扩展自 $.fn.datagrid.defaults,用 $.fn.treegrid.defaults 重写了 defaults. 依赖 datagrid 用法 复制代码 代码如下: <table id="tt"></table> 复制代码 代码如下: $('#tt').treegrid({ url:'treegrid_data.json', treeField:'name', columns:[[ {title:'Task Name',field:'name'

  • jQuery UI Bootstrap是什么?

    jQuery UI Bootstrap是一个将jQuery UI集成到Bootstrap上的CSS框架,jQuery UI Bootstrap不仅可以利用jQuery UI强大的控件库,同时还可以享受Bootstrap那种清新自然的主题风格,所以越来越多的前端开发者都在使用jQuery UI Bootstrap.  jQuery UI Bootstrap的特点 ----- 基于jQuery UI,因此控件功能非常强大,可以使用全部的jQuery UI控件. ----- 基于Bootstrap,不

  • jquery EasyUI的formatter格式化函数代码

    要格式化数据表格列,需要设置formatter属性,该属性是一个函数,它包含两个参数: value: 对应字段的当前列的值 record: 当前行的记录数据 复制代码 代码如下: $('#tt').datagrid({ title:'Formatting Columns', width:550, height:250, url:'datagrid_data.json', columns:[[ {field:'itemid',title:'Item ID',width:80}, {field:'p

  • jQuery EasyUI API 中文文档 - Tree树使用介绍

    用 $.fn.tree.defaults 重写了 defaults. 依赖 draggable droppable 用法 Tree 能在 <ul> 元素里定义,此标记可以定义为叶节点和子节点.下面是一个示例: 复制代码 代码如下: <ul id="tt"> <li> <span>Folder</span> <ul> <li> <span>Sub Folder 1</span> &

  • 基于jquery的finkyUI插件与Ajax实现页面数据加载功能

    复制代码 代码如下: <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/json.js"></script> <script type="text/javascript" src="js/jquer

随机推荐