jQuery实现标签页效果实战(4)


Posted in Javascript onFebruary 08, 2017

今天我们来完成《jQuery实战》系列的标签页效果。先来看一看效果图

jQuery实现标签页效果实战(4)

这里有两部分的内容,上面是一个标签页的效果,下面也是一个标签页的效果。在实际应用中也经常会见到标签页的效果,它的作用主要是在页面可视区有限的情况下展示更多的内容。当用户想看其他内容的时候不需要离开页面,只需要把鼠标移动到某一个标签上就可以看到这个标签里面所对应的内容。门户网站的首页,有很多频道都是标签页的最佳案例,如体育、财经、军事等模块都是位于不同的标签上。上边的标签页一般称为滑动门技术,下面的内容是一次性加载进来,鼠标移动到某个标签之后,下面的内容就跟着显示对应的内容,不需要加载页面。而下面的标签页选用另一种写法,这是通过其他页面load进来的,当你滑动到某个标签的时候,加载对应的页面。

好了,开始编写我们的代码,首先是编写html页面”tab.jsp”。

<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>  
</body>

一般标签我们都用ul和li来表示,每个li代表一个标签,里面有三个li,分别是标签1,标签2,标签3,下面内容区域是3个div,这三个div是预先装载进来的。这时候的基本骨架已经完成,接下来编写css代码。
第一步把ul里面的li改造为标签的效果。回忆上节的课程,li默认是纵向的效果,我们想把它变成横向用清楚li的特征,然后让其float漂移达到相应的效果。

$(document).ready(function() {
  $("#tabfirst li").mouseover(function() {
    //1.将原来深颜色的li去掉
    $(".tabin").removeClass("tabin");
    //2.将原来显示的div隐藏
    $(".contentin").removeClass("contentin");
    //3.计算鼠标点中哪一个li
    var chooseStr = $(this).html();
    var index = 0;
    if("标签1" == chooseStr) {
      index = 0;
    } else if("标签2" == chooseStr) {
      index = 1;
    } else if("标签3" == chooseStr) {
      index = 2;
    }
    //4.将对应的div显示和对应的li加深
    $("#tabfirst li:eq("+index+")").addClass("tabin");
    $("div.contentfirst:eq("+index+")").addClass("contentin");
  });
});

这里的mouseover()函数的含义是当鼠标进入li时执行函数里面的代码。函数里面的代码先将原来深颜色的li去掉,然后将原来显示的div隐藏,计算鼠标点中哪一个li赋值在index变量中,最后对应的div显示和对应的li加深和将对应的div显示。

下面的标签页思路一样,真个完整的html页面如下:

<%@ 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">
<link type="text/css" rel="stylesheet" href="../css/tab.css" rel="external nofollow" />
<script type="text/javascript" src="../js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="../js/tab.js"></script>
<title>jQuery实战:tab页签</title>
</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 />
  <ul id="tabsecond">
    <li class="tabin">装入完整页面</li>
    <li>装入部分页面</li>
    <li>从远程获取数据</li>
  </ul>
  <div id="contentsecond">
    <img alt="装载中" src="../image/img-loading.gif" />
    <div id="realcontent"></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;
}

jQuery代码如下:

/**
 * tab页面模块的js代码
 */

$(document).ready(function() {
  $("#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").eq(index).addClass("contentin");
        $("div.contentfirst:eq(" + index + ")").addClass("contentin");
        liNode.addClass("tabin");  
      },300);     
    }).mouseout(function(){
      clearTimeout(timoutid); 
    });
  });

  //在整个页面装入完成后,标签效果2的内容区域需要装入静态的html页面内容
  $("#realcontent").load("../jsp/tabLoad.html");
  //找到标签2效果对应的三个标签,注册鼠标点击事件
  $("#tabsecond li").each(function(index){
    $(this).click(function(){
      $("#tabsecond .tabin").removeClass("tabin");
      $(this).addClass("tabin");

      if(0 == index) {
        $("#realcontent").load("../jsp/tabLoad.html");
      } else if(1 == index) {
        $("#realcontent").load("../jsp/tabLoad1.html h2");
      } else if(2 == index) {
        $("#realcontent").load("/JqueryStudy/tabServlet");
      }
    });
  });

  //对于loading图片绑定ajax请求开始和交互结束的事件
  $("#contentsecond img").bind("ajaxStart",function(){
    $("#realcontent").html("");
    $(this).show();
  }).bind("ajaxStop", function(){
    $(this).slideUp("1000");
  });
});

代码参考地址:https://github.com/shizongger/JqueryInAction

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

参考资料:
1. 王兴奎《jQuery实战》
2. w3school

Javascript 相关文章推荐
js静态作用域的功能。
Dec 25 Javascript
JavaScript计划任务后台运行的方法
Dec 18 Javascript
JavaScript正则表达式的分组匹配详解
Feb 13 Javascript
全面解析Bootstrap中transition、affix的使用方法
May 30 Javascript
VUEJS实战之修复错误并且美化时间(2)
Jun 13 Javascript
基于JavaScript代码实现自动生成表格
Jun 15 Javascript
form表单转Json提交的方法(推荐)
Sep 23 Javascript
js遮罩效果制作弹出注册界面效果
Jan 25 Javascript
详解用webpack把我们的业务模块分开打包的方法
Jul 20 Javascript
three.js实现炫酷的全景3D重力感应
Dec 30 Javascript
vue实现购物车加减
May 30 Javascript
Vue如何基于vue-i18n实现多国语言兼容
Jul 17 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
Feb 08 #Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
Feb 08 #Javascript
jQuery实现级联下拉框实战(5)
Feb 08 #Javascript
webpack入门+react环境配置
Feb 08 #Javascript
JavaScript实现鼠标点击导航栏变色特效
Feb 08 #Javascript
jQuery实现优雅的弹窗效果(6)
Feb 08 #Javascript
JavaScript中的子窗口与父窗口的互相调用问题
Feb 08 #Javascript
You might like
用PHP制作静态网站的模板框架(四)
2006/10/09 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
php中字符串和正则表达式详解
2014/10/23 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
window.ActiveXObject使用说明
2010/11/08 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
JavaScript中的正则表达式简明总结
2014/04/04 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
js获取地址栏中传递的参数(两种方法)
2017/02/08 Javascript
Vue组件开发初探
2017/02/14 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
python使用正则筛选信用卡
2019/01/27 Python
OpenCV 边缘检测
2019/07/10 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
浅析PyCharm 的初始设置(知道)
2020/10/12 Python
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
教导主任竞聘演讲稿
2014/05/16 职场文书
企业文化标语大全
2014/06/10 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
未婚证明范本
2015/06/15 职场文书