javascript - 单击调整div的大小

标签 javascript html css reactjs

我一直在尝试向 div 添加一个 onClick 事件,该事件会在单击该 div 时将 div 的大小调整为全屏,但是当我单击一个 div 时,所有的 div 都会展开。如何将 onClick 事件限制为仅单个 div 并使该单个 div 调整为全屏?我还添加了过渡,这样当它调整到全屏时,它看起来像一个动画,但是当只点击一个 div 时所有的 div 都受到它的影响

import React from "react";
import "./styles.scss";

const colors = [
  "palevioletred",
  "red",
  "green",
  "blue",
  "yellow",
  "orange",
  "lightblue"
];

const randomColor = items => {
  return items[randomHeight(0, items.length)];
};

const randomHeight = (min, max) => {
  return Math.floor(min + Math.random() * (max - min + 1));
};

export default class App extends React.Component {
  constructor(props) {
    super(props);
    this.addActiveClass = this.addActiveClass.bind(this);
    this.state = {
      active: false
    };
  }
  addActiveClass() {
    const currentState = this.state.active;
    this.setState({ active: !currentState });
  }
  render() {
    return (
      <div class="container">
        {Array.from({ length: 30 }).map((item, index) => (
          <div
            key={index}
            style={{
              background: randomColor(colors),
              height: randomHeight(100, 200)
            }}
            className={this.state.active ? "full" : null}
            onClick={this.addActiveClass}
          />
        ))}
      </div>
    );
  }
}
* {
  box-sizing: border-box;
}

body {
  margin: 40px;
  background-color: #fff;
  color: #444;
  font: 2em Sansita, sans-serif;
}

.container {
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
  max-height: 100vh;
}

.container > * {
  border: 2px solid orange;
  border-radius: 5px;
  margin: 10px;
  padding: 10px 20px;
  background-color: red;
  color: #fff;
}

.full{
  width: 100%;
  height: 100%;
  transition: 2s;
}

codesandbox

最佳答案

目前您与所有 div 共享一个状态。为了解决这个问题,创建activeIndex 状态,用-1 初始化它,然后像这样使用它:

  // ...

class App extends React.Component {
  constructor(props) {
    super(props);
    this.addActiveClass = this.addActiveClass.bind(this);
    this.state = {
      activeIndex: -1
    };
  }
  addActiveClass(activeIndex) {
    this.setState(prev => ({
      activeIndex: prev.activeIndex === activeIndex ? -1 : activeIndex
    }));
  }

  render() {
    return (
      <div className="container">
        {Array.from({ length: 30 }).map((item, index) => {
          return (
            <div
              key={index}
              style={{
                background: randomColor(colors),
                height: randomHeight(100, 200)
              }}
              className={this.state.activeIndex === index ? "full" : ""}
              onClick={() => this.addActiveClass(index)}
            />
          );
        })}
      </div>
    );
  }
}

关于javascript - 单击调整div的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63048238/

相关文章:

html - 背景图像 CSS 内联不起作用

php - 我在我的 php 脚本中找不到错误

javascript - 如何使用 Clipboard.js 复制输入的值

css - CSS 中的 URL 应该如何引用资源文件夹中的图像

javascript - 禁用样式表以提高显示/隐藏 div 的速度

javascript - jquery 移动设备方向更改不调整文本区域的大小

javascript - 音频 WMA 错误地报告为视频/x-ms-wma

javascript - 将下拉行为更改为悬停而不是点击

javascript - AngularJS 添加一个按钮微调器

html - 如何在 ipad 中使 div 可滚动?