我怎样才能阻止这个jQuery被淘汰?

时间:2016-09-24 21:33:13

标签: javascript jquery html css twitter-bootstrap

所以我试图创建一个有两层的盒子:前层和后层。它们将彼此堆叠在一起,因此默认情况下隐藏背层。

当您将鼠标悬停在盒子的顶部(技术上是前层)时,前层应该向上滑动,露出后层。我试图通过使用.slideUp().slideDown()来做到这一点,但它同时不断地揭示两个层。所以我切换到.slideUp().fadeIn(),但这似乎没有太多帮助。

bugging

正如您所看到的,它有时会显示两个不应该显示的div,并且它也会随机滑动多次。我怎样才能提高效率呢?

这是JsFiddle

更新:

  

寻求调试帮助的问题("为什么这段代码不起作用?")必须   包括所需的行为,特定的问题或错误   在问题本身中重现它所需的最短代码。   没有明确问题陈述的问题对其他问题没有用   读者。

这就是人们投票结束这个答案的原因......这个问题从这个清单中没有什么问题?

Desired behavior? - Check
Specific problem? - Check
Shortest code necessary? - Check
Clear problem? - check

3 个答案:

答案 0 :(得分:4)

您不需要使用slideUp和slideDown,可以使用转换和转换CSS3属性来实现幻灯片效果。

更新了JS小提琴:https://jsfiddle.net/9uw2q24h/3/

使用Javascript:

$('.outer').hover(function() {
  $(this).children('.front').addClass('front-up');
}, function() {
  $(this).children('.front').removeClass('front-up');
});

CSS:

.outer {
  position: relative;

  .front,
  .back {
    text-align: center;
    width: 100%;
  }
  .back {
    display: block;
  }
  .front {
    position: absolute;
    transition: 0.5s ease;
  }
  .front-up {
    transform: translateY(-100%);
  }
}

如果您必须支持旧浏览器,请确保将转发规则和转换规则添加到供应商前缀(-webkit-,-moz-等)。

答案 1 :(得分:1)

您可以这样做:

var running = false;
$('.outer').hover(function() {
  if (!running) {
    running = true;
    $(this).children('.front').slideUp(function() {
      $(this).next('.back').slideDown(function() {
        running = false;
      });
    });
  }
}, function() {
  if (!running) {
    running = true;
    $(this).children('.back').slideUp(function() {
      $(this).prev('.front').slideDown(function() {
          running = false;
      });
    });
  }
});

解释:动画一开始就将状态保存在变量中以避免冲突(否则会再次调用)。此外,slideDownslideUp相结合,您可以获得更加流畅的动画效果。使用fadeOutslideDown

的组合,你的闪烁效果不是很好

小提琴:https://jsfiddle.net/dL7ckq6b/

答案 2 :(得分:1)

稍微调整一下你的CSS,特别是制作你的元素' position属性absolute,会使你的后面元素从一开始就在你的前面元素后面,现在你只需要显示/隐藏你的前面元素。

<强>使用Javascript:

$('.outer').hover(function() {
$('.front').slideUp();
    console.log("IN");  
}, function() {
  $('.front').slideDown();
  console.log("OUT");  
});

我还更新了CSS以更清楚地显示正在发生的效果。

<强> CSS:

.outer {
  .front,
  .back {
    text-align: center;
    position: absolute;
    padding: 20px 10px;
    border: 2px solid yellow;
  }

  .front {
    z-index: 10;
    background-color: red;
  }

  .back {
    z-index: 0;
    background-color: blue;
  }
}

这是JSFiddle:https://jsfiddle.net/z8e7eb4b/