您可以对这张卡进行故障排除并在悬停时向上滑动吗?

问题描述

我有一张简单的Bootstrap卡,我想向上滑动卡的内容以在鼠标悬停时显示较长的段落:

<div class="container">

  <div class="row my-5 d-flex justify-content-center">

    <div class="col-md-6">

      <!-- Card -->
      <div class="card">

        <!-- Card image -->
        <img class="img-fluid" src="https://images.pexels.com/photos/1546251/pexels-photo-1546251.jpeg" alt="Card image cap">

        <!-- Card content -->
        <div class="card-body close text-center">

          <!-- Title -->
          <h4 class="card-title font-weight-bold pt-1 pb-2"><a>A word about art</a></h4>
          <!-- Text -->
          <p class="card-text my-5">Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
          <!-- Button -->
          <a href="https://mdbootstrap.com/products/jquery-ui-kit/" class="btn btn-primary btn-rounded blue-gradient">Wanna some art? <i class="fas fa-palette ml-2"></i></a>

        </div>

      </div>
      <!-- Card -->

    </div>

  </div>

</div>

这是我的JS:

$('.card').mouSEOver(function() {
  $('.card-body').toggleClass('close');
});

它可以正常工作,但是鼠标悬停时有一些时髦的行为。这是预览的小提琴:https://jsfiddle.net/uL719afz/

鼠标悬停在哪里出了问题以及如何解决

解决方法

无论何时触发鼠标悬停事件,您都在打开和关闭类,而无需考虑鼠标是否仍在(或已离开)该元素中。请改用.hover

$('.card').hover(
  () => $('.card-body').removeClass('close'),() => $('.card-body').addClass('close')
);

$('.card').hover(
  () => $('.card-body').removeClass('close'),() => $('.card-body').addClass('close')
);
.container {
  margin-bottom: 10rem;
}
.card {
  border-radius:.35rem !important;
}
.card img {
  border-radius:.35rem !important;
}
.card-body {
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
  overflow: hidden;
  background-color: #fff;
  transition: all 1s;
  border-radius:.35rem !important;
}
.card-text {
  color: #2b0099 !important;
}
.card-body.close {
    top: 100%;
    height: 5rem;
    margin-top: -5rem;
    border-bottom-left-radius:.35rem !important;
    border-bottom-right-radius:.35rem !important;
    opacity: .9;
}
<div class="container">

  <div class="row my-5 d-flex justify-content-center">

    <div class="col-md-6">

      <!-- Card -->
      <div class="card">

        <!-- Card image -->
        <img class="img-fluid" src="https://images.pexels.com/photos/1546251/pexels-photo-1546251.jpeg" alt="Card image cap">

        <!-- Card content -->
        <div class="card-body close text-center">

          <!-- Title -->
          <h4 class="card-title font-weight-bold pt-1 pb-2"><a>A word about art</a></h4>
          <!-- Text -->
          <p class="card-text my-5">Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
          <!-- Button -->
          <a href="https://mdbootstrap.com/products/jquery-ui-kit/" class="btn btn-primary btn-rounded blue-gradient">Wanna some art? <i class="fas fa-palette ml-2"></i></a>

        </div>

      </div>
      <!-- Card -->

    </div>

  </div>

</div>

但是我认为完全避免使用JS,而使用:hover CSS会更优雅:使用.close代替.card:hover .card-body

.card-body {
  width: 100%;
  overflow: hidden;
  background-color: #fff;
  transition: all 1s;
  border-radius: .35rem !important;
  top: 100%;
  height: 5rem;
  margin-top: -5rem;
  border-bottom-left-radius: .35rem !important;
  border-bottom-right-radius: .35rem !important;
  opacity: .9;
}

.card:hover .card-body {
  position: absolute;
  height: 100%;
  top: 0;
  margin-top: 0;
}

https://jsfiddle.net/8ndLuvzy/