Maison  >  Article  >  interface Web  >  Comment utiliser la méthode contain pour obtenir l'effet de fermer le panneau actuel en cliquant sur une partie vide de l'interface

Comment utiliser la méthode contain pour obtenir l'effet de fermer le panneau actuel en cliquant sur une partie vide de l'interface

一个新手
一个新手original
2017-10-17 09:36:131942parcourir

Aujourd'hui, j'ai ajouté une petite fonction au composant. Vous devez cliquer sur la partie vide de l'interface pour fermer le composant actuel. Après avoir cherché un moment, j'ai trouvé que la méthode est principalement jquery, et il n'y en a presque pas. js natif. Il plante. . C'est difficile de le sortir, il suffit de le noter par vous-même, ps : j'utilise réagir

La méthode à utiliser :

1.contains : C'est pour déterminer si un élément est sélectionné . L'élément enfant (ou lui-même) de l'élément spécifié ;

2.window.event.target : renvoie le nœud cible de l'événement. Par exemple, si vous cliquez sur un 4a249f0d628e2318394fd9b75b4636b18c8ed788f5d41dad0e415ece679755f5, il renverra ce h1; (le mauvais ie ne le supporte pas)

3.addEventListener : écoute d'événement, exemple, document.body.addEventListener('click',function(){ });

4.ref , il s'agit d'une méthode fournie par React pour sélectionner des éléments dom réels, et a la même fonction que la série native js document.document.getelementby...

<strong>示例:<br/><p</strong><br/><strong>  ref={(r) => {</strong><br/><strong>    this.pElem = r;</strong><br/><strong>  }}</strong><br/><strong>></strong><br/><strong></p></strong>

Ce qui précède est l'utilisation de es6, es5 (non recommandé) voir ici

Après toutes ces bêtises, le code sur l'image ci-dessus :

Rendu :

Code :

import React, { Component } from &#39;react&#39;;
import &#39;./index.less&#39;;

class CloseTheDomByClickBlankArea extends Component {
  state = {
    openCurrentArea: true,
  };

  componentDidMount() {
    // 点击blank_area区域,关闭current_area面板
    this.blankAreaElem.addEventListener(&#39;click&#39;, 
     this.handleClickCloseCurrentArea.bind(this));
  }

  handleClickCloseCurrentArea() {
    // 当界面上渲染出内部面板时,可执行如下操作(若无此判断条件,点击打开面板按钮区域,
     就会先触发如下操作,再触发handleClickOpenCurrentArea函数)
    if (document.body.contains(this.currentAreaElem)) {
      // 点击面板以外的部分(灰色区域以内,面板区域以外),就关闭面板
      if (this.blankAreaElem.contains(window.event.target) 
     && !this.currentAreaElem.contains(window.event.target)
    ) {
        this.setState({
          openCurrentArea: false,
        })
      }
    }
  }

  // 点击"打开面板"按钮,打开面板
  handleClickOpenCurrentArea() {
    this.setState({
      openCurrentArea: true,
    })
  }

  render() {
    return (
      <p
        className="blank_area"
        ref={(r) => {
          this.blankAreaElem = r;
        }}
      >

      {/* 打开面板按钮 */}
        <a
          role="button"
          tabIndex="0"
          className="btn_open_current_area"
          onClick={this.handleClickOpenCurrentArea.bind(this)}
        >
          <p className="btn_open_current_area_text">打开面板</p>
        </a>

   
      {/* 要关闭或开启的面板current_area */}
        {
          this.state.openCurrentArea
          &&
          61a9979edf4c3ad228b0d192600306e4 {
              this.currentAreaElem = r;
            }}
          >
            5977fe90fcb5b6c04c7282c8a011da56点击旁边灰色区域关闭当前面板94b3e26ee717c64999d7867364b1b4a3
          94b3e26ee717c64999d7867364b1b4a3
        }
      94b3e26ee717c64999d7867364b1b4a3
    );
  }
}

export default CloseTheDomByClickBlankArea;

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn