.mouseleave() with .delay() working together

后端 未结 3 1850
逝去的感伤
逝去的感伤 2021-01-12 05:22

I have a list of several \'triggers\' (

  • s), each trigger shows a specific DIV, and each DIV has \'close\' button.

    Now, I want to improve the us

  • 3条回答
    •  星月不相逢
      2021-01-12 05:52

      @locrizak's answer is right (+1). This is because .delay() defaults to the effects queue, but .hide() with no parameters hides the selected elements without any effect, so the effects queue isn't involved at all.

      If you want to hide without any animation, just use setTimeout:

      $('.trigger').mouseleave(function() {
          setTimeout(function () {
              $('.copy .wrapper').hide();
          }, 3000);
      });
      

      http://jsfiddle.net/mattball/93F3k/


      Last edit, I promise

      //Show-Hide divs
      var current;
      $('.trigger').live('mouseenter', function() {    
          var id = current = $(this).data('code');
          $('#' + id).show().siblings().fadeOut();
      }).live('mouseleave', function() {
          var id = $(this).data('code');
          current = null;
          setTimeout(function ()
          {
              if (current !== id) $('#' + id).hide(1);
          }, 3000);
      });
      
      //Close button
      $('.copy .wrapper span').live('click', function() {
          $(this).closest('.wrapper').stop(true, true).fadeOut();
      });
      

      Demo: http://jsfiddle.net/mattball/b2ew5/

    提交回复
    热议问题