javascript - 仅在未单击按钮时触发 CSS 动画

标签 javascript jquery css

在以下代码中,在 .hover()#wrap 元素的高度通过 jQuery animate() 设置动画。

handlerIn 上,元素获得 250px 的高度,在 handlerOut 上,它失去 250px 的高度。

问题是我还包含了一个“按钮”,使用户能够删除在 .hover(handlerIn) 上添加的 250 像素高度。当用户单击此“按钮”时,将鼠标移到 hover 元素之外 (handlerOut); hover 元素两次丢失 250px。

我只想在用户没有点击“按钮”时触发.hover(handlerOut) 函数。

Fiddle

$(document).ready(function() {
  $("#wrap").hover(
    function() {
      $(this).animate({height: '+=250'}, 'slow');
      $('#button').css('display', 'block');
      expanded = true;
      console.log("expanded is " + expanded);
    },
    function () {
      $(this).animate({height: '-=250px'}, 'slow');
      $("#button").hide();
      expanded = false;
      console.log("expanded is " + expanded);
    }
  );
  $('#wrap').on('click', function(){
    window.open('http://google.com', 'click', 'window settings');
    return false;
    console.log('click');
  });
  if(expanded = true){
    $("#button").on('click', function(){
        $('#wrap').animate({height: '-=250px'}, 'slow');
        $("#button").hide();
        return false;
      });
  };

});

最佳答案

(尽管我不一定认为您的做法是正确的)您需要确保在单击 X 后将 expanded 设置为 false,即告诉代码该框不再是扩展并且它不应该进一步减小框的大小:

$(document).ready(function() {
  $("#wrap").hover(
    function() {
      $(this).animate({height: '+=250'}, 'slow');
      $('#button').css('display', 'block');
      expanded = true;
      console.log("expanded is " + expanded);
    },
    function () {
      $(this).animate({height: '-=250px'}, 'slow');
      $("#button").hide();
      expanded = false;
      console.log("expanded is " + expanded);
    }
  );
  $('#wrap').on('click', function(){
    window.open('http://google.com', 'click', 'window settings');
    return false;
    console.log('click');
  });
  if(expanded = true){
    $("#button").on('click', function(){
        $('#wrap').animate({height: '-=250px'}, 'slow');
        $("#button").hide();
        return expanded = false;    //This is all I changed
      });
  };

});

行得通。 Fiddle

编辑

一个警告 - 在使用 jQuery.animate() 函数之前,您真的应该三思而后行。与 CSS 动画或 GSAP 等 更好的 js 动画平台相比,jQuery.animate() 函数大约慢 10 倍::reference .

就我个人而言,我会使用 GSAP,但无论哪种方式,您都不应该花费更多时间来学习此工作流程 - 它只会阻碍您的 future !

关于javascript - 仅在未单击按钮时触发 CSS 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33503243/

相关文章:

javascript - 从 Node.js 中的 STDIN 读取时如何处理退格?

javascript - 如何使用两个提交函数来更新保存表单 Angular js

jquery - p标签会向下滑动但不会向上滑动

jquery - mvc3 View 中的电子邮件格式验证

html - 如何将左列作为导航器,将右列作为正文?

javascript - 当我使用 Three.js 渲染 3D 对象时,为什么会出现这些白线?

Javascript, Node : Call Asychronous Methods in a Loop & Return Result

jquery - 列表 : reverse direction 上的鼠标滚轮水平滚动

html - IE 8/10 兼容性问题 : My aside is dropping below my main, 当它应该并排时

javascript - Recaptcha 按钮丑陋,无法修复