javascript - 在点击功能上动画化图像,同时重叠其兄弟元素

标签 javascript jquery html css

初次使用,需要帮助。

我有三个li li li元素,每个都有自己的<img>在里面。我想动画个人<img>当单击所选元素时,从内向外同时与其他同级元素重叠(在这种扩展效果中,同级元素不应移动)。

我的 HTML 标记:

<div class="wrapper">
   <ul>
     <li class="card">
        <div class="content">
          <img src="some-img.jpg">
        </div>
     </li>
     <li class="card">
        <div class="content">
          <img src="some-img.jpg">
        </div>
     </li>
     <li class="card">
        <div class="content">
          <img src="some-img.jpg">
        </div>
     </li>
   </ul>
</div>

CSS 标记:

.card {
  position: relative;
  width: 28%;
  height: 100px;
  float: left;
  margin: 2.5%;
  overflow: hidden;
}


.content {
  position: absolute;
  width: 100%;
  height: 100%;
  top: -50%;
  left: 0;
  transition: all 1s ease-in;
}

img {
  width: 100%;
}

JS:

$('.card').on('click','.content',function(){
  $(this).css({
     'position':'fixed',
     'z-index':'10'          
  });
});

我来回对这段代码进行了不同的迭代,但是设置了 .content 的位置to fixed 确实有点接近我正在尝试做的事情,它与其他 sibling 重叠......但没有任何平滑的过渡向外流动。

这是 codepen 中代码的链接:http://codepen.io/broham89/pen/WrJmyB

非常非常非常感谢对此的任何帮助。

最佳答案

z-indexposition 在技术上不是可动画的属性,因此无论哪种解决方案都必须有点 hacky。您可以通过摆弄 CSS 类和 jQuery 切换来完成此操作。我稍微更改了代码,以便主要动画/转换发生在父 li 元素上,而不是 .content 元素上。为了让所有三个 li 都保持在相同的位置,我将它们更改为具有不同 :nth-child 定位声明的绝对定位元素,并给出了 ul 相对位置。目前,它是围绕三个元素设计的,但如果您需要更多元素,您可以尝试使用这些值(或使用 JS 来确定数学)。

此处的 jQuery 代码切换 .cardhover 类,该类将元素移动到 0left 位置—— 的开始ul 容器——防止任何溢出。它还为 z-index 添加了 .cardactive ,以确保该元素在更大/更小的过渡期间位于其他元素之上。 (并且它会从开头的任何其他 sibling 中删除该类。)

https://jsfiddle.net/nn454trm/11/

    $('.card').on('click', '.content', function() {
    
    $(this).parent().siblings().removeClass('cardactive'); 
$(this).parent().addClass('cardactive').toggleClass('cardhover');
      });
ul {
  position: relative;

}

.card {

  position: absolute;
  width: 28%;
  height: 100px;
  transition: 2s;
  margin: 2.5%;
  overflow: hidden;

}

.card:nth-child(1) {
  left: 0;
}

.card:nth-child(2) {
  left: 33.3%;
}

.card:nth-child(3) {
  left: 66.66%;
}

.content {
  position: absolute;
  width: 100%;
  height: 100%;
  left: 0;
  transition: all 1s ease-in;
}

img {
  width: 100%;
}


.cardhover {
  width: 95%;

  left: 0% !important;
}
.cardactive {
  z-index: 20;
 background: blue; //for demo purposes
}
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<div class="wrapper">
  <ul>
    <li class="card">
      <div class="content">
        <img src="some-img.jpg" alt="" />
      </div>
    </li>
    <li class="card">
      <div class="content">
        <img src="some-img.jpg" alt="" />
      </div>
    </li>
    <li class="card">
      <div class="content">
        <img src="some-img.jpg" alt="" />
      </div>
    </li>
  </ul>
</div>

关于javascript - 在点击功能上动画化图像,同时重叠其兄弟元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35075645/

相关文章:

javascript - 如何比较两个 JS 数组并使用更改创建新的 JS 数组

javascript - 测试一个变量是否已定义,如果没有,在 Coffeescript 中为其分配一个空字符串?

javascript - `mousemove` 并触发自定义事件

jquery - 在 div 上设置最大高度

javascript - sessionStorage 无法正常工作

javascript - 数组中的 document.getElementById

javascript - Microsoft JScript 运行时错误 : Out of stack space in date. js

javascript - 两个类之间的状态

html - 几个 ul inline-block

html - 使用 CSS 为某些输入字段设置输入后缀