Javascript 动画图标don';不要在点击按钮时选择他原来的位置

Javascript 动画图标don';不要在点击按钮时选择他原来的位置,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我有一个手风琴菜单,每个父菜单都有一个图标,这个图标用css转换和变换来设置动画。我向click事件添加了一个带有if条件的类。问题是,当我点击菜单1时,图标动画效果很好,但如果我直接点击菜单2,菜单2下拉菜单会出现,但菜单1中的图标不会占据其原始位置。 这个问题适用于每个菜单/子菜单中的每个图标,我认为我的代码中有一个错误 $(document).ready(function() { // Icons effect $('#mw_nav .toggle').click(func

我有一个手风琴菜单,每个父菜单都有一个图标,这个图标用css转换和变换来设置动画。我向click事件添加了一个带有if条件的类。问题是,当我点击菜单1时,图标动画效果很好,但如果我直接点击菜单2,菜单2下拉菜单会出现,但菜单1中的图标不会占据其原始位置。 这个问题适用于每个菜单/子菜单中的每个图标,我认为我的代码中有一个错误

$(document).ready(function() {
    // Icons effect
    $('#mw_nav .toggle').click(function() { 
        if($(this).hasClass('rotate_close')) 
        {
            $(this).addClass('rotate_open').removeClass('rotate_close');
        }
        else {
            $(this).addClass('rotate_close').removeClass('rotate_open');
        }
    });
    // Toggle Menu Items
    $(function () {
        $("#m_nav > ul ul").hide(); 
        $('#m_nav .toggle').click(function (e) {
            e.preventDefault();
            e.stopPropagation();
            var $parentli = $(this).closest('li');
            $parentli.siblings('li').find('ul:visible').slideToggle(400);
            $parentli.find('> ul').stop().slideToggle(400);
            $(this).remove;
       });
    });
});

任何帮助都将不胜感激

请在第一次单击处理程序中使用此代码:

$('#mw_nav .toggle').click(function() { 

   $(this).toggleClass('rotate_close rotate_open');

   if ($('#mw_nav .toggle').not(this).hasClass('rotate_open')) {

      $('#mw_nav .toggle').not(this).removeClass('rotate_open').addClass('rotate_close');

    }

});
我已经用一个工作示例更新了您的


干杯

我发现您的代码有两个问题。第一个建议是不要在$(document.ready()中包含$(function(){//your code})$(function(){})实际上只是$(document).ready()的简写,所以您添加的是不需要的代码

第二个是你的逻辑问题。
$('#mw#nav.toggle')
$('#m#nav.toggle')
单击侦听器实际上是在相同的元素上添加一个单击侦听器,但两者运行的逻辑不同。当调用
$('#mw_nav.toggle')
click listener时,它会检查类是否存在,以决定需要删除和添加哪个类。调用
$('#m_nav.toggle')
click listener时,它调用当前嵌套
上的slideToggle函数,而不管是否打开或关闭另一个菜单,并且没有检查rotate_open/rotate_close类是否存在,从而允许交换这些类。旋转打开/旋转关闭类的交换与向上/向下滑动切换的逻辑之间没有关系

更新

我已经编辑了您的代码并进行了更新,现在可以在此处看到:

我在HTML中的顶级项目中添加了一类
.top\u level
。我用它来区分顶级
  • 和子菜单。接下来,在click事件侦听器的末尾,我检查单击的
    .toggle
    元素是否为顶级元素,如果是,我将所有非当前选定的顶级元素作为目标,并确保它们具有
    .rotate\u close


    谢谢您的时间,但现在如果我单击子菜单1,它会将菜单1图标重置为其原始位置,并且只要我在菜单1的子菜单中导航,我希望在单击后保留其药剂。我应该在子菜单图标中添加另一个类,还是有其他方法?谢谢你,好的。我删除了$(document).ready(函数)下的函数,并按照您提到的更新代码。现在,你有没有一个例子来说明你是如何做到的?谢谢@colapsnux,我已经更新了我的答案,包括一把小提琴和我所做更改的解释。我相信这会解决你的问题。