前言
上一篇博客介绍了如何用编程写出菜单栏的效果,这篇博客给大家介绍一下如何做出标签页的效果。
内容
显示效果
HTML代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jQuery实践4-标签页效果</title>
<script src="script/jquery-1.8.2.js"></script>
<script src="script/table.js"></script>
<link href="CSS/table.css" rel="stylesheet" />
</head>
<body>
<ul id="tabfirst">
<li class="tabin">标签1</li>
<li>标签2</li>
<li>标签3</li>
</ul>
<div class="contentin contentfirst">我是内容1</div>
<div class="contentfirst">我是内容2</div>
<div class="contentfirst">我是内容3</div>
<br />
<br />
<br />
<br />
<br />
<br />
<ul id="tabsecond">
<li class="tabin">装入完整页面</li>
<li>装入部分页面</li>
<li>从远程获取数据</li>
</ul>
<div id="contentsecond">
<img alt="装在中..." src="img/标签页效果/img-loading.gif" />
<div id="realcontent">我是内容1</div>
</div>
</body>
</html>
CSS代码:
ul, li {
margin: 0;
padding: 0;
list-style: none;
}
#tabfirst li {
float: left;
background-color: #868686;
color: white;
padding: 5px;
margin-right: 2px;
border: 1px solid white;
}
#tabfirst li.tabin {
background-color: #6E6E6E;
border: 1px solid #6E6E6E;
}
div.contentfirst {
clear: left;
background-color: #6E6E6E;
color: white;
width: 300px;
height: 100px;
padding: 10px;
display: none;
}
div.contentin {
display: block;
}
#tabsecond li {
float: left;
background-color: white;
color: blue;
padding: 5px;
margin-right: 2px;
cursor: pointer;
}
#tabsecond li.tabin {
background-color: #F2F6FB;
border: 1px solid black;
border-bottom: 0;
z-index: 100;
position: relative;
}
#contentsecond {
width: 500px;
height: 200px;
padding: 10px;
background-color: #F2F6FB;
clear: left;
border: 1px solid black;
position: relative;
top: -1px;
}
img {
display: none;
}
JavaScript代码:
var timoutid;
$(document).ready(function () {
////找到所有的标签li
//$("li").mouseover(function () {
// //将原来显示的内容区域进行隐藏
// $("div.contentin").hide();
// //当前标签所对应的内容区域显示出来
//});
$("#tabfirst li").each(function (index) {
//每一个包装li的jQuery对象都会执行function中的代码
//index是当前执行这个function代码的li对应在所有li组成的数组中的索引值
//有了index的值之后,就可以找到当前标签对应的内容区域
$(this).mouseover(function () {
var liNode = $(this);
timoutid = setTimeout(function () {
//将原来显示的内容区域进行隐藏
$("div.contentin").removeClass("contentin");
//还要之前有tabin的class定义的li清除tabin的class
$("#tabfirst li.tabin").removeClass("tabin");
//当前标签所对应的内容区域显示出来
//$("div.contentfirst").eq(index).addClass("contentin");
$("div.contentfirst:eq(" + index + ")").addClass("contentin");
liNode.addClass("tabin");
}, 300);
}).mouseout(function () {
clearTimeout(timoutid);
});
});
//在整个页面装入完成后,标签效果2的内容区需要装入静态的html页面内容
$("#realcontent").load("jQuery实践1-用户名校验.html");
//找到标签2效果对应的是哪个标签,注册鼠标点击事件
$("#tabsecond li").each(function (index) {
$(this).click(function () {
$("#tabsecond li.tabin").removeClass("tabin");
$(this).addClass("tabin");
if (index == 0) {
//装入静态完成页面
$("#realcontent").load("TabLoad.html");
} else if (index == 1) {
//装入动态部分页面
$("#realcontent").load("TabLoad.jsp h2");
} else if (index == 2) {
//装入远程数据(这里也是一个动态页面输出的数据)
$("#realcontent").load("TabLoad.jsp");
}
});
});
//对于loading图片绑定ajax请求开始和交互结束的事件
$("#contentsecond img").bind("ajaxStart", function () {
//吧div里面的内容清空
$("realcontent").html("");
//整个页面中任意ajax交互开始前,function中的内容会被执行
$(this).show();
}).bind("ajaxStop", function () {
//整个页面中任意ajax交互结束后,function中的内容会被执行
$(this).slideUp("1000");
});
});
这次代码稍微有点长,但是对于一目十行的大神们来说这都不算啥 (^.^)!!!
总结
HTML知识点:
- 一组标签用一个ul来管理,每一个标签是ul中的一个li;标签下面的内容就是用div来管理
CSS知识点:
- 跟在浮动元素(float)之后的元素会围绕着浮动元素之后的那个元素上定义clear属性,来清除这种效果
- 实现当前标签和内容区域的融合,可以通过使用相同的背景色,外加当前标签使用同颜色的边框来实现
JavaScript知识点:
- jQuery中的mouseover,mouseout方法对应表中javascript的onmouseover,onmouseout事件,可以处理鼠标进入和离开的事件
- 在一个包含了多个元素的jQuery对象上执行each方法,可以注册给each方法的那个function的内容被每一个元素执行。同时这个function还可以接收到一个参数,表示这个元素的索引值,jQuery中的很多方法也用到了each
- eq方法可以根据索引值只得到jQuery对象中包含的多个元素中的某一个元素,并仍然返回元素对应新jQuery对象
- 选择器中使用eq,例如$(“div:eq(1)”)
- addClass和removeClass方法用于添加和移除元素的class定义
- JavaScript中的setTimeOut方法可以延时执行某些代码,对应的clearTimeout可以清除设定的延时操作
- 做一个AJAX应用的时候,可以考虑现在FireFox上调试通过,然后再到其他浏览器中进行检查,并修正可能的兼容性问题
- cursor属性可以控制元素上的鼠标样式,pointer的属性值表示手型样式,也就是我们常见的链接鼠标样式
- position属性可以控制元素定位的方式,值为relative时,表示相对原来的位置进行定位。可以通过设定top、left、bottom、right的值来控制元素相对原来的位置进行移动
- z-index可以控制元素在页面中的层高,值越大就会在页面的层越靠前,也就会覆盖住一些z-index值较低的元素。只有position的值为relative或absolute的元素,z-index才会生效
- jQuery中的load方法十分强大,可以把一个指定的静态、动态页面或服务器段程序输出的数据装入到执行load方法的jQuery对象包装着的元素中
- load方法还支持部分装载,在装入的页面地址后面加空格,然后使用选择器,就可以把页面中符合选择器的部分装入进来
- 被load的页面一定要是UTF-8编码,否者装入后中文会出现乱码
- bind可以用于给指定的节点绑定JavaScript的事件或jQuery中定义的事件,对于jQuery中没有直接提供注册方法的事件,可以用这种方式注册。方法的第二个参数可以是事件执行的方法定义
- ajaxStart、ajaxStop对应ajax交互开始前和结束后的事件,给某一个节点注册了这两个事件后,当前页面的ajax交互开始前和结束后,就会执行指定的方法
end
谢谢您的阅读!