手风琴-js+css

html 复制代码
<template>
  <div>
    <div class="pics">
      <ul id="picList">
        <li><a href="#"><img src="../assets/images/researchOne.webp" alt=""></a></li>
        <li><a href="#"><img src="../assets/images/researchTwo.webp" alt=""></a></li>
        <li><a href="#"><img src="../assets/images/researchThree.webp" alt=""></a></li>
      </ul>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  mounted() {
    let ul = document.getElementById("picList");
    let lies = ul.children ;
    // 第一个 li 变宽:增加类 active
    lies[1].classList.add("active");
    // 查找兄弟标签函数
    let findSiblings = function(tag){
      let parent = tag.parentNode ;
      let child = parent.children ;
      let sb = [];
      for(let i = 0 ; i <= child.length-1 ; i++ ){
        if( tag !== child[i]){
          sb.push( child[i]);
        }
      }
      return sb ;
    };
    
    for( let i = 0 ; i <= lies.length-1 ; i++  ){
      lies[i].addEventListener("mouseenter",function(){
        let siblings = findSiblings(this);
        // 当前标签变宽: 增加类 active
        this.classList.add("active");
        // 兄弟标签变窄
        for(let k = 0 ; k <= siblings.length-1 ; k++ ){
          // 兄弟标签去掉 active
          siblings[k].classList.remove("active");
        }
      });
    }
  },
};
</script>

<style lang="scss" scoped>
*{
  margin: 0;
  padding: 0;
}
ul,li,ol{
  list-style: none;
}
img{
  border:none;
}
/* 公用css 结束 */
 
.pics{
  width: 1000px; /* 1个 600px,4个 100px*/
  margin-left: auto;
  margin-right: auto;
  height: 400px;
  overflow: hidden;
}
.pics ul{
  display: flex;    /* flex 布局让 li 横向排列 */
  justify-content: space-between;  /* 内容靠向两端 */
}
.pics ul li{
  width: 200px;
  height: 400px;
  position: relative;
  overflow: hidden;
  transition:all 0.4s;   /* 过渡动画 */
  flex-grow: 1;   /* 让 li 始终能占满整个 ul ,保证变化过程中 li 之间没有缝隙 */
  margin-left: 15px;
}
.pics ul li img{
  position: absolute;   /* 确保图片在 li 里显示中间部分 */
  left:50%;
  top:0;
  margin-left: -300px;
}
.pics ul li.active{    /* 有类 active li 宽度为 600px。去掉,就会恢复 100px */
  width: 600px;
}
</style>

参考:JavaScript 练手小案例:超级简单又炫酷的图片手风琴效果_图片手风琴效果 js-CSDN博客

相关推荐
学如逆水,不进则退18 分钟前
在线免费音频剪辑:NBTools 可视化波形裁剪 MP3/WAV,本地处理免上传
前端·音视频
Mh27 分钟前
虚拟滚动真的比普通滚动性能更好吗?
前端·javascript·性能优化
pe7er32 分钟前
React + Ant Design 中的 IME (输入法合成)安全输入组件
前端
Super 含1 小时前
Android 启动优化(二):TTID、TTFD 与 Macrobenchmark 启动性能测量
前端
Python私教1 小时前
别急着加 llms.txt:企业官网面向 AI 搜索的工程清单
前端·人工智能·seo
东方小月1 小时前
从零开发一个 Coding Agent(十三):实现安全的 read 文件读取工具
前端·人工智能·全栈
东方小月2 小时前
从零开发一个 Coding Agent(十二):实现版本化 JSONL 与真实 CLI 入口
前端·设计模式·前端框架
FL16238631293 小时前
室内易燃物识别易燃评估室内易燃程度识别分割数据集labelme格式1015张85类别
java·服务器·前端
用户059540174463 小时前
把 AI 长期记忆去重测试从 20 分钟压到 40 秒,重复率从 18% 干到 1.5%
前端·css
kyriewen3 小时前
我把 AI 写的并发请求控制器手写了一遍——3 个语义我当时根本讲不清
前端·javascript·面试