在不影响其切换功能的情况下向侧边栏添加点击功能

Add a click functionality to sidebar without affecting its toggle feature

我有一个侧边栏,我有一个按钮,可以在单击时切换侧边栏。我有一个 jQuery 函数可以做到这一点。我现在有一个新功能,如果侧边栏打开并且用户单击侧边栏中的任何列表项,它会切换回来并且某些功能将被执行。

问题:

当我单击边栏内的 li 时,切换按钮正在等待第二次单击(我的猜测)。因此,如果我在单击侧边栏 li 上添加切换,主要切换按钮功能就会中断。我如何在不影响彼此的情况下保持两者。我希望我已经说清楚了。这是代码。

JS

// code for sidebar toggle in jQuery
$.fn.toggleClick = function () {
    var methods = arguments,
        count = methods.length;
    return this.each(function (i, item) {
        var index = 0;
        $(item).on('click', function () {
            return methods[index++ % count].apply(this, arguments);
        });
    });
};

//for opening sidebar
function openSidebar() {
    $('#sg-evm-sidebar').animate({
        left: 0
    }, 300)
    $('.container').css({
        position: "fixed"
    }).animate({
        left: 300
    }, 300)
    $('.content-overlay').delay(300).show();
}
//closing sidebar
function closeSidebar() {
    $('#sg-evm-sidebar').animate({
        left: -300
    }, 300)
    $('.container').css({
        position: "fixed"
    }).animate({
        left: 0
    }, 300)
    $('.content-overlay').delay(300).hide();
}

//$(".empName").on("click", function () {
//   closeSidebar();
//});

// calling toggleclick here
$('.toggle-box').toggleClick(openSidebar, closeSidebar);  

这是一个JS FIDDLE。我从我巨大的网站创建它。所以请忽略损坏的图像。

我已经更新了你的fiddle:http://jsfiddle.net/qvksx30g/4/

我添加了一些基本逻辑

var sidebarOpen = false;

function toggleSidebar()
{
    if (sidebarOpen)
        closeSidebar();
    else
        openSidebar();
}

然后在 openSidebarcloseSidebar 中设置 sidebarOpen.

我也不再使用toggleClick。相反,我正在使用:

$(document).on('click', '.toggle-box', toggleSidebar)
  .on('click', '.list li', closeSidebar);

您可以在边栏包装器("close" 或 "open")上使用 class 来跟踪边栏状态(打开或关闭),然后使用此 class 在您的点击侦听器中确定您是否必须调用 closeSidebar 或 openSidebar。