contains方法

contains() 实现点击界面空白部分关闭当前面板的效果
  • contains 判断某个元素是不是选定元素的子元素或者本身。
  • window.event.target 返回事件的目标节点,比如点击了某个<div></div>就会返回div。
  • addEventListener 事件监听 window.addEventListener('click',function(){})
  • ref 这是react 提供的选择真实DOM的方法。
import React,{ Component,Fragment } from 'react';
import { Button } from 'antd';
class Accessibility extends Component {
    constructor(props){
        super(props);
        this.toggleContainer = React.createRef();
        this.onClickOutsideHandler = this.onClickOutsideHandler.bind(this);

        this.state = {
            isOpen: false,
        }
    }

    componentDidMount() {
        window.addEventListener("click",this.onClickOutsideHandler);
    }

    componentWillUnmount() {
        window.addEventListener("click",this.onClickOutsideHandler);
    }
  
    ulClick() {
        this.setState(currentState=>({
            isOpen: !currentState.isOpen
        }))
    }

    onClickOutsideHandler(event) {
        console.log('event',this.toggleContainer);
        if(this.state.isOpen && !this.toggleContainer.current.contains(event.target)) {
           this.setState({isOpen: false})
        }
    }
    render() {
        return(
            <div>
                <div className='border background' ref={ this.toggleContainer}>
                    <Button type='primary' onClick={ this.ulClick.bind(this)}>Select an option</Button>
                    { this.state.isOpen ?
                        <ul>
                            <li>Option 1</li>
                            <li>Option 2</li>
                            <li>Option 3</li>
                        </ul>:null
                    }
                </div>
            </div>
        )
    }
}

export default Accessibility;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值