javascript - 单击时添加悬停效果,如果再次单击则再次删除

标签 javascript css sass

我已经制作了一个产品 block ,可以选择在悬停时看到一个很好的效果,但我想看到我在悬停时看到的悬停效果在点击 div 时看到,但我不知道如何可以做到这一点。

我唯一想要的是完全在 css/sass 或 Javascript 中使用它,如果它不能用 Javascript 或 css/sass 完成,那么 jQuery 就可以了。

body {
  width: 100%;
  height: 100%;
  background-color: #c8cfdc;
  color: #363636;
  font-family: 'Roboto', sans-serif;
}

.blocks_container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  padding: 20px 0;
  width: 90%;
  margin: 0 auto;
  max-width: 1170px;
}

.block {
  background-color: #fff;
  cursor: pointer;
  margin-bottom: 20px;
}

.product_block {
  width: 31%;
  overflow: hidden;
  position: relative;
  height: 340px;
  -webkit-transition: all 0.4s ease;
  transition: all 0.4s ease;
}
.product_block .product_header {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 55px;
  -webkit-transform: translateY(-100%);
  transform: translateY(-100%);
  -webkit-transition: -webkit-transform 0.43s cubic-bezier(0.32, 1.259, 0.375, 1.15);
  transition: -webkit-transform 0.43s cubic-bezier(0.32, 1.259, 0.375, 1.15);
  transition: transform 0.43s cubic-bezier(0.32, 1.259, 0.375, 1.15);
  transition: transform 0.43s cubic-bezier(0.32, 1.259, 0.375, 1.15), -webkit-transform 0.43s cubic-bezier(0.32, 1.259, 0.375, 1.15);
}
.product_block .product_header .product_heart {
  float: left;
  margin-top: 15px;
  padding-left: 30px;
}
.product_block .product_header .product_heart img {
  width: 20px;
  height: 20px;
}
.product_block .product_header .product_tag {
  position: absolute;
  top: 15px;
  left: 50%;
  text-align: center;
  -webkit-transform: translateX(-50%);
  transform: translateX(-50%);
  color: #fff;
  text-transform: uppercase;
  font-family: 'Ropa Sans', sans-serif;
  background-color: #3b4068;
  padding: 4px 15px;
  border-radius: 0.8em;
  -webkit-transition: all 0.3s ease;
  transition: all 0.3s ease;
}
.product_block .product_header .product_shop {
  float: right;
  margin-top: 15px;
  padding-right: 30px;
}
.product_block .product_header .product_shop img {
  width: 20px;
  height: 20px;
}
.product_block .product_img {
  margin: 0 auto;
  width: 95%;
  height: 260px;
  background-size: contain;
  background-position: 50% 80%;
  background-repeat: no-repeat;
  -webkit-transform: scale(1);
  transform: scale(1);
  -webkit-transition: -webkit-transform 0.3s ease-in-out;
  transition: -webkit-transform 0.3s ease-in-out;
  transition: transform 0.3s ease-in-out;
  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;
  transition: all 900ms ease;
}
.product_block .product_info {
  transform: translate(0px, 200px);
  text-align: center;
  padding-top: 20px;
}
.product_block .product_info .product_title {
  font-size: 16px;
  font-family: 'Ropa Sans', sans-serif;
  text-transform: uppercase;
  margin-bottom: 5px;
}
.product_block .product_info .product_subtitle {
  font-size: 12px;
  font-weight: 300;
  letter-spacing: 1px;
  color: #999;
  margin: 0;
  margin-bottom: 15px;
}
.product_block .product_info .product_price {
  font-family: 'Ropa Sans', sans-serif;
  font-size: 15px;
  text-transform: uppercase;
  font-weight: 700;
}
.product_block .product_info .product_price span {
  text-decoration: line-through;
  color: #fc7070;
  padding-left: 9px;
}
.product_block:hover {
  transition: all 300ms ease;
  background-color: #3b4068;
  color: #fff;
}
.product_block:hover .product_header {
  -webkit-transform: translateY(0);
  transform: translateY(0);
}
.product_block:hover .product_header .product_tag {
  background-color: #fff;
  color: #3b4068;
}
.product_block:hover .product_img {
  transition: all 300ms ease-in-out;
  -webkit-transform: scale(1.03);
  transform: scale(1.03);
  background-position: 30% 30%;
  width: 40%;
  -ms-transform: rotate(20deg);
  /* IE 9 */
  -webkit-transform: rotate(20deg);
  /* Safari */
  transform: rotate(20deg);
}
.product_block:hover .product_info {
  transition: all 300ms ease;
  transform: translate(0px, -150px);
  text-align: center;
  padding-top: 20px;
}
<div class="blocks_container">
  <div class="block product_block rem" id="red">
    <div class="product_header">
      <div class="product_heart"> <img src="http://calleriphotographer.it/loving.svg"/></div>
<!--       <div class="product_tag">Waffle</div> -->
      <div class="product_shop"><img src="http://calleriphotographer.it/cart.svg"/></div>
    </div>
    <div class="product_img" style="background-image: url('http://calleriphotographer.it/nike.png')"></div>
    <div class="product_info">
      <h3 class="product_title">nike</h3>
      <h5 class="product_subtitle">Air Max Tavas SD</h5>
      <p class="product_price">$160.00<span>$200.00</span></p>
    </div>
  </div>
</div>

如果你想用 sass 在 codepen 中编辑它,请点击下面

my codepen link

最佳答案

您只需要为您的 .product_block 元素激活状态

CSS

.product_block.active:hover {
    transition: all 300ms ease;
    background-color: #3b4068;
    color: #fff;
}
.product_block.active:hover .product_header {
    -webkit-transform: translateY(0);
    transform: translateY(0);
}
.product_block.active:hover .product_header .product_tag {
    background-color: #fff;
    color: #3b4068;
}
.product_block.active:hover .product_img {
    transition: all 300ms ease-in-out;
    -webkit-transform: scale(1.03);
    transform: scale(1.03);
    background-position: 30% 30%;
    width: 40%;
    -ms-transform: rotate(20deg);
    /* IE 9 */
    -webkit-transform: rotate(20deg);
    /* Safari */
    transform: rotate(20deg);
}
.product_block.active:hover .product_info {
    transition: all 300ms ease;
    transform: translate(0px, -150px);
    text-align: center;
    padding-top: 20px;
}

JS

var elem = document.querySelector('.product_block');

elem.addEventListener("click", function(){
        this.classList.add('active');
})

附言JSFiddle

关于javascript - 单击时添加悬停效果,如果再次单击则再次删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43407303/

相关文章:

html - 如何使 div 的底部像这张图片一样尖

webpack - 将 Tailwind 任意值支持与 SCSS 结合使用

javascript - 从 HTML 表单传递变量 -> ajax load()

JavaScript Array[1] 获取内容

javascript - 基于javascript变量渲染jsp内容

css - 在 CSS 网格布局中添加水平滚动

javascript 跨域图片加载 -> 检查加载图片是否加载成功

html - 行高导致滑动 url 效果中断

css - Chrome 开发者工具 : SASS source file doesn't get saved on disk

grails - 如何在Grails Assets 管道 Controller 操作上放置@Cacheable批注?