Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Нет плавного открытия и закрытия 2-го уровня меню (https://javascript.ru/forum/jquery/65358-net-plavnogo-otkrytiya-i-zakrytiya-2-go-urovnya-menyu.html)

SkAndriy 14.10.2016 06:51

Нет плавного открытия и закрытия 2-го уровня меню
 
Ниже представлен код многоуровневого меню (3 уровня). Код работает, но есть две проблемы:

1. у второго уровня нет плавного раскрытия и скрытия. показ меню скачкообразный.

2. при раскрытии разделов третьего уровня происходит задержка отображения их имен (названий) и хотелось бы, чтобы при открытии одного подменю другие закрывались.

Вопрос: как исправить коды javascript, чтобы решить эти две задачи.

Спасибо

<script type="text/javascript"> 
  $(function() {
   var jQuery.browser.mobile = isTouchDevice = true;
   
   $(window).on('resize', function() {
        isMobileWidth=$(document).width()<768?true:false;
   });

   $(".menu__top-level li").hover(function(){
       // Add code for mouse enter
       var g = $(this);
       if (!isMobileWidth) {
         if(timeoutHandle){
            clearTimeout(timeoutHandle);
            timeoutHandle = null;
         }
         timeoutHandle = setTimeout(function() {
            g.addClass("hover")
         }, 250)
       }
    },
    function(){
       // Add code for mouse leave
       if (!isMobileWidth) {
            $(this).removeClass("hover");
            clearTimeout(timeoutHandle)
       }
    });

   $(".menu__top-level > li").each(function() {
       if (!$(this).children(".menu__second-level").length) {
           $(this).children("a").addClass("no-submenu");
           $(this).addClass("no-submenu")
       }
   });
 
   $(document).on("click", ".menu__top-level > li", function(e) {
       if (isMobileWidth || jQuery.browser.mobile || isTouchDevice) {
           var g = $(this);           
           if (g.hasClass("hover")) {
               window.location = $(this).children("a").attr("href")
           } else {
               $('.menu__top-level > li > a:not(".no-submenu")').parent().removeClass("hover"); 
               g.addClass("hover");                           
               $children = g.find("> ul > li:not(.no-line)");
               $(".menu__second-level li").removeClass("expanded");
               if ($children.length == 1) {                   
                   $children.first().addClass("expanded")                                                       
               }                           
           }
           if (g.find("ul").length > 0) {
               return false
           }
       }
   });

   $(document).on("touchstart click", ".menu__top-level > li > ul > li > h3", function(event) {
       if (event.type == "touchstart")
           $(this).off('click').on('click', function(e){ e.preventDefault(); });
       
       if (isMobileWidth || jQuery.browser.mobile || isTouchDevice) {
           var g = $(this).parent();           
           if (g.hasClass("expanded")) {
               g.removeClass("expanded",1000)
           } else {
               g.siblings().removeClass("expanded",1000);
               g.addClass("expanded",1000); 
           }
           return false
       }
   });
  });
</script>


<ul class="menu__top-level">
                  <li>
                    <a class="" href="">Level-1</a>
                    <ul class="menu__second-level">
                      <li>
                        <h3>Level-2</h3>
                        <ul>
                          <li><a href="">Level-3</a></li>
                          <li><a href="">Level-3</a></li>
                          <li><a href="">Level-3</a></li>
                        </ul>
                      </li>
                      <li>
                        <h3>Level-2</h3>
                        <ul>
                          <li><a href="">Level-3</a></li>
                          <li><a href="">Level-3</a></li>
                        </ul>
                      </li>
                      <li class="no-line"><a href=""><img data-src="" class="" alt="" src="">Here image</a></li>
                    </ul>
                  </li>
                  <li><a class="" href="">Level-1</a>
                    <ul class="menu__second-level">
                      <li>
                        <h3>Level-2</h3>
                        <ul>
                          <li><a href="">Level-3</a></li>
                          <li><a href="">Level-3</a></li>
                          <li><a href="">Level-3</a></li>
                          <li><a href="">Level-3</a></li>
                        </ul>
                      </li>
                      <li>
                        <h3>Level-2</h3>
                        <ul>
                          <li><a href="">Level-3</a></li>
                          <li><a href="">Level-3</a></li>
                          <li><a href="">Level-3</a></li>
                        </ul>
                      </li>
                      <li>
                        <h3>Level-2</h3>
                        <ul>
                          <li><a href="">Level-3</a></li>
                          <li><a href="">Level-3</a></li>
                          <li><a href="">Level-3</a></li>
                          <li><a href="">Level-3</a></li>
                          <li><a href="">Level-3</a></li>
                          <li><a href="">Level-3</a></li>
                        </ul>
                      </li>
                      <li class="no-line"><a href=""><img data-src="" class="" alt="" src="">Here image</a></li>
                    </ul>
                  </li>
                </ul>

рони 14.10.2016 08:26

SkAndriy,
может чем поможет ...
http://javascript.ru/forum/project/3...tml#post231407

SkAndriy 14.10.2016 10:04

спасибо за помощь, но в теме по ссылке окончательного ответа нет. может есть еще мнения как исправить рабочий код в этом случае. спасибо


Часовой пояс GMT +3, время: 15:14.