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>

  • 相关阅读:
    NOIp2016 D2T3 愤怒的小鸟【搜索】(网上题解正解是状压)
    NOIp2018D1T1 积木大赛 【思维】
    NOIp2018D1T2 货币系统【分析&完全背包】
    NOIp2017D1T2 时间复杂度【模拟】
    NOIp2015D1T3 斗地主【暴搜】
    NOIp2013D2T3 华容道【搜索&图论-最短路】
    Andrew算法求二维凸包-学习笔记
    最小割的一些小技巧(实用小干货)
    USACO4.3 Buy Low, Buy Lower【简单dp·高精度】
    iOS本地推送与远程推送详解
  • 原文地址:https://www.cnblogs.com/axl234/p/3759158.html
Copyright © 2011-2022 走看看