簡體   English   中英

如何通過拖動整個底部邊框線而不是反應中的右下角來調整div的高度?

[英]How to adjust div height by dragging whole bottom border line instead of bottom right corner in react?

我有一個反應成分。 我可以通過添加resize: vertical; overflow: auto;來調整高度resize: vertical; overflow: auto; resize: vertical; overflow: auto; 在我的css文件中。 但是,我只能通過拖動邊框的右下角進行調整。 是否可以將其更改為整個底線? 或任何其他的反應API可以做到這一點? 這是我如何通過拖動右下角來調整高度的示例

這是我的組件。

<div class='map'>
      <MyMapComponent
        handleChange={this.handleChange}
        handleSubmit={this.handleSubmit}
        date ={this.state.date}
        getMap={this.getMap}
        updateStatus = {this.state.updateStatus}
        filter={this.state.filter}
        filterList={this.state.filterList}
        inputProps={{
            classes: {
                input: classes.multilineColor
            }
        }}
      >
      {/*this.getMap()*/}

      </MyMapComponent>
         </div>

這是我的css文件。

.map{
  border: 2px solid;
  padding: 20px; 
  width: 300px;
  resize: vertical;
  overflow: auto;
}

我按照此水平調整大小面板示例創建一個垂直調整面板示例

這是我編輯過的調整大小面板

import React from "react"
import ReactDOM from "react-dom";
import './ResizablePanels.css';

class ResizablePanels extends React.Component {
  eventHandler = null

  constructor () {
    super()

    this.state = {
      isDragging: false,
      panels: [800, 300, 0]
    }
  }

  componentDidMount () {
    ReactDOM.findDOMNode(this).addEventListener('mousemove', this.resizePanel)
    ReactDOM.findDOMNode(this).addEventListener('mouseup', this.stopResize)
    ReactDOM.findDOMNode(this).addEventListener('mouseleave', this.stopResize)
  }

  startResize = (event, index) => {
    this.setState({
      isDragging: true,
      currentPanel: index,
      initialPos: event.clientY
    })
  }

  stopResize = () => {
    if (this.state.isDragging) {
      console.log(this.state)
      this.setState(({panels, currentPanel, delta}) => ({
        isDragging: false,
        panels: {
          ...panels,
          [currentPanel]: (panels[currentPanel] || 0) - delta,
          [currentPanel - 1]: (panels[currentPanel - 1] || 0) + delta
        },
        delta: 0,
        currentPanel: null
      }))
      console.log(this.state)
    }
  }

  resizePanel = (event) => {
    if (this.state.isDragging) {
      //console.log(event.clientY +" "+this.state.initialPos);
      const delta = event.clientY - this.state.initialPos
      this.setState({
        delta: delta
      })
    }
  }

  render() {
    const rest = this.props.children.slice(1);
   // console.log(this.props);
    return (
      <div className="panel-container" onMouseUp={() => this.stopResize()}>
        <div className="panel" style={{height: this.state.panels[0]}}>
          {this.props.children[0]}
        </div>
        {[].concat(...rest.map((child, i) => {
          return [
            <div onMouseDown={(e) => this.startResize(e, i + 1)}
              key={"resizer_" + i}
              style={this.state.currentPanel === i+1 ? {top: this.state.delta} : {}}
              className="resizer"></div>,
            <div key={"panel_" + i} className="panel" style={{height: this.state.panels[i + 1]}}>
              {child}
            </div>
          ]
        }))}
      </div>
    )
  }
}

export default ResizablePanels;

這是我的面板的css文件

@import url('https://fonts.googleapis.com/css?family=Ubuntu');

html {
  background: #333;
  font-family: sans-serif;
}
h1 {
  color: white;
}

.panel-container {
  display: flex;
  min-height: 100%;
  justify-content: center;
  flex-direction: column;
  text-align: center;
}

.panel {
  background: #EEE;
  border: 0px solid gray;
  padding: 1px;
}
.panel:first-child {

}

.resizer {
  height: 8px;
  background: darkGray;
  position: relative;
  cursor: row-resize;
  flex-shrink: 0;
  -webkit-user-select: none;  /* Chrome all / Safari all */
  -moz-user-select: none;     /* Firefox all */
  -ms-user-select: none;      /* IE 10+ */
  user-select: none;          /* Likely future */ 
}

.resizer::after,
.resizer::before {
  content: "";
  border-left: 1px solid #333;
  position: absolute;
  top: 50%;
  transform: translateX(-100%);
  right: 0;
  display: inline-block;
  height: 20px;
  margin: 0 2px;
}
.resizer::before {
  top: 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM