jQuery UI簡單的講解


我們先進入一下問答時間,你都知道多少呢?

(1)什么是jQuery UI 呢?

  解答:jQuery UI 是以 jQuery 為基礎的開源 JavaScript 網頁用戶界面代碼庫。包含底層用戶交互、動畫、特效和可更換主題的可視控件。我們可以直接用它來構建具有很好交互性的web應用程序。所有插件測試能兼容IE 6.0+, Firefox 3+, Safari 3.1+, Opera 9.6+, 和GoogleChrome。

(2)jQuery UI 的組件組成:

 解答:Query UI 主要分為3個部分:交互、微件和效果庫。

(3)jQuery UI和jQuery的主要區別?

 解答(1) jQuery是一個js庫,主要提供的功能是選擇器,屬性修改和事件綁定等等。

         (2) jQuery UI則是在jQuery的基礎上,利用jQuery的擴展性,設計的插件。提供了一些常用的界面元素,諸如對話框、拖動行

         為、改變大小行為等等。

簡單的問答就先到這里吧,讓我們切入代碼的世界吧!

第一個小示例:利用dialog實現form表單提交

第一步先准備項目所需的jQuery UI所需要的支持文件

<!-- 樣式引用-->
<link rel="stylesheet" href="themes/base/jquery.ui.all.css">
<!--  jQuery引用-->
<script type="text/javascript" src="js/jQuery1.11.1.js"></script>
<!-- jQuery UI引用 -->
<script type="text/javascript" src="js/jquery-ui.js"></script>

官網下載地址:http://jqueryui.com/download/

在項目webapp下創建文件夾,名稱為js,把文件發在js文件夾下。目錄結構如下:

第二步搭建頁面:

<body>
<div id="dialog">
    <h2>用戶登錄</h2>
    <form action="ls" method="post"> 
        用戶名:<input type="text" name="uname" id="uname"/><br/>
        密    碼:<input type="text" name="pwd" id="pwd"/><br/>
        </form>
</div>
<input id="opener" type="button" value="打開form表單"/>
</body>

第三步編寫<script></script>標簽內的代碼:

<script type="text/javascript">
   $(function(){
       $("#dialog").dialog({
//是否自動打開  默認為true autoOpen:
false, width:350, height:350,
//點擊按鈕觸發 buttons:{
"提交":function(){
//表單提交 $(
"form").submit(); } } });
//點擊對話窗口時打開隱藏的form表單 $(
"#opener").click(function(){ $("#dialog").dialog("open"); }); }); </script>

dialog插件的常用參數:

 
   常用參數:
     屬性                  類型                     說明
    Boolean autoOpen      屬性          設置該組件被調用時的打開狀態。默認值為true,即打開對話框
    Object buttons 或
    Array buttons          屬性          顯示一個按鈕,可以設置該按鈕的顯示文本和點擊函數
    Boolean modal          屬性          設置組件是否使用模式窗口。默認為false
    close()                  方法          執行關閉對話框操作
    open()                  方法          執行打開對話框操作
    beforeClose(event,ui) 事件          當dialog嘗試關閉時,此事件將被觸發
                                      參數說明:event為事件對象,ui為當前插件對象
    close(event,ui)          事件          當dialog被關閉后,此事件將被觸發
    open(event,ui)          事件          當dialog被打開后,此事件將被觸發

可以根據上面的參數,編寫代碼。

用戶登錄提交到servlet進行判斷,所以我在這里創建了一個LoginServlet進行邏輯判斷

public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("uname");
        String pwd = request.getParameter("pwd");
        if("1".equals(name)&&"1".equals(pwd)){
            request.getSession().setAttribute("name",name);
            response.sendRedirect("/09jQueryUI/success.jsp");
        }else{
            response.sendRedirect("/09jQueryUI/index.jsp");
        }
    }

}

成功頁面把用戶名打印出來即可。。

<body>
      歡迎:<%=request.getSession().getAttribute("name") %>
</body>

上述的代碼就是一個簡單的dialog插件應用的小案例,你再也不用羡慕那些網站做的花哨的頁面了,因為你也可以的。。。。。

接下來我繼續講解下一個jQuery UI常用的插件,會是什么呢?來猜一猜,它就是tabs插件

tabs插件支持多種風格的選項卡模式,普通選項卡,帶子選項的選項卡,扁平風格的選項卡,響應式選項卡和手機選項卡等。

上述的支持文件我們就不再次講解了。

頁面的創建:

<body>
<div id="myTabs">
<ul>
   <li><a href="#firstTab">第一個</a></li>
   <li><a href="#secondTab">第二個</a></li>
   <li><a href="#thirdTab">第三個</a></li>
   
   
</ul>
   <div id="firstTab">第一個選項卡</div>
   <div id="secondTab">第二個選項卡</div>
   <div id="thirdTab">第三個選項卡</div>
</div>
</body>

<script></script>標簽內的代碼:

<script type="text/javascript">
   $(function(){
       $("#myTabs").tabs({
           //是否可以折疊   默認為false
           collapsible:true,
           //默認打開第幾個選項卡
           active:1,
           //點擊某個選項卡時觸發的事件
           activate:function(event,ui){
//改變內容 ui.newPanel.html(
"內容被改變了");
//輸出上一個選項卡的內容 alert(ui.oldPanel.html()); } }); });
</script>

你也可以在選項卡內在嵌套子選項卡,在這里就是做實現了,有想法的同學可以在閑余的時間試試。。。。

我們還要講點什么呢,總覺得缺少點東西是不是,對了還有menu插件呢?

menu:菜單的意思。

我們經常在上網的時候,有很多網站都有下拉列表框包含子類的效果,我們也可以做一個簡單的效果。。。。

頁面搭建:

<div >
   <ul id="menu">
     <li><a href="#">系統管理</a></li>
     <li><a href="#">市場管理</a></li>
     <li><a href="#">財務管理</a>
        <ul>
             
          <li class="ui-state-disabled"><a href="#">財務部</a></li>
          <li><a href="#">考核部</a></li>
        </ul>
     </li>
     <li><a href="#">產品管理</a>
        <ul>
          <li><a href="#">產品檢測部</a>
            <ul>
              <li><a href="#">產品合格</a></li>
              <li><a href="#">產品報廢</a></li>
            </ul>
          </li>
          <li><a href="#">產品銷售部</a>
            
          </li>
        </ul>
     </li>
   </ul>

</div>

<script></script>標簽內的代碼:

<script type="text/javascript">
   $(function(){
     
      $("#dialog").hide();
      $("#mydiv").mouseover(function(){
          $("#dialog").show();  
      });
      $("#mydiv").mouseout(function(){
          $("#dialog").hide();  
      }); 
      
      $("#menu").menu({
          //不可用 
         // disabled:true,
         //獲得焦點觸發的事件
          focus:function(){
            //當我們移動到任何選項上時,都會把整個下拉菜單變為不可用 
              $(this).menu("option","disabled",true);
          } 
          
      });     
      });
</script>
<style type="text/css">
.ui-menu{
width:120px;
}
 li{
   list-style-type: none;
 }
 #mydiv{
 width:120px;
 }
</style>

這里就可以實現下拉列表框的效果,下面的圖為常用的參數:

常用參數:
       屬性                 類型             說明
    Object icons         屬性            設置該組件使用菜單圖標
    Boolean disabled        屬性            設置菜單不可用
    option(String name)     方法            獲取指定選項的值
    expand([event])         方法            打開當前菜單項的子菜單
    focus(event,ui)         事件            當菜單獲取焦點或任何菜單項被打開時,觸發該事件

menu插件還能實現一種,外部引用的效果,在一個頁面通過點擊按鈕加載數據。。。。

頁面上的代碼:

<body>
<div>
   <ul id="menu">
        <li><a href="#">系統管理</a></li>
   </ul>
</div>
</body>

<script></script>標簽內的代碼:

 

<script type="text/javascript">
   $(function(){
      $("#menu").menu({
         select:function(){
             $.get("info.jsp",function(data){
                 $("#menu").append(data);
                 $("#menu").menu("refresh");
             });
         }
          
      });     
      });
</script>
<style type="text/css">
.ui-menu{
width:120px;
}
 li{
   list-style-type: none;
 }
</style>

引用頁面的代碼:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     <li><a href="#">市場管理</a></li>
     <li><a href="#">財務管理</a>
        <ul>
          <!-- 這里設置的屬性為不可用狀態 -->
          <li class="ui-state-disabled"><a href="#">財務部</a></li>
          <li><a href="#">考核部</a></li>
        </ul>
     </li>
     <li><a href="#">產品管理</a>
        <ul>
          <li><a href="#">產品檢測部</a>
            <ul>
              <li><a href="#">產品合格</a></li>
              <li><a href="#">產品報廢</a></li>
            </ul>
          </li>
          <li><a href="#">產品銷售部</a>
            
          </li>
        </ul>
     </li>
   

一個簡單的引用就是這樣實現了,再也不用為了那么絢麗的頁面而羡慕了。。。。。

最后講解一個我們經常碰到的情況,就是當我們在百度頁面或者必應頁面搜索資料時,往往你還沒打完,下面就會聯想出來一些相關的詞匯,是不是很智能呢?我們接下來講解的autocomplete插件就可以實現這個效果。

先來點理論的:

   語法:
       $(selector).autocomplete([settings]); 
       
       常用屬性:
           屬性                            說明
        String Source 或        用於指定數據來源,類型為String、Array、function
        Array Source 或         String:用於Ajax請求的URL地址,返回Array(JSON格式)
                                Array:即字符串數組 或 JSON數組
        function Source(        function(request, response):
         Object reuqest,        通過request.term獲得輸入的值(term為默認參數名),
        function response(      response([Array])用來呈現遠程數據
            Object data ))                       
                                
        Integer minLength        當輸入框內字符串長度達到minLength時,激活autocomplete
        
        Boolean autoFocus        當autocomplete選擇菜單彈出時,自動選中第一個
        
        Integer delay            即延遲多少毫秒激活autocomplete
        
        常用事件:
        事件                           說明
       focus(event,ui)             autocomplete的結果列表任意一項獲得焦點時觸發
                                 ui.item為獲得焦點的項
       
       select(event,ui)             autocomplete的結果列表任意一項選中時觸發
                                 ui.item為選中的項
       
       change(event,ui)             當值改變時觸發
                                 ui.item為選中的項

接下來一個小示例:

郵箱效果:

email 效果
    //准備數組存儲域名
      var hosts = ["126.com","gmail.com", "live.com", "hotmail.com", "yahoo.com", "cnblogs.com", "qq.com", "163.com"];
            $("#email").autocomplete({
                autoFocus: true,
                //定義資源函數
                source: function(request, response) {
                    var term = request.term, //request.term為輸入的字符串
                        ix = term.indexOf("@"),
                        name = term, // 用戶名
                        host = "", // 域名
                        result = []; // 結果

                    result.push(term);
                    if (ix > -1) {
                        name = term.slice(0, ix);
                        host = term.slice(ix + 1);
                    }
                    if (name) {
                        var findedHosts = (host ? $.grep(hosts, function(value) {
                            return value.indexOf(host) > -1;
                        }) : hosts),
                        findedResults = $.map(findedHosts, function(value) {
                            return name + "@" + value; //返回字符串格式
                       });
                        result = result.concat($.makeArray(findedResults));
                    }
                    response(result); //呈現結果
                }
            });
    
    <div><input type="text" id="email"/></div>

在這里解釋一下,上面用的我們陌生的方法:

解釋:
    grep方法

     使用過濾函數過濾數組元素。
     此函數至少傳遞兩個參數:待過濾數組和過濾函數。
     過濾函數必須返回 true 以保留元素或 false 以刪除元素。
     
     
     源碼分析:
     grep: function( elems, callback, inv ) {
     var ret = [], retVal;
     inv = !!inv;

    // Go through the array, only saving the items
    // that pass the validator function
        for ( var i = 0, length = elems.length; i < length; i++ ) {
             retVal = !!callback( elems[ i ], i );
             if ( inv !== retVal ) {
                 ret.push( elems[ i ] );
             }
        }

        return ret;
    }
    
    
    makeArray方法

    將類數組對象轉換為數組對象。
    類數組對象有 length 屬性,其成員索引為 0 至 length - 1。
    實際中此函數在 jQuery 中將自動使用而無需特意轉換。
    
    源碼分析:
    // results is for internal usage only
        makeArray: function( array, results ) {
           var ret = results || [];

           if ( array != null ) {
                // The window, strings (and functions) also have 'length'
                // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
                var type = jQuery.type( array );

                if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
                    push.call( ret, array );
                } else {
                    jQuery.merge( ret, array );
                }
           }

           return ret;
        },
        
        這里接受兩個參數,其中第二個參數是內部使用的,在源碼內部經常被調用作為其他方法的支持方法。
        創建一個新數組ret,如果只有一個參數則為空,如果存在第二個參數就把第二個參數賦值給ret,
        在array參數存在的前提下獲取其數據類型,如果數據類型為字符串、函數或者正則時或者不存在length屬性時,
        則假定array不是數組或者類數組,因為字符串、函數和正則(黑莓系統下)都是有length屬性的,
        所以只判斷length不准確,如果不是數組或者類數組就直接將第一個參數放入ret的末尾。
        如果通過了則認為是數組或者是類數組,此時調用merge方法將兩個數組合並,最后返回ret。

其實寫到這里,我們經常用得插件就差不多了,如果你還想繼續研究,可以搜索相關的博客。。。。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM