zoukankan      html  css  js  c++  java
  • 使用javascript oop开发滑动(slide) 菜单控件

    这里使用原生的javascript,用面向对象的方式创建一个容易维护使用方便的滑动菜单

    <!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>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>javascript slide控件演示</title>
    <style type="text/css">
    /*reset*/
    dl,ul,li,dt,dd{ margin:0; padding:0; list-style:none; }
    /*silding*/
    .silding{ 200px; border:1px solid #ccc; line-height:25px; overflow:hidden;}
    .silding dt{border-bottom:1px solid #ccc; background-color:#bebebe; cursor:pointer}
    .silding dd{ display:none; background:#efefef; overflow:hidden; font-size:12px; }
    .silding .active{ font-weight:bold;}
    </style>
    <script type="text/javascript">
    function Slider(i, panelHeight) { //dto
    this.index = i;
    this.panelHeight = panelHeight;
    }

    //class Sliding {
    function Sliding(activeIndex) {
    this.commands = [];
    this.panels = [];
    this.activeIndex = activeIndex || 0;
    this.sliderCache = {};
    }
    Sliding.prototype = {
    //绑定事件
    init: function(eventName, activeCssClass) {
    var _this = this;
    var cmds = _this.commands;
    _this.activeClass = activeCssClass;
    for (var i = 0, n = cmds.length; i < n; i++) {
    cmds[i]["on" + eventName] = function(e) {
    _this.handel(this, e);
    }
    cmds[i].index = i;
    if (i == _this.activeIndex) {
    _this.sliderCache = new Slider(i, _this.panels[i].offsetHeight);
    }
    }


    },
    //事件处理函数
    handel: function(elem, args) {
    var _this = this;
    var index = elem.index;
    var cacheIndex = _this.sliderCache.index;
    var cacheElem = _this.commands[cacheIndex];
    if (index == cacheIndex) return;
    var showPanel = _this.panels[index];
    var hidePanel = _this.panels[cacheIndex];
    var h = parseInt(_this.sliderCache.panelHeight);
    showPanel.style.height = "0px";
    showPanel.style.display = "block";
    _this.tween(hidePanel, showPanel, h);
    elem.className = _this.activeClass;
    cacheElem.className = cacheElem.className.replace(eval("/ ?"+_this.activeClass+" ?/"),"");
    _this.sliderCache = new Slider(index, h);

    },
    //动画算法
    tween: function(obj0, obj1, h) {
    _this = arguments.callee;
    var step = 20;
    if ("v" == "v") {
    step = 30;
    }
    if (h > 0) {
    var h0 = obj0.offsetHeight;
    var h1 = obj1.offsetHeight;
    if (h < step) {
    obj0.style.display = "none";
    obj0.style.height = (h1 + h) + "px";
    obj1.style.height = (h1 + h) + "px";

    } else {
    h = h - step;
    obj0.style.height = (h0 - step) + "px";
    obj1.style.height = (h1 + step) + "px";
    setTimeout(function() {
    _this(obj0, obj1, h)
    },
    50)
    }
    }
    }
    }
    //}
    </script>
    </head>

    <body>
    <div id="silding" class="silding">
    <dl>
    <dt class="active">第一个一级菜单</dt>
    <dd style="display:block;">
    <ul>
    <li><a href="#">第一个二级菜单</a></li>
    <li>第一个二级菜单</li>
    <li>第一个二级菜单</li>
    </ul>
    </dd>
    </dl>
    <dl>
    <dt>第二个一级菜单</dt>
    <dd>
    <ul>
    <li>第二个二级菜单</li>
    <li>第二个二级菜单</li>
    <li>第二个二级菜单</li>
    </ul>
    </dd>
    </dl>
    <dl>
    <dt>第三个一级菜单</dt>
    <dd>
    <ul>
    <li>第三个二级菜单</li>
    <li>第三个二级菜单</li>
    <li>第三个二级菜单</li>
    </ul>
    </dd>
    </dl>
    </div>
    <script type="text/javascript">
    var $sliding = document.getElementById("silding");
    var s1 = new Sliding();
    s1.commands = $sliding.getElementsByTagName("dt");
    s1.panels = $sliding.getElementsByTagName("dd"); ;
    s1.init("mouseover", "active");
    </script>
    </body>
    </html>

  • 相关阅读:
    命令行环境下简单实用的工具——重定向&管道
    阿里2014校招笔试题(南大)——利用thread和sleep生成字符串的伪随机序列
    Pooled Allocation(池式分配)实例——Keil 内存管理
    modelsim数据导出用于matlab绘图
    顺序块和并行块
    初入博园
    数字图像处理实验(7):PROJECT 04-03 , Lowpass Filtering 标签: 图像处理MATLAB 2017-05-25 09:30 109人
    杭电acm刷题(3):1062,Text Reverse 标签: 杭电acm 2017-05-15 08:26 126人阅读 评论(0)
    杭电ACM刷题(2):1005,Number Sequence 标签: 杭电acmC语言 2017-05-11 22:43 116人阅读
    数字图像处理实验(6):PROJECT 04-02,Fourier Spectrum and Average Value 标签: 图像处理MATLABfft 2017-05-07 23:1
  • 原文地址:https://www.cnblogs.com/axl234/p/3759158.html
Copyright © 2011-2022 走看看