javascript滑动门的实现方法和案例

首先我们知道js滑动门的三种实现思路:

-自定义方法

-闭包

-自定义属性

那么写个列子分析一下各自的好坏。demo地址:http://codepen.io/tianzi77/pen/jPMPeB

html结构:

<div id="content">
            <div id="tabs">
                <ul>
                    <li class="active">天子</li>
                    <li>滑动门</li>
                    <li>javascript</li>
                </ul>
                <span id="state">-</span>
            </div>
            <div id="list">
                <ul class="active">
                    <li>IE6 PNG 解决方案合集</li>
                    <li>firefox下输入框innerHtml问题</li>
                    <li>精品菜单导航,多年精心收集整理上上品菜单</li>
                    <li>60个WEB实用效果集合</li>
                    <li>CSS3动态按钮导航集锦</li>
                    <li>HTML 5的革新:结构之美</li>
                    <li>JavaScript高级程序设计(第2版)</li>
                    <li>w3cfuns-我爱你!~~~</li>
                    <li>高性能网站建设指南</li>
                    <li>罕见的皮具拉链效果博客PSD</li>
                    <li>【基础五】块状元素和内联元素</li>
                    <li>“阳癫疯”的纯css下拉导航原理</li>
                    <li>请问这个排序功能如何实现?</li>
                    <li>分享10个便利的HTML5/CSS3框架</li>
                    <li>白璐ersonal 申请【热血活动】版块版主</li>
                    <li>web前端标准在各浏览器中的差异</li>
                </ul>
                <ul>
                    <li>腾讯面试题</li>
                    <li>近期面试感受</li>
                    <li>腾讯实习生web前端JS开发工程师面试经历</li>
                    <li>阿里巴巴web前端开发面试题</li>
                    <li>网易页面重构面试题</li>
                    <li>网易web前端开发师面试问答的经历</li>
                    <li>2011腾讯前端面试稿</li>
                    <li>Alibaba web前端开发工程师面试奇遇记</li>
                    <li>腾讯实习生网页重构组招聘公开试题(含答案</li>
                    <li>求职记——记录成为面霸的全过程</li>
                    <li>淘宝Web前端开发面试经历</li>
                    <li>百度前端面试题对话记录(内推面试)</li>
                    <li>2015年最新百度前端开发面试经历(一面和二面</li>
                    <li>去TX的事基本黄了,题我发出来了</li>
                    <li>俺们公司的面试题</li>
                </ul>
                <ul>
                    <li>滑动门滑动门滑动门</li>
                    <li>滑动门滑动门滑动门</li>
                    <li>滑动门滑动门滑动门</li>
                    <li>滑动门滑动门滑动门</li>
                    <li>滑动门滑动门滑动门</li>
                    <li>滑动门滑动门滑动门</li>
                    <li>滑动门滑动门滑动门!</li>
                </ul>
            </div>
        </div>

然后写css样式:

        *{
          margin:0;
          padding:0;
        }
        body{
            font-size:12px;
        }
        #content{
            margin:0 auto;
            width:600px;
            border:1px #000 solid;
        }
        #tabs{
            height:30px;
            background:#000;
            overflow:hidden;
            position:relative;
        }
        #tabs #state{
            display:block;
            top:0;
            right:0;
            width:30px;
            height:30px;
            font-size:24px;
            font-weight:700;
            text-align:center;
            color:#fff;
            cursor:pointer;
            position:absolute;
        }
        #tabs li{
            display:inline;
            padding:0 8px;
            line-height:30px;
            color:#fff;
            list-style:none;
            cursor:pointer;
            float:left;
        }
        #tabs .active{
            color:#000;
            background:#fff;
        }
        #list{
            padding:10px 0;
        }
        #list ul{
            margin:0 25px;
            display:none;
        }

        #list ul li{
            height:25px;
            line-height:25px;
        }
        #list .active{
            display:block;
        }

js部分:

首先加减号伸缩按钮比较简单:

state.onclick = function()
                {
                    var text = this.innerHTML;
                    if(text == "-")
                    {
                        this.innerHTML = "+";
                        list.style.display = "none";
                    }
                    else
                    {
                        this.innerHTML = "-";
                        list.style.display = "block";
                    }
                }

然后就是获取id或者class,由于不用jquery,所以直接定义一个$方法获取。简化代码量。

    var $ = function(ids)
                {
                    return document.getElementById(ids);
                }

                var tabs = $("tabs").getElementsByTagName("li");
                var state = $("state");
                var list = $("list");
                var ul = list.getElementsByTagName("ul");

ul的切换和li的滑动效果有三种方法,一一道来:

//方法一可以不使用闭包 思路比较简单 自定义属性 代码少,经常使用。

for(var i = 0; i < tabs.length; i++)
                {
                    tabs[i].index = i;
                    tabs[i].onmouseover = function()
                    {
                        for(var i = 0; i < tabs.length; i++)
                        {
                            tabs[i].className = ul[i].className = "";
                        }
                        this.className = ul[this.index].className = "active";
                    `

                }

方法二:

function events(index)
                {
                    tabs[index].onmouseover = function()
                    {
                        for(var i = 0; i < tabs.length; i++)
                        {
                            tabs[i].className = ul[i].className = "";
                        }
                        this.className = ul[index].className = "active";
                    }
                }

//方法三 采用闭包立即执行索引

(
                    function(index)
                    {
                        tabs[index].onmouseover = function()
                        {
                            for(var i = 0; i < tabs.length; i++)
                            {
                                tabs[i].className = ul[i].className = "";
                            }
                            this.className = ul[index].className = "active";
                        }
                    }
                )(i);

随便掌握一种便可玩转滑动门。

时间: 2024-12-26 08:21:46

javascript滑动门的实现方法和案例的相关文章

电商网站滑动门特效

今天在慕课网学习了JavaScript滑动门特效,这个特效在电商网站上比较常见,难度适中,要对JavaScript和DOM比较熟悉. 一.实现HTML + CSS结构 首先编写HTML代码 1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>sliding doors</title> 6 <link rel="s

实现滑动门的三种方法

目录 [1]定义[2]案例效果 [3]切图[4]实现 三层嵌套 两层嵌套 绝对定位 [5]效果 定义 在border-radius出现之前,实现圆角效果使用的是滑动门.滑动门是利用背景图像的可层叠性,并允许他们在彼此之上进行滑动,以创造一些特殊的效果. 案例效果 切图 实现方法 滑动门的实现共三种方法:三层嵌套.两层嵌套和绝对定位. 三层嵌套 三层嵌套,文字只能写到最里面的div里,适用于图片比较大或者拓展要求高,比如导航. [注意1]要想让滑动门适用于多种场合,左右两个角必须透明,以此露出背景

一款CSS+JS+DIV制作的蓝色风格tab滑动门

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>一款CSS+JS+DIV制作的蓝色风格ta

8.3 应用滑动门技术的玻璃效果菜单

本例中要实现一个玻璃材质效果的水平菜单.为了表现出立体的视觉效果,以及玻璃的质感.必须借助图像才可以实现,完成后的效果如图1所示. 该实例文件位于网页学习网CSS教程资源的“第8章\03\glass-navi.htm”. 图1 玻璃效果的菜单 本例中用到了两个图像,分别作为整个菜单的背景色平铺使用的,和当鼠标指针经过某个菜单项的时候显示出来的. 从效果图中可以看出,玻璃材质图是一个固定的图像文件,而菜单中的各个菜单项宽窄不一,却都可以完整地显示出来,这是如何实现的呢?这里使用的就是“滑动门”技术

JavaScript基础之创建对象的方法

ECMA-262把对象定义为:"无序属性的集合,其属性可以包含基本值.对象或者函数."严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或者方法都有一个名字,而每个名字都映射到一个值.正因为这样,我们可以把ECMAScript的对象想像成散列表:无非就是一组名值对,其中值可以是数据或函数. 创建对象的方式多种多样,理解和掌握每种创建对象的方法对于学会JavaScript这门语言是十分重要的. 一.使用Object构造函数 var person = new Object()

JavaScript学习总结(十四)——JavaScript编写类的扩展方法

在?J?a?v?a?S?c?r?i?p?t?中?可以使?用?类的p?r?o?t?o?t?y?p?e属性来?扩?展?类的属?性?和?方?法,在实际开发当中,当JavaScript内置的那些类所提供的动态方法和动态属性不满足我们实际开发时,我们就可以通过"prototype"属性给自定义类添加方法和属性或者扩展原有的类中的方法和属性. 一.扩展JavaScript内置类,添加动态方法 语法格式: 类名.prototype.方法名 = function([param1],[param2],.

11.4 “5图形”二维滑动门经典圆角框

11.3节介绍的不固定宽度的圆角框制作方法只适用于单色的圆角框,对于带有复杂边框的圆角框就不适用了. 另外,还需要考虑一个问题,用11.3节介绍的方法制作的圆角框,尽管可以适应不同宽度,但是它里面的正文段落也承担了设置圆角框布局的任务.也就是说,圆角框中的正文并不是独立的,正文内容不能自由地设置样式.这对于通用型的网页来说,局限性很大:例如,如果较为复杂的页面,每个圆角框用于放置不同的栏目,希望达到的目标应该是可以在每个圆角框中放置任何内容,并且可以对这些内容设置样式,还能保证圆角框本身显示正确

js实现多个滑动门在同一个页面展示效果

多个滑动门在同一个页面展示,在工作小组里面,一直是一个让人比较纠结的问题~学习库里面有一个技术同事5年前给封装的控件,大家就一直在用复用那个. 最近项目里面用到的这个效果非常多,每次都要调用那个js控件,还得按规则匹配相应的id,真心觉得麻烦,就在想,为嘛不自己写一个可以通用的~ 于是,就有了下面这个脚本效果: js: <script type="text/javascript" > var arrayObj = [' ',' ',' ',' ',' ',' ',' '];

【回忆1314】回忆之横竖滑动门

直接看效果点这里 HTML <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title> 横竖滑动门 </title> <link rel="stylesheet" href="sliding-door.css"/> </head> <body&g