dom元素+CSS实现阶梯动画效果

1.效果

2.代码实现

javascript 复制代码
<template>
  <div class="container">
    <div class="Box">
      <div class="box" style="background-color: red;"></div>
      <div class="box" style="background-color: orange;"></div>
      <div class="box" style="background-color: yellow;"></div>
      <div class="box" style="background-color: green;"></div>
      <div class="box" style="background-color: skyblue;"></div>
      <div class="box" style="background-color: blue;"></div>
    </div>
  </div>
</template>
<script>

export default {
  mounted () {
    this.setActions()
  },
  methods: {
    setActions () {
      //选中所有盒子
      const arr = document.querySelectorAll('.box')
 
 	  //循环添加事件监听
      arr.forEach(e => {
        e.addEventListener('mouseenter', () => {
          //通过添加类名实现盒子上移
          e.classList.add('boxMoveTwoStep')
          //判断前后的兄弟节点是否存在
          if (e.previousElementSibling) {//上一个节点
            e.previousElementSibling.classList.add('boxMoveOneStep')
          }
          if (e.nextElementSibling) {//下一个节点
            e.nextElementSibling.classList.add('boxMoveOneStep')
          }
        })
		//鼠标移除恢复盒子位置
        e.addEventListener('mouseleave', () => {
          e.classList.remove('boxMoveTwoStep')
          if (e.previousElementSibling) {
            e.previousElementSibling.classList.remove('boxMoveOneStep')
          }
          if (e.nextElementSibling) {
            e.nextElementSibling.classList.remove('boxMoveOneStep')
          }
        })
      })
    }
  }
}
</script>
<style lang='scss' scoped>
.container {
  width: 100%;
  height: 100%;
  overflow-y: hidden;
  position: relative;

  .Box {
    position: absolute;
    bottom: -50px;
    width: 100%;
    height: 100px;
  }

  .box {
    width: 50px;
    height: 100px;
    display: inline-block;
    background-color: pink;
    transition: 0.3s;
  }
}

.boxMoveOneStep {
  transform: translate(0px, -30px);
}

.boxMoveTwoStep {
  transform: translate(0px, -50px);
}
</style>
相关推荐
翻滚吧键盘2 分钟前
vue绑定一个返回对象的计算属性
前端·javascript·vue.js
苦夏木禾7 分钟前
js请求避免缓存的三种方式
开发语言·javascript·缓存
超级土豆粉15 分钟前
Turndown.js: 优雅地将 HTML 转换为 Markdown
开发语言·javascript·html
秃了也弱了。21 分钟前
Chrome谷歌浏览器插件ModHeader,修改请求头,开发神器
前端·chrome
乆夨(jiuze)41 分钟前
记录H5内嵌到flutter App的一个问题,引发后面使用fastClick,引发后面input输入框单击无效问题。。。
前端·javascript·vue.js
忧郁的蛋~1 小时前
HTML表格导出为Excel文件的实现方案
前端·html·excel
小彭努力中1 小时前
141.在 Vue 3 中使用 OpenLayers Link 交互:把地图中心点 / 缩放级别 / 旋转角度实时写进 URL,并同步解析显示
前端·javascript·vue.js·交互
然我1 小时前
别再只用 base64!HTML5 的 Blob 才是二进制处理的王者,面试常考
前端·面试·html
NanLing1 小时前
【纯前端推理】纯端侧 AI 对象检测:用浏览器就能跑的深度学习模型
前端
呆呆的心1 小时前
前端必学:从盒模型到定位,一篇搞定页面布局核心 🧩
前端·css