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;
}
效果图片:
轮播效果:
第一个导航栏显示情况
中间导航栏显示
到达最后一个导航栏显示
不需要轮播显示的情况:
Jquery实现动态导航栏和轮播导航栏的更多相关文章
- 分享jquery实现百叶窗特效的图片轮播
首先非常感谢网友嘉翼的无私分享,这是他刚在网站扣下来的特效,第一时间与大家分享,jquery实现百叶窗特效的图片轮播 使用方法: 1.引用css文件,css文件里面已经做了注释,基本只需要修改宽高就好 ...
- jQuery与原生js实现banner轮播图
jQuery与原生js实现banner轮播图: (jq需自己加载)(图片需自己加载) <!DOCTYPE html> <html> <head> <meta ...
- EasyMvc入门教程-基本控件说明(10)图片轮播导航
图片轮播导航大家一定很常见,尤其是中小型建站系统的必备神器..:) 先上图上例子,看效果如下: 实现代码如下: @{ var data = new List<PhotoPlayerItem> ...
- BootStrap学习(三)——重写首页之导航栏和轮播图
1.按钮 1)帮助文档:http://v3.bootcss.com/css/#buttons 2).btn-lg..btn-sm..btn-xs可以设置按钮的不同尺寸 3).active类设置按钮的激 ...
- 微信小程序开发小技巧——单击事件传参、动态修改样式、轮播样式修改等
一. 脚本部分: 1. 表达式无效的处理: 如果你发现自己编写的表达式无效或者数据不展示,那么请先检查你的表达式是否有添加{{}},小程序中全部都要添加的,只要是在模板中调用js中的数据 2. 获取元 ...
- Android中使用ImageViewSwitcher实现图片切换轮播导航效果
前面写过了使用ViewFlipper和ViewPager实现屏幕中视图切换的效果(ViewPager未实现轮播)附链接: Android中使用ViewFlipper实现屏幕切换 Android中使用V ...
- 用jQuery基于原生js封装的轮播
我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...
- axure 动态面板制作图片轮播 (01图片轮播)
利用Axure的动态面板组件制作图片轮播: 首先现在操作区添加一个动态面板组件: 鼠标放在动态面板上,右键单击选择面板状态管理,给动态面板设置名称并添加两条状态然后点击确定. 双击动态面板,然后双击s ...
- swiper轮播问题之一:轮播图内容为动态数据生成时轮播图无法自动轮播
本人在用H5做移动端项目中使用Swiper遇到的两个问题,因此加深了对Swiper的掌握,分享出来对刚开始接触Swiper的童鞋们或多或少会有帮助. 首先,new Swiper的初始化最 ...
随机推荐
- k8s部署nginx集群
环境: 两台虚拟机, 10.10.20.203 部署docker.etcd.flannel.kube-apiserver.kube-controller-manager.kube-scheduler ...
- 创建一个动态Web项目:
开始你的Eclipse,然后进入“文件”>“新建”>“动态Web项目,然后输入项目名称为HelloWorldStruts2和设置其他的选项,在下面的屏幕: 选择在屏幕上的所有默认选项,最后 ...
- saltstack之软件管理
1.installed安装软件包 例: 安装NFS /srv/salt/pkg/nfs.sls nfs: pkg.installed: - pkgs: - nfs-utils 在命令行执行如下 sal ...
- 7月份计划-----dream
梦想还是要有的,万一实现了呢? 数学 150[total] 专业课 150[total] 英语 100[total] 政治 100[total] 第一轮复习计划开始执行 1.专业课: 通过课件把所有的 ...
- 自定义TextView带有各类.ttf字体的TextView
最近项目遇到了将普通文字转化为带有字体样式的文字,这里就涉及到了.ttf文件,我上网百度了不少资料最终终于实现了,现在想想其实并不复杂 1,你需要下载一种.ttf字体文件,你可以从网上找到一种字体的. ...
- Unity3d监听手机暂停与退出事件
做移动互联网类型的开放,很多情况得考虑移动设备的暂停与退出时,做某些数据操作或UI. 1,退出事件,Unity3d,InPut就包含了: Input.GetKey(KeyCode.Escape) . ...
- 执行动态的delphi脚本
相关资料:https://www.cnblogs.com/linyawen/archive/2011/10/01/2196950.html 如何在程序中执行动态生成的Delphi代码 经常发现有人提这 ...
- mybatis generator的用法
1 自动生成代码 配置数据库 自动生成三个文件: 第一,java bean文件: 第二,java bean对应的dao文件,但是这里的dao只是一个接口: 第三,mybatis需要的Mapper文件: ...
- iOS框架你了解多少?
1.iOS 系统可以分为以下四层,每个框架对应IOS系统里的一层,每层建立在它下面层的上面.应该尽量使用上层的框架来代替下面的框架.更高层次的框架是对底层框架基于对象的抽象.以下列出几个iOS开发的常 ...
- 我的Android进阶之旅------>android:drawableLeft的用法
有时候想在EditText左边放一个图片,如图所示: 就可以在xml布局文件中的EditText定义代码中,添加入下面的代码,即可实现: android:drawableLeft="@dra ...