Jquery實現動態導航欄和輪播導航欄


動態導航欄和輪播導航欄的實現思想:

利用jquery技術的append()方法和bind()方法實現li標簽的添加和點擊事件綁定,在利用$getJSON(url,data,function)請求方法實現獲取springmvc傳遞的list<map<String,Object>>的值。其中還遇到了瀏覽器兼容問題,主要是Mozilla Firefox兼容margin屬性的值的問題,最后解決辦法是:創建2(IE和FireFox)種類型的css樣式,根據myBrowser()自定義方法判斷當前瀏覽器的類型,分配不同的css樣式。

輪播的思想:

設定2個下標變量,一個控制獲取list<map<String,Object>>值的起始位,一個控制list<map<String,Object>>值的結束位置。根據下標變量的值控制輪播按鈕的顯示。

 

遇到的bind()循環添加值添加最后一次循環值的問題,不過已經解決。解決辦法是將bind()里執行的function不要寫在循環里,值傳遞選好的值給functions就可以了。具體的看實現代碼。

以下代碼css部分是在項目中集成的樣式,如果要測試需要自己在修改下。

 

jquery代碼:

$(function () {
    /*獲取標簽的長度*/
    $("#main_center ul").width();
    /*獲取li標簽的個數
     var linum=$("#main_center ul li").length;
     //設定ul標簽的寬度
     var ulwidth=linum*100+50;

     $("#main_center ul").css("width",ulwidth);
     */
    navBar();
    function navBar() {
        //獲取json的導航欄數據信息
        $.getJSON("/Mybatis/navJson",function(data){
            /*總共導航欄的個數*/
            var linum=data.length;
            /*顯示的下標,balcknum代表結束位置,nonenum代表起始位置*/
            var blacknum=12;
            var nonenum=0;
            var gbutton='';
            var bbution='';
            if (myBrowser()=='FF'){
                gbutton="<button id=\"ff_goup\">>></button>";
                bbution="<button id=\"ff_back\"><<</button>";
            }
            if(myBrowser()=='IE'){
                gbutton="<button id=\"goup\">>></button>";
                bbution="<button id=\"back\"><<</button>";
            }
            /*添加導航欄信息顯示向后*/
            if(linum>12){

                //給按鈕綁定修改小標事件
                $("#main_center").append($(gbutton).bind("click",
                    function () {
                        //alert(blacknum+"  "+nonenum);
                        if (12 <= blacknum && blacknum < linum) {
                            /*下標同時加1*/
                            blacknum++;
                            nonenum++;
                        }
                        //控制按鈕的顯示和隱藏操作
                        backgoupHidden(blacknum,linum,nonenum);
                        //情況ul標簽里的信息
                        $("#main_center ul").empty();
                        //alert(blacknum+"  "+nonenum);
                        addNavBar(blacknum, nonenum);
//                //刷新當前頁面
//                window.location.reload();

                    }));

                //導航欄信息顯示的向前
                //給按鈕綁定修改小標事件
                $("#main_center").append($(bbution).bind("click",
                    function () {
                        //alert(blacknum+"  "+nonenum);
                        if(1<=nonenum && nonenum<linum){
                            /*下標同時加1*/
                            blacknum--;
                            nonenum--;
                        }

                        //控制按鈕的顯示和隱藏操作
                        backgoupHidden(blacknum,linum,nonenum);
                        //情況ul標簽里的信息
                        $("#main_center ul").empty();
                        //alert(blacknum+"  "+nonenum);
                        addNavBar(blacknum,nonenum);
//                //刷新當前頁面
//                window.location.reload();

                    }));
            }

            //導航欄初始化,必須執行第一次
            addNavBar(blacknum,nonenum);
            //按鈕初始化,必須先執行一次
            backgoupHidden(blacknum,linum,nonenum);
            //添加導航欄
            function addNavBar(blacknum,nonenum) {
                for(var i=0;i<=linum;i++){

                    if(nonenum<i && i<=blacknum){
                        
                        var j=i-1;
                        var li=$("<li class='licss'>"+data[j].name+"</li>");
                        li.bind("click",{j:j},liBind);
                        
                        /*顯示前10個li標簽*/
                        $("#main_center ul").append(li);
                    }
                }
            }
            
            //綁定事件,必須這樣寫,如果防止for循環里因為作用域的原因,會值執行最后一次的結果
            function liBind(event){
                var k=event.data.j;
                $("#main_bottom").empty();
                $("#main_bottom").append(data[k].url);
            }
            
            //控制導航欄兩邊的前進按鈕和后退按鈕的函數
            function backgoupHidden(blacknum,linum,nonenum) {
                /*必須使用visibility的css屬性,不可以使用display。因為display會消除按鈕占用的空間,
                 * visibility屬性不會消除按鈕占用的空間,執行隱藏和禁用了事件*/
                if(myBrowser()=='IE'){
                    if(blacknum==linum){
                        //隱藏goup
                        $("#goup").css("visibility","hidden");
                    }else {
                        //顯示goup
                        $("#goup").css("visibility","visible");
                    }
                    if(nonenum==0){
                        //隱藏back
                        $("#back").css("visibility","hidden");
                    }else {
                        //顯示back
                        $("#back").css("visibility","visible");
                    }
                }

                if(myBrowser()=='FF'){
                    if(blacknum==linum){
                        //隱藏goup
                        $("#ff_goup").css("visibility","hidden");
                    }else {
                        //顯示goup
                        $("#ff_goup").css("visibility","visible");
                    }
                    if(nonenum==0){
                        //隱藏back
                        $("#ff_back").css("visibility","hidden");
                    }else {
                        //顯示back
                        $("#ff_back").css("visibility","visible");
                    }
                }
            }
        });


    }
    //判斷瀏覽器的類型解決兼容性問題
    function myBrowser(){
        var userAgent = navigator.userAgent; //取得瀏覽器的userAgent字符串
        var isOpera = userAgent.indexOf("Opera") > -1;
        if (isOpera) {
            return "Opera"
        }; //判斷是否Opera瀏覽器
        if (userAgent.indexOf("Firefox") > -1) {
            return "FF";
        } //判斷是否Firefox瀏覽器
        if (userAgent.indexOf("Chrome") > -1){
            return "Chrome";
        }
        if (userAgent.indexOf("Safari") > -1) {
            return "Safari";
        } //判斷是否Safari瀏覽器
        if (!!window.ActiveXObject || "ActiveXObject" in window) {
            return "IE";
        }; //判斷是否IE瀏覽器
    }

});

springmvc響應java代碼:

/**
         * 查詢導航欄信息
         * @return List<Map<String,Object>>
         */
        @ResponseBody
        @RequestMapping("/navJson")
        public List<Map<String,Object>>  getNavJson(){
            //聲明map集合
            List<Map<String,Object>> mlist=new ArrayList<Map<String,Object>>();
            //添加map數據
            Map<String,Object> map=new HashMap<String,Object>();
            map.put("name", "流程申請");
            map.put("url", "<iframe src=\"/Mybatis/query1\" width=\"100%\" height=\"100%\"></iframe>");
            mlist.add(map);
            Map<String,Object> map1=new HashMap<String,Object>();
            map1.put("name", "用戶查詢");
            map1.put("url", "<iframe src=\"/Mybatis/query2\" width=\"100%\" height=\"100%\"></iframe>");
            mlist.add(map1);
            Map<String,Object> map2=new HashMap<String,Object>();
            map2.put("name", "流程查詢");
            map2.put("url", "<iframe src=\"/Mybatis/query3\" width=\"100%\" height=\"100%\"></iframe>");
            mlist.add(map2);
            
            //多添加幾個,測試輪播
            for(int i=0;i<20;i++){
                Map<String,Object> map3=new HashMap<String,Object>();
                map3.put("name", "導航欄測試");
                map3.put("url", "<iframe src=\"/Mybatis/query3\" width=\"100%\" height=\"100%\"></iframe>");
                mlist.add(map3);
            }
            
            
            return mlist;
        }

 

jsp頁面代碼:

<%@ 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">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>主頁面</title>
</head>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<style type="text/css">
    @import url(css/main.css);
</style>


<body>
<div id="mian_top">
    <span>歡迎使用網上繳費系統!</span>
    <div id="main_top_login">
    <img id="head" src="img/01.jpg"/><br/>
        <span>歡迎${cname}</span>
    </div>
</div>
<div id="main_center">
    <ul>
    </ul>
</div>
<div id="main_bottom">

</div>
<p id="comp">@大中華科技有限公司@</p>
</body>

<script type="text/javascript" src="js/jquery.js">
</script>
<script type="text/javascript" src="js/main_navBar.js">
</script>
<script type="text/javascript">
</script>
</html>

css樣式代碼:

@import url(html.css);
body{
    height: 98%;
    margin: 0px;
    padding: 0px;
}

#mian_top{
    border: 1px solid #b82929;
    width: 95%;
    margin: 0px auto;
    height: 15%;
    background:linear-gradient(#b82929, #62ec37);
    background: -webkit-linear-gradient(top,#b82929,#62ec37);
    background: -moz-linear-gradient(top,#b82929,#62ec37);
}
#mian_top span:first-child{
    font-size: 40px;
    margin-top: 30px;
    position: absolute;
}
#main_top_login{
    width: 200px;
    position:absolute;
    margin-left: 85%;
    margin-top: 6px;
}
#main_center{
    height: 5%;
    width: 95%;
    margin: 0px auto;
    border: 1px solid #b82929;
    background:linear-gradient(#b82929,#e4e8ec);
    background: -webkit-linear-gradient(top,#b82929,#e4e8ec);
    background: -moz-linear-gradient(top,#b82929,#e4e8ec);
   
}
#main_center ul{
    margin-left: 3px;
    margin-right: 15px;

}
/*導航欄前進按鈕的css樣式*/
#goup{
    position: absolute;
    margin-left: 1253px; ;
    margin-top: -13px;
    color: #030515;
    border: 0px;
    background:linear-gradient(#b82929,#e4e8ec);
    background: -webkit-linear-gradient(top,#b82929,#e4e8ec);
    background: -moz-linear-gradient(top,#b82929,#e4e8ec);
}
/*支持火狐瀏覽器*/
#ff_goup{
    position: absolute;
    margin-left: 3px;
    margin-top: -13px;
    color: #030515;
    border: 0px;
    background:linear-gradient(#b82929,#e4e8ec);
    background: -webkit-linear-gradient(top,#b82929,#e4e8ec);
    background: -moz-linear-gradient(top,#b82929,#e4e8ec);
}
/*導航欄后退按鈕的css樣式*/
#back{
    position: absolute;
    margin-left: 3px; ;
    margin-top: -13px;
    color: #030515;
    border: 0px;
    background:linear-gradient(#b82929,#e4e8ec);
    background: -webkit-linear-gradient(top,#b82929,#e4e8ec);
    background: -moz-linear-gradient(top,#b82929,#e4e8ec);
}

/*支持火狐瀏覽器*/
#ff_back{
    position: absolute;
    margin-left: -1240px;
    margin-top: -13px;
    color: #030515;
    border: 0px;
    background:linear-gradient(#b82929,#e4e8ec);
    background: -webkit-linear-gradient(top,#b82929,#e4e8ec);
    background: -moz-linear-gradient(top,#b82929,#e4e8ec);

}

/*導航欄里li標簽的css樣式*/
.licss{
    float: left;
    position: relative;
    margin-top: -10px;
    margin-bottom: 5px;
    width: 100px;
    height: 20px;
    text-align: left;
    list-style: none;
    color:#2820B8;
}
#main_bottom{
    height: 75%;
    width: 95%;
    margin: 0px auto;
    border: 1px solid #b82929;
}
#comp{
    position: relative;
    margin-left: 40%;
}
#head{
    height: 65px;
    width: 65px;

}

上面css代碼引用的html.css

/*判斷客戶機的屏幕大小來確定html的寬度*/
@media  screen and(min-width:1000px){
    html{
        /*設定好html的高度這樣就可以避免div的高度自動變化*/
        width: 1300px;
    }
}
/*判斷客戶機的屏幕大小來確定html的寬度*/
@media  screen and(min-width:800px){
    html{
        /*設定好html的高度這樣就可以避免div的高度自動變化*/
        width: 1300px;
    }
}
html{
    height: 650px;
    width: 1360px;
    margin: 0px auto;
    position: absolute;
}


效果圖片:

 輪播效果:

第一個導航欄顯示情況

中間導航欄顯示

 

 

到達最后一個導航欄顯示

 

 

不需要輪播顯示的情況:

 


免責聲明!

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



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