jQuery框架学习第十天:实战jQueryUI常用功能

jQuery UI - 强大的JavaScript库 jQuery UI是一个功能强大的JavaScript库,它建立在jQuery库的基础上,提供了丰富的用户界面组件和交互效果。它的目标是简化Web开发过程中的用户界面设计和实现,使开发人员能够轻松地创建交互性强、美观且易于使用的Web应用程序。本文将介绍jQuery UI的一些核心组件和功能,并提供相应的源代码示例。 阅读详情


jQuery框架学习第一天:开始认识jQuery
jQuery框架学习第二天:jQuery中万能的选择器
jQuery框架学习第三天:如何管理jQuery包装集 
jQuery框架学习第四天:使用jQuery操作元素的属性与样式
jQuery框架学习第五天:事件与事件对象
jQuery框架学习第六天:jQuery中的Ajax应用
jQuery框架学习第七天:jQuery动画–jQuery让页面动起来! 
jQuery框架学习第八天:ASP.NET jQuery实施方案
jQuery框架学习第九天:jQuery工具函数介绍与使用 
jQuery框架学习第十天:实战jQueryUI常用功能
jQuery框架学习第十一天:实战jQuery表单验证及jQuery自动完成提示插件


一.摘要

本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍.

本文是实战篇. 使用jQueryUI完成制作网站的大部分常用功能. 

 

二.前言

经过公司内部收集, 整理了一些经常使用javascript实现的功能.  实现这些功能的主角不是让人眼花缭乱的jQuery插件,  而是jQuery UI.

如果你还在为了一个小小的特效而去下载并安装插件, 发现Bug还没有人替你解决. 记住插件是我们没有办法的最后选择.

使用插件有太多的坏处:

1.不利于维护

2.增加页面大小

3.不利于成员间交流共享,具有学习成本.

4.不够健壮, 不能保证插件版本一直更新并修复所有问题.

下面就引入今天的主角:jQuery UI

 

三.jQuery UI

jQuery UI 是 jQuery 的一部分, 是在jQuery之上的一套专门用于UI交互的类库.  使用jQuery UI可以实现底层交互, 各种高级特效, 动画, 并且可定制主题.

我们可以用它轻松的构建高度交互的Web应用程序.

官方首页: 
http://jqueryui.org/

下载: 
http://jqueryui.com/download

示例和文档: 
http://jqueryui.com/demos/

皮肤: 
http://jqueryui.com/themeroller/

 

jQuery UI 的在线网站十分强大. 首先就是在下载时可以组装自己想要的功能定制下载:

并且针对各种控件不仅提供了详细的参数说明和实例,  还可以随时更换实例的皮肤:

本文主要讲解实例, 大家可以通过实例代码快速上手jQuery UI.  使用jQuery UI我们可以再不借助其他插件的情况下完成大部分页面应用, 说其是一个官方的超级UI插件也不为过. 包含所有功能的jQuery UI类库文件为188K, 启用Gzip压缩后是45K. 虽然较大但是一次加载全网站获益.而且45K大小在当今的互谅网时代还算可以接受.

目前还没有jQuery UI的中文教程.  因为本文是实战篇, 所以不会仔细讲解基础内容. 在后面的章节中我会加入jQuery UI的基础教程.争取成为中文jQuery UI第一教程.

 

四. 准备工作

我将所有相关的文件, 包括各种类库文件, Theme模板放置在如下路径:

http://www.dotnetapi.com/JSLib/

此路径开通了目录浏览, 可以直接查找需要的文件. 目录组织结构按照本系列: (八) 插播:jQuery实施方案 中介绍的方案组织.

另外也可以从Google上引用文件, Google的CDN速度更快也更有保证, 参见: Google's CDN

本文的实例的所有引用都使用 WebConfig.ResourceServer 这个属性:

public class WebConfig
{
    public static string ResourceServer = @http://www.dotnetapi.com/;
}

 

五.弹出层对话框

弹出框是最常用最实用的功能.  先来看一下艺龙网上的一些应用场景.

1. 艺龙网应用场景举例

(1) 静态提示类弹出层. 弹出层的内容是固定的.

 

(2) 动态提示类弹出层. 弹出层内容是根据事件源变化的. 
(3)遮罩类弹出层. 弹出时背景变灰并不可点击.

2. 应用实例

使用 jQuery UI 的 Dialog 组件. 我以轻松实现上面三种效果.

Dialog组件的主要特点是可以拖动(Draggable), 可以改变大小(Resizable) .

示例完整代码如下:

复制代码
<% @ Page Language = " C# "   %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  id ="Head1"  runat ="server" >
    
< title > jQuery UI - 弹出层应用实例 Dialog </ title >    
    
<!-- black-tie,blitzer,blitzer,dot-luv,excite-bike,hot-sneaks,humanity,mint-choc,redmond,smoothness,south-street,start,swanky-purse,trontastic,ui-darkness,ui-lightness,vader -->
    
< link  rel ="stylesheet"  type ="text/css"  href ="<%=WebConfig.ResourceServer +" /JsLib/jquery/themes/redmond/style.css"% > " /> 
    
< script  type ="text/javascript"  src ="<% =WebConfig.ResourceServer %>/JsLib/jquery/jquery-min-lastest.js" ></ script >     
    
< script  src ="<% =WebConfig.ResourceServer %>/JsLib/jquery/ui/jquery-ui-all-min-lastest.js"
        type
="text/javascript" ></ script >
    
<%   if  ( false )
       {
%> < script  src ="~/js/jquery-vsdoc-lastest.js"  type ="text/javascript" ></ script >
    
<%  } %>
    
< script  type ="text/javascript" >
        
/* ========== 必须放在头部加载的语句块. 尽量避免使用 ========== */
    
</ script >
    
< style  type ="text/css" >
        
</ style >
</ head >
< body >
    
<!--  Demo 静态提示类弹出层  -->
    
< div  class ="ui-widget ui-widget-content ui-corner-all"  style ="width: 700px; padding: 5px;" >
        
< h3 > Demo. 共享同一个静态弹出层, 弹出层内容固定:  </ h3 >
        
< div >
            
< span  id ="spanShowTip1" > 显示提示 </ span > &nbsp;&nbsp;   < span  id ="spanShowTip2" > 显示提示 </ span > &nbsp;&nbsp;
            
< span  id ="spanShowTip3" > 显示提示 </ span > &nbsp;&nbsp;   < span  id ="spanShowTip4" > 显示提示 </ span > &nbsp;&nbsp;
        
</ div >
    
</ div >
    
< br  />
    
< br  />
    
<!--  Demo 动态提示类弹出层  -->
    
< div  class ="ui-widget ui-widget-content ui-corner-all"  style ="width: 700px; padding: 5px;" >
        
< h3 > Demo. 每个弹出层内容不同, 弹出层内容存储在事件源的元素属性中:  </ h3 >
        
< div >
            
< span  id ="spanShowDataTip1"  data ="颜色是红色" > 红色 </ span > &nbsp;&nbsp;
            
< span  id ="spanShowDataTip2"  data ="颜色是绿色" > 绿色 </ span > &nbsp;&nbsp;
        
</ div >
    
</ div >
    
< br  />
    
< br  />
    
<!--  Demo 遮罩类弹出层  -->
    
< div  class ="ui-widget ui-widget-content ui-corner-all"  style ="width: 700px; padding: 5px;" >
        
< h3 > Demo. 弹出IFrame  </ h3 >
        
< div >
            
< input  type ="button"  id ="btnShowIframe"  name ="btnShowIframe"  value ="显示弹出层" />
        
</ div >
    
</ div >
    
    
<!--  提示类弹出层  -->
    
< div  id ="divTip"  title ="自定义标题" >
        
< p > 弹出层 </ p >
    
</ div >
    
<!--  遮罩类弹出层  -->
    
< div  id ="divIframe"  title ="iFrame弹出层"  style ="text-align:center;" >
        
< iframe  src ="http://www.elong.com"  width ="450px"  height ="230px" ></ iframe >
    
</ div >
    
< script  type ="text/javascript" >
        
/* ==========用户自定义方法========== */


        
/* ==========事件绑定========== */
        $(
function ()
        {
            
// 静态提示类弹出层
            $( " span[id^=spanShowTip] " ).css( " cursor " ,  " pointer " ).click( function (event)
            {
                $(
" * " ).stop();
                event.stopPropagation();
                
var  top  =  $(event.target).offset().top  +   20 ;
                
var  left  =  $(event.target).offset().left;
                $(
" #divTip " ).dialog( " option " ,  " position " , [left, top]);
                $(
" #divTip " ).dialog( " open " );
            });
            
// 动态提出类弹出层
            $( " span[id^=spanShowDataTip] " ).css( " cursor " ,  " pointer " ).click( function (event)
            {
                $(
" * " ).stop();
                $(
" #divTip " ).dialog( " close " );
                event.stopPropagation();
                
var  top  =  $(event.target).offset().top  +   20 ;
                
var  left  =  $(event.target).offset().left;
                $(
" #divTip " ).html($(event.target).attr( " data " ));
                $(
" #divTip " ).dialog( " option " ,  " position " , [left, top]);
                $(
" #divTip " ).dialog( " open " );
            });
            
// 遮罩类弹出层
            $( " #btnShowIframe " ).click( function (event)
            {
                event.preventDefault();
                event.stopPropagation();
                $(
" #divIframe " ).dialog( " open " );
            });

            
// 单击自身取消冒泡
            $( " #divTip, #divIframe " ).bind( " click " ,  function (event)
            {
                event.stopPropagation();
            });

            
// document对象单击隐藏所有弹出层
            $(document).bind( " click " ,  function (event)
            {
                $(
" #divTip " ).dialog( " close " );
                $(
" #divIframe " ).dialog( " close " );
            });
        });

        
/* ==========加载时执行的语句========== */
        $(
function ()
        {
        
            
// 初始化提示类弹出层
            $( " #divTip " ).dialog({
                show: 
null ,
                bgiframe: 
false ,
                autoOpen: 
false
            });

            
// 初始化遮罩类弹出层
            $( " #divIframe " ).dialog({
                show: 
null ,
                bgiframe: 
false ,
                autoOpen: 
false ,
                width: 
500 ,
                height: 
300 ,
                draggable: 
true ,                
                resizable: 
false ,
                modal: 
true
            });            
        });
    
</ script >
</ body >
</ html >
复制代码


效果如图:

静态提示类弹出层

动态提示类弹出层:

遮罩类弹出层:

 

3.关键点讲解

(1)计算弹出层位置

提示类弹出框最重要的是计算弹出框的位置. 通过事件对象获取到事件源, 使用offset()函数计算事件源相对于document的位置:

                var top = $(event.target).offset().top;
                var left = $(event.target).offset().left;

因为是相对于document, 即页面左上角的位置, 所以需要将弹出层放在Body元素中的第一层. 即父类就是body. 如果包含在其他元素中, 需要确定任何一个父类的position样式设置为了relative.

计算出来的top和left是事件源的位置, 在此位置显示会将事件源对象遮盖住. 所以通常需要手工做一些偏移, 比如top+20.

(2) 取消冒泡和浏览器默认行为

如果我们为document对象绑定了单击后关闭弹出层的事件, 那么就一定要取消事件的冒泡. 使用event对象的stopPropagation()方法可以取消冒泡.

event.stopPropagation();

对于具有默认行为的元素,比如提交按钮的提交表单行为, <a>元素的超链接行为等, 我们如果在这些元素上应用事件, 还需要取消它们的默认行为:

event.preventDefault();

(3) 设置动画效果与取消动画

通过设置dialog的配置项的show属性, 可以设置显示dialog时候的动画效果:

$('.selector').dialog({ show: 'slide' });


show默认为null即无动画,  可以是使用下列值:

'blind', 'clip', 'drop', 'explode', 'fold', 'puff', 'slide', 'scale', 'size', 'pulsate'.

对于这些动画的效果, 可以在此页观看:

http://jqueryui.com/demos/show/

当一个动画效果执行时, 如果用户在此对这个元素进行操作, 就会出现各种问题, 比如定位不准确等. 所以如果应用了动画, 我们在对其操作时需要使用stop()函数来停止动画, 通常是停止虽有元素的动画:

$("*").stop();


但是即使停止了动画再进行操作, 如果操作的太快也容易产生问题. 所以至于是否使用动画需要经过权衡决定.

(4) 动态提示类弹出层的数据传递

动态提示类弹出层的数据是不同的,  本文实例使用的是将数据存储在元素属性data上:

<span id="spanShowDataTip1" data="颜色是红色">红色</span>

 

这是一种简单直观的方式. 比较容易编程实现(尤其是在使用MVC编程模型的时候.)

还有一种常用方式是使用javascript变量存储数据.这两种方式在第5章时有过讲解:

http://www.cnblogs.com/zhangziqiu/archive/2009/05/06/jQuery-Learn-5.html

(5)更换主题

大家注意实例中的弹出层没有为其编辑任何样式, 但是显示出来后已经被美化过了. 这是因为我引用了jQuery UI的主题:

    <!--black-tie,blitzer,blitzer,dot-luv,excite-bike,hot-sneaks,humanity,mint-choc,redmond,smoothness,south-street,start,swanky-purse,trontastic,ui-darkness,ui-lightness,vader-->
    <link rel="stylesheet" type="text/css" href="<%=WebConfig.ResourceServer +"/JsLib/jquery/themes/redmond/style.css"%>" /> 

注释中有很多的主题, 只需要将引用路径中的"redmond"改为其中任何一个, 弹出层的样式会立刻发生变化.

VS中有一个Bug, 就是针对link标签, href中的语句块编译有问题, 某些情况下<%%>不被编辑解析. 所以我使用上面代码中的方式构造href属性值.

可以在下面的地址查看各个主题的效果:

http://jqueryui.com/themeroller/#themeGallery

 

六.Tab标签

不刷新页面, 在页面中的不同标签间切换:

本实例通过jQuery UI的Tabs组件实现. Tabs组件的使用与dialog一样十分简单,  默认的配置即可实现最简单的tab, 通过设置更多的options可以实现更复杂的应用.

1.应用实例

源代码:

复制代码


<% @ Page Language = " C# "   %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  id ="Head1"  runat ="server" >
    
< title > jQuery UI - 弹出层应用实例 Dialog </ title >
    
<!-- black-tie,blitzer,blitzer,dot-luv,excite-bike,hot-sneaks,humanity,mint-choc,redmond,smoothness,south-street,start,swanky-purse,trontastic,ui-darkness,ui-lightness,vader -->
    
< link  rel ="stylesheet"  type ="text/css"  href ="<%=WebConfig.ResourceServer +" /JsLib/jquery/themes/redmond/style.css"% > " />
    
< script  type ="text/javascript"  src ="<% =WebConfig.ResourceServer %>/JsLib/jquery/jquery-min-lastest.js" ></ script >
    
< script  src ="<% =WebConfig.ResourceServer %>/JsLib/jquery/ui/jquery-ui-all-min-lastest.js"
        type
="text/javascript" ></ script >
    
<%   if  ( false )
       {
%> < script  src ="~/js/jquery-vsdoc-lastest.js"  type ="text/javascript" ></ script >
    
<%  } %>
    
< script  type ="text/javascript" >
        
/* ========== 必须放在头部加载的语句块. 尽量避免使用 ========== */
    
</ script >
    
< style  type ="text/css" >
        
</ style >
</ head >
< body >
    
<!-- Demo.默认Tab与Ajax Tab  -->
    
< div  id ="tabs1"  style ="width:300px;" >
        
< ul >
            
< li >< a  href ="#tabs1-1" > One </ a ></ li >
            
<!--  Ajax Tab  -->
            
< li >< a  href ="TabData.htm" > Two </ a ></ li >
            
< li >< a  href ="#tabs1-3" > Three </ a ></ li >
        
</ ul >
        
< div  id ="tabs1-1" >
            
< p > Tab1内容 </ p >
        
</ div >
        
< div  id ="tabs1-3" >
            
< p > Tab3内容 </ p >
        
</ div >
    
</ div >
    
< br  />
    
< br  />
    
< br  />
    
<!-- Demo. 可折叠的Tab  -->
    
< div  id ="tabs2"  style ="width: 300px;" >
        
< ul >
            
< li >< a  href ="#tabs2-1" > One </ a ></ li >
            
< li >< a  href ="#tabs2-2" > Two </ a ></ li >
            
< li >< a  href ="#tabs2-3" > Three </ a ></ li >
        
</ ul >
        
< div  id ="tabs2-1" >
            
< p > Tab1内容 </ p >
        
</ div >
        
< div  id ="tabs2-2" >
            
< p > Tab2内容 </ p >
        
</ div >
        
< div  id ="tabs2-3" >
            
< p > Tab3内容 </ p >
        
</ div >
    
</ div >
    
< br  />
    
< br  />
    
< br  />
    
<!-- Demo. 鼠标滑动即切换的Tab  -->
    
< div  id ="tabs3"  style ="width: 300px;" >
        
< ul >
            
< li >< a  href ="#tabs3-1" > One </ a ></ li >
            
< li >< a  href ="#tabs3-2" > Two </ a ></ li >
            
< li >< a  href ="#tabs3-3" > Three </ a ></ li >
        
</ ul >
        
< div  id ="tabs3-1" >
            
< p > Tab1内容 </ p >
        
</ div >
        
< div  id ="tabs3-2" >
            
< p > Tab2内容 </ p >
        
</ div >
        
< div  id ="tabs3-3" >
            
< p > Tab3内容 </ p >
        
</ div >
    
</ div >
    
< script  type ="text/javascript" >
        
/* ==========用户自定义方法========== */


        
/* ==========事件绑定========== */
        $(
function ()
        {

        });

        
/* ==========加载时执行的语句========== */
        $(
function ()
        {
            
// 默认Tabs
            $( " #tabs1 " ).tabs();
            
// 可折叠的Tabs
            $( " #tabs2 " ).tabs({
                collapsible: 
true
            });
            
// 鼠标滑动即切换的Tabs
            $( " #tabs3 " ).tabs({
                event: 
" mouseover "
            });
        });        
    
</ script >
</ body >
</ html >
复制代码

 

效果:

1. 默认设置的Tabs, Two标签内容使用Ajax获取


2.再折叠tab

3.鼠标滑动即切换的tab 

 

2.要点讲解

(1) 注意Tabs中的HTML结构.

使用ul构建标签. 内容div一定要和标签关联, 没有关联的div将不被处理直接显示.

(2) 使用Ajax可以不指定内容容器, 但是也可以将Ajax内容放入指定容器中.
<li><a href="hello/world.html" title="Todo Overview"> ... </a></li>

<div id="Todo_Overview"> ... </div>
(3)  活用事件

tab有很多事件:

select, load, show, add, remove, enable, disable

使用这些事件可以完成很多复杂任务. 需要注意事件的签名:

$('#example').bind('tabsselect', function(event, ui) {

    // Objects available in the function context:
    ui.tab     // anchor element of the selected (clicked) tab
    ui.panel   // element, that contains the selected/clicked tab contents
    ui.index   // zero-based index of the selected (clicked) tab

});

第一个是事件对象, 第二个ui对象是传递的额外参数, 我们可以获取tab对象, tab所在容器和tab的索引值.

比如我们可以在事件中做验证:

$('#example').tabs({
    select: function(event, ui) {
        var isValid = ... // form validation returning true or false
        return isValid;
    }
});


或者当添加一个tab时立刻切换到选中状态:

var $tabs = $('#example').tabs({
    add: function(event, ui) {
        $tabs.tabs('select', '#' + ui.panel.id);
    }
});


活学活用, 更多应用大家也可以参见tab组件的官方文档:

http://jqueryui.com/demos/tabs

 

七. 手风琴菜单

使用jQuery UI的accordion组件可以实现手风琴菜单. 效果见下图.

accordion文档地址: http://jqueryui.com/demos/accordion/

1.实例效果

2.实例代码


  
复制代码
<% @ Page Language = " C# "   %> <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > < html  xmlns ="http://www.w3.org/1999/xhtml" > < head  id ="Head1"  runat ="server" >      < title > jQuery UI - 手风琴菜单应用实例 Accordion  </ title >      <!-- black-tie,blitzer,blitzer,dot-luv,excite-bike,hot-sneaks,humanity,mint-choc,redmond,smoothness,south-street,start,swanky-purse,trontastic,ui-darkness,ui-lightness,vader -->      < link  rel ="stylesheet"  type ="text/css"  href ="<%=WebConfig.ResourceServer +" /JsLib/jquery/themes/redmond/style.css"% > " />      < script  type ="text/javascript"  src ="<% =WebConfig.ResourceServer %>/JsLib/jquery/jquery-min-lastest.js" ></ script >      < script  src ="<% =WebConfig.ResourceServer %>/JsLib/jquery/ui/jquery-ui-all-min-lastest.js"         type ="text/javascript" ></ script >      <%   if  ( false )        { %> < script  src ="~/js/jquery-vsdoc-lastest.js"  type ="text/javascript" ></ script >      <%  } %>      < script  type ="text/javascript" >          /* ========== 必须放在头部加载的语句块. 尽量避免使用 ========== */      </ script >      < style  type ="text/css" >         body          {             font-size :  12px ;          }      </ style > </ head > < body >      <!--  Demo. 默认配置的Accordion菜单  -->      < div  style ="width: 300px; float:left; margin-left:20px;" >          < div  id ="accordion1" >              < h3 >< a  href ="#" > 菜单1 </ a ></ h3 >              < div >                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />              </ div >              < h3 >< a  href ="#" > 菜单2 </ a ></ h3 >              < div >                 菜单2的内容              </ div >              < h3 >< a  href ="#" > 菜单3 </ a ></ h3 >              < div >                 菜单3的内容              </ div >          </ div >      </ div >      <!--  Demo. 取消自动高度, 可折叠  -->      < div  style ="width: 300px; float: left; margin-left: 20px;" >          < div  id ="accordion2" >              < h3 >< a  href ="#" > 菜单1 </ a ></ h3 >              < div >                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />              </ div >              < h3 >< a  href ="#" > 菜单2 </ a ></ h3 >              < div >                 菜单2的内容              </ div >              < h3 >< a  href ="#" > 菜单3 </ a ></ h3 >              < div >                 菜单3的内容              </ div >          </ div >      </ div >      <!--  Demo. 鼠标滑动触发, 自定义图标  -->      < div  style ="width: 300px; float: left; margin-left: 20px;" >          < div  id ="accordion3" >              < h3 >< a  href ="#" > 菜单1 </ a ></ h3 >              < div >                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />                 菜单1的内容 < br  />              </ div >              < h3 >< a  href ="#" > 菜单2 </ a ></ h3 >              < div >                 菜单2的内容              </ div >              < h3 >< a  href ="#" > 菜单3 </ a ></ h3 >              < div >                 菜单3的内容              </ div >          </ div >      </ div >      < script  type ="text/javascript" >          /* ==========用户自定义方法========== */          /* ==========事件绑定========== */         $( function ()         {         });          /* ==========加载时执行的语句========== */         $( function ()         {              // 默认配置的Accordion菜单             $( " #accordion1 " ).accordion();              // 取消自动高度, 可折叠             $( " #accordion2 " ).accordion({                 autoHeight: false ,                 collapsible:  true             });              // 鼠标滑动触发, 自定义图标             $( " #accordion3 " ).accordion({                 icons: {                             header:  " ui-icon-circle-arrow-e " ,                                headerSelected:  " ui-icon-circle-arrow-s "                         },                 event:  " mouseover "             });         });         </ script > </ body > </ html >
复制代码
</html>

 

3. 关键点讲解

(1) 注意高度设置过小问题

当包含accordion控件的容器高度设计过小时, 在FireFox3中在此容器后面的内容会被accordion控件部分遮盖. 在IE中没有此问题. 经检查是因为容器高度小于菜单高度导致.  所以我们在应用时应当注意不要将容器高度设置过小.

(2) 部分关键属性

autoHeight: 设置是否自动将内容高度设置为容器高度.

collapsible: 设置是否可折叠

一般上面两个配合使用,  以为折叠后肯定会改变菜单高度, 会导致autoHeight设置为true无效.

更多属性和事件使用请参阅官方文档.

 

八.总结

 

本章简单介绍了jQueryUI, 并且使用jQuery UI完成了弹出层,tabs,手风琴菜单的应用实例. 使用jQuery UI可以不需要额外寻找插件. 并且实现简单.

但是有些功能是必须使用插件完成的. 下一张讲解两个插件实例: 自动完成插件AutoComplete 和 表单验证插件jQuery Validate.

本章源代码下载:

http://files.cnblogs.com/zhangziqiu/Code-jQueryStudy-10.rar

jQuery UI 介绍及常见效果的 jQuery JS 实现 jQuery UI 是一个基于 jQuery JavaScript 库的用户界面框架,它提供了一系列丰富的交互效果和组件,可以帮助开发人员轻松地创建各种动态和可交互的网页应用程序。以上是几个常见的 jQuery UI 效果的示例代码。可拖拽效果是 jQuery UI 中一个常用的功能,它允许用户通过鼠标拖动元素并放置到指定位置。可调整大小效果是另一个常见的 jQuery UI 功能,它允许用户通过鼠标调整元素的大小。自动完成效果是 jQuery UI 中的一个组件,它可以在用户输入时提供匹配的建议。 阅读详情

相关推荐

jQuery UI和EasyUI的区别及编程示例

EasyUI的设计理念是"User Friendly",即以用户友好的方式提供丰富的交互体验和可定制性。EasyUI提供了大量的UI组件,如表格、树形菜单、表单验证等,以及一些高级功能,如数据网格、布局管理器等。jQuery UI:jQuery UI是建立在jQuery库之上的插件集合,旨在提供一套简单易用、可定制和美观的用户界面组件。但是,jQuery UI具有活跃的社区支持和丰富的插件生态系统,您可以通过社区提供的插件来满足特定需求。此外,EasyUI还提供了一些额外的插件和扩展,以满足更复杂的需求。

ByteProwl的博客 542

jQuery UI简单的讲解

<a href="#">财务部</a></li><li class="ui-state-disabled"><a href="#">财务部</a>

omygodvv的博客 2096

全面掌握jQuery UI:打造动态与无障碍的网页界面

本文还有配套的精品资源,点击获取 简介:jQuery UI 是一个基于 jQuery 的用户界面组件库,提供了丰富的交互功能和用户界面元素。它通过易用、灵活且功能强大的组件,例如日期选择器、对话框、拖放功能和可排序列表等,使网页开发更加高效。该插件还支持主题定制和无障碍访问,适用于多种前端框架,为开发者提供了一套完善的工具来构建视觉一致且交互丰富的网页应用。 1....

weixin_28888459的博客 3314

[转帖]jQuery框架学习第十天:实战jQueryUI常用功能

一.摘要本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍. 本文是实战篇. 使用jQueryUI完成制作网站的大部分常用功能. 二.前言经过公司内部收集, 整理了一些经常使用javascript实现的功能. 实现这些功能的主角不是让人眼花缭乱的jQuery插件, 而是jQuery UI. ...

weixin_30716725的博客 103

拿到“完整代码.rar”别急着解压:从解压到跑通的工程化指南

软件工程中,通过压缩包交付代码是常见形式,但“完整代码.rar”往往隐藏着环境依赖、路径乱码、资源缺失等隐患。理解压缩工具(如7-Zip、WinRAR)的选型与解压原理,掌握结构辨识与依赖安装方法,是高效还原可运行工程的前提。从项目类型识别、配置调整到冒烟测试,再到常见运行期排障,这套流程能在代码交付场景中显著缩短磨合周期。对需要快速接手他人代码的开发者而言,系统化验收比盲目双击更可靠。以“完整代码.rar”为例,梳理从解压到跑通的工程化路径,能帮助你规避典型陷阱,让交付代码真正变成可运行、可改造的项目基线

weixin_34294649的博客 157

2024年全国大学生电子设计竞赛A题_AC-AC变换电路并联运行

AC-AC变换电路并联运行(A 题)【本科组】

qq_74395263的博客 7836

从零开始学习jQuery (十) jQueryUI常用功能实战

本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 从零开始学习jQuery (五) 事件与事件对象 从零开始学习jQuery (六) jQuery中的Ajax 从零开始学习j...

diaoshisun9421的博客 461

Seedance 2.5、HappyHorse 1.1与豆包Seed 2.1:一周内三大模型技术参数分析

音频生成延续原生音画同步架构,将文本、画面、音频统一序列建模,生成过程同步产出匹配口型的原声音频,支持中、英、日、韩、德、法、阿拉伯7种语言唇形对齐,无需二次调音。从行业趋势看,30秒直出、4K分辨率、7语种唇形同步正在成为视频生成的标配,编程Agent化和多模态理解正在成为语言模型的标配。技术狂奔的同时,监管在同步收紧。我理解这里的关键在于,视频生成模型的商业化落地不仅取决于生成质量,更取决于推理效率——生成一段15秒1080P视频需要多少秒、消耗多少算力,直接决定了模型的商用可行性。

lichunchuan1的博客 325

jQuery.tocify.js与jQueryUI主题整合:自定义样式完全教程 [特殊字符]

jQuery.tocify.js是一款功能强大的jQuery目录插件,能够动态生成美观的网页目录导航。这个插件最大的亮点之一就是支持与jQueryUI主题无缝整合,让开发者可以轻松创建符合jQueryUI设计规范的目录样式。在本教程中,我们将深入探讨如何将jQuery.tocify.js与jQueryUI主题完美结合,打造专业级的目录导航体验。 ## 为什么选择jQuery.tocify.js与

gitblog_00007的博客 473

Python量化交易实战:如何用vnpy+Tushare获取股票历史数据(附完整代码)

本文详细介绍了如何利用vn.py框架与Tushare数据接口,构建一个健壮的Python量化交易数据获取引擎。通过封装Tushare API,实现股票历史数据的自动化获取与格式转换,并适配vn.py的BarData结构,为策略回测与实盘交易提供稳定、高效的数据基础。文中提供了完整的代码实现,涵盖环境配置、核心封装逻辑及高级功能扩展。

cola5的博客 1220

Xilinx的DDR4 IP

Xilinx的DDR4 IP

weixin_39896700的博客 4458

从零开始学习jQuery教程:jQueryUI常用功能实战

一.摘要本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍.本文是实战篇. 使用jQueryUI完成制作网站的大部分常用功能. 二.前言经过公司内部收集, 整理了一些经常使用javascript实现的功能. 实现这些功能的主角不是让人眼花缭乱的jQuery插件, 而是jQuery UI.如果你

水工鸟的专栏 1万+

超详细 VMware Horizon 虚拟桌面VDI安装步骤

主要的目的是模拟生产环境中的共享存储。自动桌面相当于共享电脑,大家使用同一个虚拟机,对虚拟机的修改都放在用户的配置文件中,RDS桌面池相当于共享的服务器,可以多人同时连接到服务器上。1:之前已经建立好了NFS的存储,这部分配置好后,以后的虚拟机可以安装到NFS的存储中。2: 使用Composer发布系统可以解决SID,机器名冲突的问题,更重要的可以节约磁盘空间,发布的所有系统可以访问一块磁盘。26: 域选择我们之前建立的域,用户名我输入的是管理员,可以在AD域新建用户点击查找,我这里用的是管理员。

vv12345的博客 1万+

jQuery UI框架

1、jQuery的界面插件 Ninja UI Ninja UI,是一款界面插件,使用它将能给你的项目增色不少。此插件包含有幻灯,智能提示等常见的效果。 目前的文档还不是很全,但是官方提供的例子已经很详细了,所以也是很容易使用的。 在线演示:http://ninjaui.com/examples 2、jQuery的UI框架 Chico UI

小红帽 3543

UI自动化控制PC端微信获取当前群聊的群友列表

在一个月前,某个群友在获取整个群的群友信息时遇到了一点问题: 对整个群进行群友数据获取经测试确实有点棘手,下面我将我的解决过程公布给大家。 基础教程详见: https://blog.youkuaiyun.com/as604049322/article/details/121391639 人工打开要抓取的群聊窗口后,首先获取微信窗口并点击聊天信息按钮: import uiautomation as auto auto.uiautomation.SetGlobalSearchTimeout(1) wechatWind

小小明-代码实体的专栏 3万+

Holt-Winters方法预测水电发电量

Holt-Winters 模型, ARMIA,ACF检验 ,Dickey-Fuller 检测,白噪声检测,差分

firefox_yau的博客 1270

jqueryui(jqueryui)

Bootstrap和jQueryUI是同一类的东西吗 bootstrap和jqueryui都属于“框架”但是bootstrap框架主要用于快速搭建前端页面拥有非常丰富的组建(css,js,web...),根据你的排版要求可以迅速的找到相应的代码,复制过来就可以用了,一般不需要手动修改样式了。jqueryui主要是一些动态...

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 693

阿波罗开发板硬件架构与STM32模块化设计详解

嵌入式开发板的模块化设计是提升硬件复用性、降低迭代成本的关键技术路径。其核心在于底板与核心板的电气解耦与功能分层,依托STM32系列MCU(如F429/F767)的丰富外设资源与引脚复用能力,实现信号完整性、电源域隔离与热管理的系统级协同。该架构显著支撑工业HMI、智能家居网关、便携医疗设备等典型场景,尤其在RGB LCD驱动、QSPI Flash内存映射、多协议通信(CAN/RS485/USB)及低功耗唤醒(WK_UP按键)等工程实践中展现出高可靠性与易调试性。本文围绕阿波罗开发板展开深度解析,覆盖最小系

weixin_42510201的博客 64
上一篇: Query框架学习第九天:jQuery工具函数介绍与使用
下一篇: jQuery框架学习第十一天:实战jQuery表单验证及jQuery自动完成提示插件
GoodShot
博客等级 码龄22年 968粉丝 281原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值