js实现2D图片堆叠在一起呈现为3D效果,类似大楼楼层的效果,点击每个楼层不会被其他楼层遮挡

发布于:2025-04-23 ⋅ 阅读:(79) ⋅ 点赞:(0)

js实现2D图片堆叠在一起呈现为3D效果,类似大楼楼层的效果,点击每个楼层不会被其他楼层遮挡。实现过程使用元素的绝对定位,通过伪元素设置背景图片和文字,效果如下:

index.jsx:

import React, { useEffect, useState } from 'react'
import styles from './style.less'

export default function index() {

  const handleClick = (floor) => {
    console.log(floor);
  }


  return (
    <div className={styles.container}>
      <div className={styles.floor} onClick={() => handleClick(1)}></div>
      <div className={styles.floor} onClick={() => handleClick(2)}></div>
    </div>
  )
}

style.less:

.container {
  position: relative;
  width: 200px; /* 容器宽度 */
  height: 400px; /* 容器高度 */
}
 
.floor {
  position: absolute;
  cursor: pointer;
  &.disabled{
    // 阻止元素响应鼠标/指针事件,用户无法点击、悬停或与元素进行任何交互
    pointer-events: none;
    &::after{
      opacity: .15;
    }
  }
  &::before{
    transform: scale(0.71);
    content: "";
    display: block;
    transition: all .3s;
    pointer-events: none;
    position: absolute;
    background-repeat: no-repeat;
    background-position: center;
    background-size: cover;
  }
  &::after{
    display: block;
    position: absolute;
    font-style: italic;
    font-size: 23px;
    color: #ff0000;
    right: -146px;
    font-weight: 100;
  }
  &:hover{
    &::after{
      color: #ffffff;
      font-size: 25px;
    }
  }
  &:nth-child(1){
    bottom: 0px;
    &::before{
      width: 300px;
      height: 160px;
      background: url(~@/assets/images/1.png) no-repeat center / 100% 100%;
      top: -65px;
      left: -10px;
    }
    &::after{
      content: "1F";
      height: 36px;
      line-height: 36px;
    }
    &:hover{
      &::before{
        // background-image: url(/images/1f-active.png);
        background-color: #a5fcc8;
      }
    }
  }
  &:nth-child(2){
    bottom: 73px;
    &::before{
      width: 300px;
      height: 160px;
      background: url(~@/assets/images/1.png) no-repeat center / 100% 100%;
      top: -65px;
      left: -10px;
    }
    &::after{
      content: "2F";
      height: 36px;
      line-height: 36px;
    }
    &:hover{
      &::before{
        // background-image: url(/images/2f-active.png);
        background-color: #a5fcc8;
      }
    }
  }
}


网站公告

今日签到

点亮在社区的每一天
去签到