JavaScript之tab面板切换

自己写了一个tab选项卡的切换,感觉还不错,跟大家分享一下。

一、点击切换

页面效果:

html页面:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>tab面板切换</title>
        <style>
            .content{width: 1000px;height: 500px;margin: 0 auto;border: 1px solid #ccc}
            #sel_ul{width: 100%;text-align: center;overflow: hidden;border: 1px solid #ccc;}
            #sel_ul li{display: inline-block;width: 75px;height: 75px;border-right: 1px solid #ccc;cursor: pointer;}
            img{width: 100%;height: auto;}
            .banner{width: 1000px;height: 400px;display: none;}
            .on{display: block;}
        </style>
    </head>
    <body>
        <div class="content">
                <div id="sel_ul">
                    <li><img src="img/shap_1.png" ></li>
                    <li><img src="img/shap_3.png" ></li>
                    <li><img src="img/shap_4.png" ></li>
                </div>
                <div class="banner on">aaaa</div>
                <div class="banner">bbbb</div>
                <div class="banner">cccc</div>

        </div>
        </body>
</html>

js:

var ChangeNode=function(b_img_src,g_img_src,target,banner_t)
            {
                this.blue_img_src=b_img_src;//点亮的图片
                this.gray_img_scr=g_img_src;//未点亮的灰色图片
                this.img_li=target;//包含img标签的li容器
                this.banner_tartet=banner_t;//banner面板

            }
            /*
             @news:新的ChangeNode对象
             @old:与news相对
             * */
            function changeImg(news,old)
            {
                if(old!=null)
                {
                      old.img_li.querySelector("img").src=old.gray_img_scr;
                      old.banner_tartet.className="banner";
                }
                news.img_li.querySelector("img").src=news.blue_img_src;
                news.banner_tartet.className="banner on";
            }
            (function(){

                if(document.getElementById){
                    if(!document.getElementById("sel_ul")){
                        return false;
                    }
                }
                var sel_ul=document.getElementById("sel_ul"),
                    sel_li=sel_ul.querySelectorAll("li"),
                    li_len=sel_li.length || sel_ul.childNodes.length,//获取子元素的长度
                    banner_list=document.querySelectorAll(".banner");

                var changeImgFooPool=new Array();
                changeImgFooPool[0]=new ChangeNode("img/shap_1_sel.png","img/shap_1.png",sel_li[0],banner_list[0]);
                changeImgFooPool[1]=new ChangeNode("img/shap_3_sel.png","img/shap_3.png",sel_li[1],banner_list[1]);
                changeImgFooPool[2]=new ChangeNode("img/shap_4_sel.png","img/shap_4.png",sel_li[2],banner_list[2]);

                var index=-1;
                for(var i=0;i<li_len;i++){
                    index=index+1;
                    sel_li[i].setAttribute("index",index);
                }
                var currentTarget=null;
                currentTarget=changeImgFooPool[0];
                changeImg(currentTarget,null);

                sel_ul.onclick=function(e){

                    var evt=e||window.event;
                    var target=evt.target||evt.srcElement;

                   var temp=null;
                   if(target.nodeName.toLowerCase()=="img"){
                            for(var i=0;i<li_len;i++) {
                                if(target.parentNode==changeImgFooPool[i].img_li){
                                    temp=changeImgFooPool[i];
                                    break;
                                }
                            }
                       changeImg(temp,currentTarget);
                       currentTarget=temp;
                   }
                }
            })();

二、鼠标滑过切换

页面预览:

页面代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>tab滑过切换</title>
        <style>
        *{
            padding: 0;
            margin: 0 auto;
        }
        ul ,li{list-style: none;}
            .all{
                width: 280px;
                height: 150px;
                border: 1px solid #666666;
            }
            .notic-tit{
                width: 280px;
                height: 40px;
                line-height: 40px;
                background: #CCCCCC;
                font-size: 16px;
                text-align: center;
            }
            .notic-tit ul li{
                float: left;
                width: 68px;
                height:39px;
                border-bottom: 1px solid #CCCCCC;
                padding: 0 1px;
            }
            .notic-tit ul li.select{
                background: white;
                font-weight: bolder;
                border-left: 1px solid #ccc;
                border-right: 1px solid #ccc;
                border-bottom-color:white ;
                color: orange;
                padding: 0;
            }
            .content-inner{ width: 280px;margin: 20px;}
        </style>
    </head>
    <body>
        <div class="all">
        <div class="notic-tit">
            <ul>
                <li class="select"><a>娱乐</a></li>
                <li ><a>体育</a></li>
                <li ><a>购物</a></li>
                <li ><a>美食</a></li>
            </ul>
        </div>
        <div id="content">
            <div class="content-inner" style="display: block;">
                <p>呵呵而后 娱乐</p>
            </div>
            <div class="content-inner" style="display: none;">
                <p>呵呵而后 体育</p>
            </div>
            <div class="content-inner" style="display: none;">
                <p>呵呵而后 购物</p>
            </div>
            <div class="content-inner" style="display: none;">
                <p>呵呵而后 美食</p>
            </div>
        </div>
        </div>
        <script>
            window.onload=function(){
                var notic_tit=document.querySelector(".notic-tit");
                var li=notic_tit.getElementsByTagName("li");
                var content_inner=document.getElementsByClassName("content-inner");
                for(var i=0;i<li.length;i++){
                    li[i].id=i;
                    li[i].onmouseover=function(){
                        for(var j=0;j<li.length;j++){
                            li[j].className="";
                            content_inner[j].style.display="none";
                        }
                        this.className="select";
                        content_inner[this.id].style.display="block";
                    }
                }
            }
        </script>
    </body>
</html>

因为js没有像jQuery有addClass,removeClass之类的方法,我在网上看到用js实现这方面的方法,记录一下,方便以后使用。

function addClass(obj, cls) {
      if (!this.hasClass(obj, cls)) {
           obj.className += " " + cls;
     }
}
function hasClass(obj, cls) {
           return obj.className.match(new RegExp(‘(\\s|^)‘ + cls + ‘(\\s|$)‘));
}
function removeClass(obj, cls) {
        if (hasClass(obj, cls)) {
          var reg = new RegExp(‘(\\s|^)‘ + cls + ‘(\\s|$)‘);
          obj.className = obj.className.replace(reg, ‘ ‘);
       }
}
时间: 2024-12-26 16:52:47

JavaScript之tab面板切换的相关文章

每天一个JavaScript实例-tab标签切换

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-tab标签切换</title> <style> .tabcontainer{ padding:5px; width:500px; marg

html+css+jQuery+JavaScript实现tab自动切换功能

tab1.html内容 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>tab选项卡</title> <style> * { margin: 0; padding: 0; } ul,li { list-style: none; } body { background-color: #323232; font-size: 12px;

JavaScript实现Tab栏切换

本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 京东网页上,可以看到下面这种tab栏的切换: 我们把模型抽象出来,实现一下. 举例引入:鼠标悬停时,current元素的背景变色 本段我们先举一个例子,因为这里用到了排他思想(先干掉 all,然后保留我一个).对于理解tab切换,很有帮助. 完整的代码实现: <!DOCTYPE html> <html> <head lang="en&quo

javascript 实现tab菜单切换

<!DOCTYPE html> <html> <head> <title></title> </head> <body style="text-align:center;margin-top:150px;"> <div class="tabs" id="tabs"> <span style="color:red;" >t

12.1 Tab菜单与Tab面板简介

这里所说的高级网页组件是指一些网页上的比较复杂的用户界面,例如Tab面板.伸缩面板和折叠面板等组件. Tab风格的面板一直受到广大周站制作者的青昧.Tab面板有时被称为“选项卡”面板,使用鼠标点击各个Tab选项卡就可以在不同页之间切换. 随处可见各式各样的Tab菜单,网易网站首页上可以看到的Tab面板,网址是http://www.163.com. 微软网站上的Tab菜单,网址是http://office.microsoft.com. 网页学习网http://www.lodidance.com首页

12.3 借助于Spry实现Tab面板

前面说过,如果要实现一个真正的Tab菜单,需要JavaScript配合,开发起来必须有JavaScript的使用经验.没有JavaScript经验的设计师可以借助于Adobe公司2007年春天发布的Dreamweaver CS3中新增加的Spry功能来方便地实现. 在本案例中,我们最终实现的效果如图1所示.当用鼠标单击某个Tab时,就会切换到该Tab页. 本实例的文件位于网页学习网CSS教程资源“第12章\02\tab.htm”.该目录下还有一个tab-hover.htm文件. 二者的区别是,在

利用target的特性,可以实现纯css的tab效果切换

基础知识: :target起作用的是href连接到的位置 如 <a href="#tab1">tab1</a> <div id="tab1" class="tab">This is a tab1</div> :target{ color:red; } 但点击a标签的时候,连接到id是tab1的div,对这个div起作用color:red; 如: <a href="#tab"

Jq 复选框、单选框取值操作、面板切换、cook

今天遇到这么几个问题: 1.$().map(); map() 把每个元素通过函数传递到当前匹配集合中,生成包含返回值的新的 jQuery 对象. 2 选择器(: >) :是指定type  :input <input>元素 .radio  type="radio"的元素3.$('div :checkbox').each(function (){}) 就是遍历 div获取的每个值5.Jq只能用一次,就哟不了-->(只能触发一次单击事件) 我的循环使用调用2.0估计就

Axure实现Tab选项卡切换功能

这几天用Axure画原型图的过程中,需要实现Tab选项卡切换的效果,但Axure中并没有类似于Tab控件的部件,所以可以用Axure中的动态面板(Dynamic Panel)来实现. 本文以已经汉化的Axure7.0为例,英语不太好的朋友可以先进行汉化(汉化的时候要注意版本,不同的版本,汉化文件也稍有差异). 具体实现步骤如下: 1.往页面中拖入一个动态面板部件: 2.给该动态面板部件添加几个状态: 操作方法为:双击该动态面板,点击左侧的加号添加状态,这里把四个添加的状态名称改为"选项卡1.选项