Forráskód Böngészése

Make contextmenu smooth as butter

Nariman Jelveh 11 hónapja
szülő
commit
95e1268527
1 módosított fájl, 19 hozzáadás és 5 törlés
  1. 19 5
      src/UI/UIContextMenu.js

+ 19 - 5
src/UI/UIContextMenu.js

@@ -163,7 +163,17 @@
             options.enter(this);
             possiblyActivate(this, e, data);
         },
-            mouseleaveRow = function () {
+            mouseleaveRow = function (e) {
+                // if doesn't have submenu, remove active class and timer
+                if(!$(e.target).hasClass('has-open-context-menu-submenu') && 
+                    $(e.target).hasClass('context-menu-item-submenu'))
+                {
+                    $(e.target).removeClass('context-menu-item-active');
+                    // remove timeout
+                    clearTimeout(timeoutId);
+                    activeRow = null;
+                }
+
                 options.exit(this);
             };
 
@@ -595,15 +605,19 @@ function UIContextMenu(options){
         },
         // deactivates row when mouse leaves
         deactivate: function (e) {
-            // disable submenu delay timer
+            // disable submenu delay timer to cancel submenu opening
             clearTimeout(submenu_delay_timer);
-            // deactivate submenu
-            if($(e).hasClass('context-menu-item-submenu')){
+            // close submenu
+            if($(e).hasClass('has-open-context-menu-submenu')){
                 $(`.context-menu[data-id="${menu_id}-${$(e).attr('data-action')}"]`).remove();
                 // remove `has-open-context-menu-submenu` class from the parent menu item
                 $(e).removeClass('has-open-context-menu-submenu');
             }
-        }
+        },
+        exit: function (e) {
+            clearTimeout(submenu_delay_timer);
+            $(e.target).removeClass('context-menu-item-active');
+        },
     });
     
     // disabled item mousedown event