代码之家  ›  专栏  ›  技术社区  ›  Ilja KO

高度转换时转换事件触发过快

  •  0
  • Ilja KO  · 技术社区  · 6 年前

    我有一个JavaScript文件,如下所示:

    function hideIt(body_id, icon_id) {
        var x = document.getElementById(body_id);
        var y = document.getElementById(icon_id);
        if (x.style.height==="0px") {
            x.style.height= x.scrollHeight + 'px';
            x.addEventListener("webkitTransitionBegin", fullStyle(body_id));
            y.src = "<%= asset_path('show_icon.png') %>";
        } else {
            x.style.height= '0px';
            x.addEventListener("webkitTransitionEnd", noStyle(body_id));
            y.src = "<%= asset_path('hide_icon.png') %>";
        }
    }
    
    function noStyle(body_id) {
      console.log("noStyle");
      var x = document.getElementById(body_id);
      x.style.padding = '0px';
      x.style.margin = '0px';
      x.style.border = 'none';
    }
    
    function fullStyle(body_id) {
      console.log("fullStyle");
      var x = document.getElementById(body_id);
      x.style.padding = '10px';
      x.style.marginBottom = '5px';
      x.style.marginTop = '5px';
      x.style.border = '1px solid #eaeaea';
    }
    

    .post-body-preview{
      color: $black;
      height: 0px;
      overflow: hidden;
      transition: height 1000ms;
    }
    

    现在的问题是 noStyle 单击带有 icon_id hideIt x 它的边距、填充物和边框会立即被剥离,因此 webkitTransitionEnd 我一按按钮就会被炒鱿鱼

    有人能指出我做错了什么吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Ilja KO    6 年前

    问题是我这么做了:

    x.addEventListener("webkitTransitionBegin", fullStyle(body_id));
    

    而不是这样:

    x.addEventListener("webkitTransitionBegin", function(){ fullStyle(body_id); });
    

    所以它总是启动函数。