为了账号安全,请及时绑定邮箱和手机立即绑定

侧边栏测试

根据教程的内容做改变:

两个构造函数合一,添加点击文档关闭菜单内容,点击关闭侧边栏按钮也会关闭菜单内容。

ie9及更早版本对于事件对象currentTarget属性不支持,现在未做处理。

(function () {

function Sidebar(sidebar,closeBar,sidebarUl,sidebarMenuList,menuCloseList) {
if (this instanceof Sidebar) {
this.sidebar = sidebar;
this.closeBar = closeBar;
this.sidebarUl = sidebarUl;
this.sidebarMenuList = sidebarMenuList;
this.menuCloseList = menuCloseList;
this.sidebarState = "opened";
this.menuState = "allClosed";
this.currentOpenedMenuContent = null;

this.init();
} else {
return Sidebar(sidebar,closeBar,sidebarUl,sidebarsidebarMenuList,menuCloseList);
}
}

Sidebar.prototype.init = function () {
var _this = this;

addHandle(this.closeBar,"click",function (ev) {
ev = ev || event;
_this.triggerSwich();
})

addHandle(this.sidebarUl,"click",function (ev) {
ev = ev || event;
stopPropagation(ev);
});

for (var i = 0; i < this.sidebarMenuList.length; i++) {
addHandle(this.sidebarMenuList[i],"click",function (ev) {
ev = ev || event;
_this.menuEvent(ev);
})
}

for (var i = 0; i < this.menuCloseList.length; i++) {
addHandle(this.menuCloseList[i],"click",function (ev) {
ev = ev || event;
_this.menuClose(ev);
})
}

addHandle(this.closeBar,"click",function () {
_this.closeMenu();
})

addHandle(document,"click",function () {
_this.closeMenu();
})
}

Sidebar.prototype.triggerSwich = function () {
if (this.sidebarState === "opened") {
this.close();
} else {
this.open();
}
}

Sidebar.prototype.close = function () {
console.log("close sidebar");

this.sidebarState = "closed";
this.sidebar.className = "sideBar-move-left";
this.closeBar.className = "closeBar-move-right";
}

Sidebar.prototype.open = function () {
console.log("open sidebar");

this.sidebarState = "opened";
this.sidebar.style.left = "-120px";
this.closeBar.style.left = "160px";

this.sidebar.className = "sideBar-move-right";
this.closeBar.className = "closeBar-move-left";
}

Sidebar.prototype.menuEvent = function (ev) {
var menuContent = document.getElementById(ev.currentTarget.id + "-content");

if (this.menuState === "allClosed") {
console.log("open " + menuContent.id);

menuContent.style.top = 0;
menuContent.style.left = "-85px";
menuContent.className = "nav-content";
menuContent.className += " menuContent-move-right";

this.menuState = "hasOpened";
this.currentOpenedMenuContent = menuContent;
} else {
console.log("close " + this.currentOpenedMenuContent.id);
console.log("open " + menuContent.id);

this.currentOpenedMenuContent.style.top = 0;
this.currentOpenedMenuContent.style.top = "35px";
this.currentOpenedMenuContent.className = "nav-content";
this.currentOpenedMenuContent.className += " menuContent-move-left";

menuContent.style.top = "250px";
menuContent.style.left = "35px";
menuContent.className = "nav-content";
menuContent.className += " menuContent-move-up";

this.menuState = "hasOpened";
this.currentOpenedMenuContent = menuContent;
}
}

Sidebar.prototype.menuClose = function (ev) {
var menuContent = ev.target.parentNode.parentNode || ev.srcElement.parentNode.parentNode;

menuContent.style.top = 0;
menuContent.style.left = "35px";
menuContent.className = "nav-content";
menuContent.className += " menuContent-move-left";

this.menuState = "allClosed";
}

Sidebar.prototype.closeMenu = function (ev) {
var menuContents = getByClass(document,"nav-content");

for (var i = 0; i < menuContents.length; i++) {
menuContents[i].className = "";
menuContents[i].className = "nav-content";
menuContents[i].className += " menuContent-move-left";
}

this.menuState = "allClosed";
}

function addHandle(ele,type,handle) {
if (ele.addEventListener) {
ele.addEventListener(type,handle,false);
} else if (ele.attachEvent) {
ele.attachEvent("on"+type,function () {
handle.call(ele);
})
} else {
ele[type] = handle;
}
}

function stopPropagation(
ev) {
if (ev.stopPropagation) {
ev.stopPropagation();
} else {
ev.cancelBubble = true;
}
}

function getByClass(parent,clsName) {
var ele = parent.getElementsByTagName("*");
var result = [];
var re = new RegExp("\\b"+clsName+"\\b","g");

for (var i = 0; i < ele.length; i++) {
if (re.test(ele[i].className)) {
result.push(ele[i]);
}
}

return result;
}

var sidebar = new Sidebar(document.getElementById("sidebar"), document.getElementById("closeBar"), document.getElementById("sidebar").getElementsByTagName("ul")[0], document.getElementById("sidebar").getElementsByTagName("ul")[0].getElementsByTagName("li"), getByClass(document,"nav-con-close"));
})();

正在回答

2 回答

CSS部分

body,div,ul,li,span,i{margin: 0; padding: 0;}
        ul{list-style: none;}

        body {
            font-family: 'Microsoft YaHei','Open Sans', 'trebuchet ms', arial, sans-serif;
            font-size: 12px;
        }

        #sidebar {
            position: fixed;
            left: 0;
            top: 0;
            z-index: 100;
            min-height: 100%;
            width: 35px;
            padding-top: 200px;
            background-color: #e1e1e1;
        }

        .item{
            margin-top: 5px;
            text-align: center;
        }

        #closeBar{
            position: absolute;
            left: 0;
            bottom: 30px;
            width: 35px;
            text-align: center;
            cursor: pointer;
        }

        .nav-content {
            position: absolute;
            z-index: 99;
            min-height: 100%;
            width: 170px;
            opacity: 0;
            filter: alpha(opacity=0);
            text-align: center;
            background-color: #e1e1e1;
        }

        .nav-con-close {
            position: absolute;
            top: 5px;
            right: 5px;
            cursor: pointer;
        }

        .sideBar-move-left{animation: sml 1s 1 forwards;}

        @keyframes sml{
            from{}
            to{
                transform: translateX(-120px);
            }
        }

        .closeBar-move-right{animation: cmr 1s 1 forwards;}

        @keyframes cmr{
            from{}
            to{
                transform: translateX(160px) rotate(405deg) scale(1.5);
            }
        }

        .sideBar-move-right{animation: smr 1s 1 forwards;}

        @keyframes smr{
            from{}
            to{
                transform: translateX(120px);
            }
        }

        .closeBar-move-left{animation: cml 1s 1 forwards;}

        @keyframes cml{
            from{
                transform: scale(1.5);
            }
            to{
                transform: translateX(-160px) rotate(-405deg) scale(1);
            }
        }

        .menuContent-move-right{animation: mmr 1s 1 forwards;}

        @keyframes mmr{
            from{
                opacity: 0;
                filter: alpha(opacity=0);
            }
            to{
                opacity: 1;
                filter: alpha(opacity=100);
                transform: translateX(120px);
            }
        }

        .menuContent-move-left{animation: mml 1s 1 forwards;}

        @keyframes mml{
            from{
                opacity: 1;
                filter: alpha(opacity=100);
            }
            to{
                opacity: 0;
                filter: alpha(opacity=0);
                transform: translateX(-120px);
            }
        }

        .menuContent-move-up{animation: mmu 1s 1 forwards;}

        @keyframes mmu{
            from{
                opacity: 0;
                filter: alpha(opacity=0);
            }
            to{
                opacity: 1;
                filter: alpha(opacity=100);
                transform: translateY(-250px);
            }
        }


1 回复 有任何疑惑可以回复我~

HTML部分

<div id="sidebar">
        <ul>
            <li id="prof" class="item">
                <span class="glyphicon glyphicon-user"></span>
                <div>我</div>
            </li>
            <li id="asset" class="item">
                <span class="glyphicon glyphicon-usd"></span>
                <div>资产</div>
            </li>
            <li id="brand" class="item">
                <span class="glyphicon glyphicon-heart"></span>
                <div>品牌</div>
            </li>
            <li id="broadcast" class="item">
                <span class="glyphicon glyphicon-bell"></span>
                <div>直播</div>
            </li>
            <li id="foot" class="item">
                <span class="glyphicon glyphicon-eye-open"></span>
                <div>看过</div>
            </li>
            <li id="calendar" class="item">
                <span class="glyphicon glyphicon-time"></span>
                <div>日历</div>
            </li>
        </ul>
        <div id="closeBar">
            <span class="glyphicon glyphicon-remove"></span>
        </div>
    </div>
    <div id="prof-content" class="nav-content">
        <div class="nav-con-close">
            <i class="glyphicon glyphicon-chevron-left"></i>
        </div>
        <div>
            我
        </div>
    </div>
    <div id="asset-content" class="nav-content">
        <div class="nav-con-close">
            <i class="glyphicon glyphicon-chevron-left"></i>
        </div>
        <div>
            资产
        </div>
    </div>
    <div id="brand-content" class="nav-content">
        <div class="nav-con-close">
            <i class="glyphicon glyphicon-chevron-left"></i>
        </div>
        <div>
            品牌
        </div>
    </div>
    <div id="broadcast-content" class="nav-content">
        <div class="nav-con-close">
            <i class="glyphicon glyphicon-chevron-left"></i>
        </div>
        <div>
            品牌
        </div>
    </div>
    <div id="foot-content" class="nav-content">
        <div class="nav-con-close">
            <i class="glyphicon glyphicon-chevron-left"></i>
        </div>
        <div>
            看过
        </div>
    </div>
    <div id="calendar-content" class="nav-content">
        <div class="nav-con-close">
            <i class="glyphicon glyphicon-chevron-left"></i>
        </div>
        <div>
            日历
        </div>
    </div>


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

侧边栏测试

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信