【问题标题】:Dropdown on a longer web-page较长网页上的下拉菜单
【发布时间】:2018-05-17 05:10:59
【问题描述】:

我想呈现一个下拉菜单,就像this webpage 这样当下拉菜单覆盖整个网页,删除滚动条,并卸载(?)网页的其余部分,但在这个过渡你仍然可以看到整个网页。我怎样才能实现这个功能?是否有某种方式可以卸载元素但仍会显示一段时间?谢谢!请参阅下面的 sn-p 以了解与我目前正在工作的类似内容。

class Comp extends React.Component {
  constructor() {
    super();
    this.state = {
      clicked: false,
      divId: "off"
    }
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    this.setState({clicked: !this.state.clicked});
    if (this.state.divId == "on") {
      this.setState({divId: "off"});
    } else {
      this.setState({divId: "on"});  
    }
  }

  render() {
    return (
      <div>
        <div id={this.state.divId}></div>
        <button onClick={this.handleClick}>Click Me</button>
        <div id="div1"></div>
        <div id="div1"></div>
        <div id="div1"></div>
        <div id="div1"></div>
        <div id="div1"></div>
      </div>
    );
  }
}

ReactDOM.render(<Comp />, app);
#div1 {
  background-color: red;
  height: 100px;
  width: 100px;
  margin-bottom: 15px;
}

button {
  position: absolute;
  z-index: 2;
}

#on {
  background-color: green;
  position: absolute;
  transition: height ease 0.5s;
  z-index: 1;
  width: 100%;
  height: 100%;

}

#off {
  background-color: green;
  position: absolute;
  z-index: 1;
  transition: height ease 0.5s;
  width: 100%;
  height: 0%;

}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="app"></div>

【问题讨论】:

  • 你想要的改进是什么?
  • 这个问题似乎有点太宽泛了。您需要更具体地解决您遇到的问题。

标签: javascript jquery css reactjs ecmascript-6


【解决方案1】:

隐藏和显示滚动条。查看代码中的 cmets。

class Comp extends React.Component {
  constructor() {
    super();
    this.state = {
      clicked: false,
      divId: "off"
    }
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    this.setState({clicked: !this.state.clicked});
    if (this.state.divId == "on") {
      this.setState({divId: "off"});
      document.body.classList.remove("scrollbar-hide");//Remove CSS class
    } else {
      this.setState({divId: "on"});  
      document.body.classList.add("scrollbar-hide"); //Add CSS class
    }
  }

  render() {
    return (
      <div>
        <div id={this.state.divId}></div>
        <button onClick={this.handleClick}>Click Me</button>
        <div id="div1"></div>
        <div id="div1"></div>
        <div id="div1"></div>
        <div id="div1"></div>
        <div id="div1"></div>
      </div>
    );
  }
}

ReactDOM.render(<Comp />, app);
#div1 {
  background-color: red;
  height: 100px;
  width: 100px;
  margin-bottom: 15px;
}

button {
  position: absolute;
  z-index: 2;
}

#on {
  background-color: green;
  position: absolute;
  transition: height ease 0.5s;
  z-index: 1;
  width: 100%;
  height: 100%;

}

#off {
  background-color: green;
  position: absolute;
  z-index: 1;
  transition: height ease 0.5s;
  width: 100%;
  height: 0%;

}

/* CSS class to remove scrollbar. */
.scrollbar-hide {
  overflow: hidden;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="app"></div>

【讨论】:

  • 天哪,你是我的英雄!谢谢@Ruan!
猜你喜欢
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多