菜单过渡动画效果

。_饼干妹妹 提交于 2020-04-14 17:21:16

【推荐阅读】微服务还能火多久?>>>

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>二级菜单</title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
                list-style-type: none;
            }
            
            a,
            img {
                border: 0;
                text-decoration: none;
            }
            
            body {
                font: 12px/180% Arial, Helvetica, sans-serif, "新宋体";
            }
        </style>

        <link rel="stylesheet" type="text/css" href="css/sdmenu.css" />

        <script type="text/javascript" src="js/tool.js"></script>
        <script type="text/javascript">
            window.onload = function() {

                // 选择到类为 menuSpan 的对象
                var menus = document.querySelectorAll(".menuSpan");
                var divs = document.querySelectorAll("#my_menu div");

                for(var i = 0; i < menus.length; i++) {
                    menus[i].onclick = function() {
                        var curMenu = this;

                        //获取当前父节点
                        var parent = curMenu.parentNode;
                        var begin = parent.offsetHeight; // 225
                        //切换父节点样式

                        toggleClass(parent, "collapsed");
                        var end = parent.offsetHeight; //25
                        // 将样式变为初始高度保证执行从开始到结束
                        parent.style.height = begin + "px";
                        move(parent, "height", end, 10, function() {
                            parent.style.height = "";
                        });
                        //其他节点均关闭
                        closeOther(parent);
                        /*
                           我们在操作动画时,要知道 元素的开始状态,结束状态,我们从开始过渡到目标。
                           如果我们一开始就知道动画完成后的状态,如果我们仅仅使用目标去进行过渡得不到正确的结果
                           需要设置样式将我们现在的状态 更改为初始值状态(使用内联样式style.xxx)
                           然后在动画结束后,我们清除该样式,因为我们的类中已经添加。该值已经失去意义。
                         * 
                         * */
                    };
                }

                function closeOther(obj) {
                    //                    console.log(divs);
                    for(var i = 0; i < divs.length; i++) {
                        if(divs[i] != obj && (!isHaveClass(divs[i], "collapsed"))) {
                            var begin = divs[i].offsetHeight;
                            toggleClass(divs[i], "collapsed");
                            var end = divs[i].offsetHeight;
                            divs[i].style.height = begin + "px";
                            var o = divs[i];
                            // 这里我没有用变量o接收,发现得到的结果是undefined 所以单独定义对象来重置我们的样式.
                            move(o, "height", end, 10, function() {
                                o.style.height = "";
                            });
                        }
                    }
                }
            };
        </script>

    </head>

    <body>

        <div id="my_menu" class="sdmenu">
            <div>
                <span class="menuSpan">在线工具</span>
                <a href="#">图像优化</a>
                <a href="#">收藏夹图标生成器</a>
                <a href="#">邮件</a>
                <a href="#">htaccess密码</a>
                <a href="#">梯度图像</a>
                <a href="#">按钮生成器</a>
            </div>
            <div class="collapsed">
                <span class="menuSpan">支持我们</span>
                <a href="#">推荐我们</a>
                <a href="#">链接我们</a>
                <a href="#">网络资源</a>
            </div>
            <div class="collapsed">
                <span class="menuSpan">合作伙伴</span>
                <a href="#">JavaScript工具包</a>
                <a href="#">CSS驱动</a>
                <a href="#">CodingForums</a>
                <a href="#">CSS例子</a>
            </div>
            <div class="collapsed">
                <span class="menuSpan">测试电流</span>
                <a href="#">Current or not</a>
                <a href="#">Current or not</a>
                <a href="#">Current or not</a>
                <a href="#">Current or not</a>
            </div>
        </div>
    </body>

</html>

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!