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


Posted in Javascript onJune 22, 2016

如今,网站比以往更具可定制性,允许用户更改其空间,根据自己的喜好对其进行个性化。个性化的主页或仪表板页面(例如 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  这样的库出现之前,构建高度交互式的界面极为困难,因为必须从零开始编写代码,而且需要执行大量测试来保证代码能在所有主流浏览器中正常工作。如今,您只要包含一个文件并执行一次函数调用即可创造效果和可排序的元素,或者更改主题。

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

Javascript 相关文章推荐
驱动事件的addEvent.js代码
Mar 27 Javascript
Json字符串转换为JS对象的高效方法实例
May 01 Javascript
jQuery不使用插件及swf实现无刷新文件上传
Dec 08 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
Jun 01 Javascript
学习javascript面向对象 javascript实现继承的方式
Jan 04 Javascript
js格式化输入框内金额、银行卡号
Feb 01 Javascript
jQuery基于muipicker实现仿ios时间选择
Feb 22 Javascript
使用javascript插入样式
Mar 14 Javascript
js实现PC端根据IP定位当前城市地理位置
Feb 22 Javascript
jQuery鼠标移动图片上实现放大效果
Jun 25 jQuery
手把手教你vue-cli单页到多页应用的方法
May 31 Javascript
微信小程序实现底部弹出模态框
Nov 18 Javascript
JavaScript基于原型链的继承
Jun 22 #Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
Jun 22 #Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
Jun 22 #Javascript
浅析jQuery Ajax通用js封装
Jun 22 #Javascript
Javascript如何判断数据类型和数组类型
Jun 22 #Javascript
最全的Javascript编码规范(推荐)
Jun 22 #Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
Jun 22 #Javascript
You might like
php生成随机数或者字符串的代码
2008/09/05 PHP
PHP批量检测并去除文件BOM头代码实例
2014/05/08 PHP
Thinkphp实现MySQL读写分离操作示例
2014/06/25 PHP
php获取QQ头像并显示的方法
2014/12/23 PHP
QQ登录简单实现代码
2021/03/09 Javascript
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
表单元素的submit()方法和onsubmit事件应用概述
2013/02/01 Javascript
jQuery知识点整理
2015/01/30 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
js时间控件只显示年月
2017/01/08 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
javascript实现多边形碰撞检测
2020/10/24 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
对python字典过滤条件的实例详解
2019/01/22 Python
详解Python实现进度条的4种方式
2020/01/15 Python
python默认参数调用方法解析
2020/02/09 Python
怎么快速自学python
2020/06/22 Python
Django url 路由匹配过程详解
2021/01/22 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
2015/08/04 面试题
医院总经理职责
2013/12/26 职场文书
考试违纪检讨书
2014/02/02 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
职业生涯规划书前言
2014/04/15 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
2014年绿化工作总结
2014/12/09 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技