最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

如何利用contains方法實(shí)現(xiàn)點(diǎn)擊界面空白部分關(guān)閉當(dāng)前面板的效果

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 20:11:58
文檔

如何利用contains方法實(shí)現(xiàn)點(diǎn)擊界面空白部分關(guān)閉當(dāng)前面板的效果

如何利用contains方法實(shí)現(xiàn)點(diǎn)擊界面空白部分關(guān)閉當(dāng)前面板的效果:今天給組件添加一個(gè)小功能,需要點(diǎn)擊界面空白部分關(guān)閉當(dāng)前組件,找了好一會(huì)兒,發(fā)現(xiàn)主要是jquery的方法,js原生幾乎沒(méi)有,崩潰。好不容易弄出來(lái)了,就給自己做個(gè)筆記吧,ps:我用的react要用到的方法:1.contains:就是判斷某個(gè)元素是不是選定元素的子元素
推薦度:
導(dǎo)讀如何利用contains方法實(shí)現(xiàn)點(diǎn)擊界面空白部分關(guān)閉當(dāng)前面板的效果:今天給組件添加一個(gè)小功能,需要點(diǎn)擊界面空白部分關(guān)閉當(dāng)前組件,找了好一會(huì)兒,發(fā)現(xiàn)主要是jquery的方法,js原生幾乎沒(méi)有,崩潰。好不容易弄出來(lái)了,就給自己做個(gè)筆記吧,ps:我用的react要用到的方法:1.contains:就是判斷某個(gè)元素是不是選定元素的子元素
今天給組件添加一個(gè)小功能,需要點(diǎn)擊界面空白部分關(guān)閉當(dāng)前組件,找了好一會(huì)兒,發(fā)現(xiàn)主要是jquery的方法,js原生幾乎沒(méi)有,崩潰。好不容易弄出來(lái)了,就給自己做個(gè)筆記吧,ps:我用的react

要用到的方法:

1.contains:就是判斷某個(gè)元素是不是選定元素的子元素(或本身);

2.window.event.target:返回事件的目標(biāo)節(jié)點(diǎn),比如你點(diǎn)擊了某個(gè)<h1></h1>,它就返回這個(gè)h1;(萬(wàn)惡的ie不支持)

3.addEventListener:事件監(jiān)聽(tīng),示例,document.body.addEventListener('click',function(){ });

4.ref,這個(gè)是react提供的選擇真實(shí)dom元素的方法,和js原生的document.document.getelementby...系列作用一樣

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

上面是es6的用法,es5(不推薦)看這里

廢話說(shuō)完,上圖上代碼:

效果圖:

代碼:

import React, { Component } from 'react';
import './index.less';

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

 componentDidMount() {
 // 點(diǎn)擊blank_area區(qū)域,關(guān)閉current_area面板
 this.blankAreaElem.addEventListener('click', 
  this.handleClickCloseCurrentArea.bind(this));
 }

 handleClickCloseCurrentArea() {
 // 當(dāng)界面上渲染出內(nèi)部面板時(shí),可執(zhí)行如下操作(若無(wú)此判斷條件,點(diǎn)擊打開(kāi)面板按鈕區(qū)域,
    就會(huì)先觸發(fā)如下操作,再觸發(fā)handleClickOpenCurrentArea函數(shù))
 if (document.body.contains(this.currentAreaElem)) {
 // 點(diǎn)擊面板以外的部分(灰色區(qū)域以內(nèi),面板區(qū)域以外),就關(guān)閉面板
 if (this.blankAreaElem.contains(window.event.target) 
     && !this.currentAreaElem.contains(window.event.target)
    ) {
 this.setState({
 openCurrentArea: false,
 })
 }
 }
 }

 // 點(diǎn)擊"打開(kāi)面板"按鈕,打開(kāi)面板
 handleClickOpenCurrentArea() {
 this.setState({
 openCurrentArea: true,
 })
 }

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

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

   
    {/* 要關(guān)閉或開(kāi)啟的面板current_area */}
 {
 this.state.openCurrentArea
 &&
 <p
 className="current_area"
 ref={(r) => {
 this.currentAreaElem = r;
 }}
 >
 <p className="current_area_text">點(diǎn)擊旁邊灰色區(qū)域關(guān)閉當(dāng)前面板</p>
 </p>
 }
 </p>
 );
 }
}

export default CloseTheDomByClickBlankArea;

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

如何利用contains方法實(shí)現(xiàn)點(diǎn)擊界面空白部分關(guān)閉當(dāng)前面板的效果

如何利用contains方法實(shí)現(xiàn)點(diǎn)擊界面空白部分關(guān)閉當(dāng)前面板的效果:今天給組件添加一個(gè)小功能,需要點(diǎn)擊界面空白部分關(guān)閉當(dāng)前組件,找了好一會(huì)兒,發(fā)現(xiàn)主要是jquery的方法,js原生幾乎沒(méi)有,崩潰。好不容易弄出來(lái)了,就給自己做個(gè)筆記吧,ps:我用的react要用到的方法:1.contains:就是判斷某個(gè)元素是不是選定元素的子元素
推薦度:
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專題
Top