Skip to content
泠泠彻夜的笔记
Main Navigation首页笔记
HTML
CSS
JavaScript
TypeScript
Node.js
Vue3
uniapp
插件
算法题

外观

此页内容
Table of Contents for current page
  • 1. 问题解决:contains
blogs

悬浮面板点击操作显示隐藏

怡然

345字约1分钟

自用小组件Javascript

2025-01-13

相关信息

需求中需要在一个输入框中点击获得焦点时弹出一个悬浮框,悬浮框内部可以进行输入搜索、点选等操作,点击非悬浮面板区域则隐藏面板。显示的操作可以通过输入框获得焦点的方法实现,但是隐藏显然不可以使用失去焦点的事件。因为悬浮面板中还需进行多个获取焦点的操作,一旦面板获取焦点就会直接隐藏,无法进行后续操作。

1. 问题解决:contains

<template>
<el-input readonly v-model="queryForm.dept" @focus="showDePanel = true" id="panel-one"
  style="max-width: 180px;height: 40px;">
</el-input>
<search-panel v-if="showDePanel" :list="departmentList" @get-node="getDeNode"
  @close-panel="showDePanel = false">
</search-panel>
<el-input readonly v-model="queryForm.business" @focus="showBuPanel = true" id="panel-two"
  style="max-width: 180px;height: 40px;">
</el-input>
<search-panel v-if="showBuPanel" :list="businessList" @get-node="getBuNode"
  @close-panel="showBuPanel = false">
</search-panel>
</template>
<script>
export default{
  methods:{
    handleGlobalClick(event) {
      const target = event.target;
      this.positionOne = document.querySelector('#panel-one'); // 输入框一
      this.positionTwo = document.querySelector('#panel-two'); // 输入框二
      if (this.positionOne && this.positionOne.contains(target)) {
        this.showDePanel = true;  // showDePanel为其中一个悬浮框显示隐藏的控制字段
      } else {
        this.showDePanel = false;
      }
      if (this.positionTwo && this.positionTwo.contains(target)) {
        this.showBuPanel = true;
      } else {
        this.showBuPanel = false;
      }
    },
  },
  beforeDestroy() {
    document.removeEventListener('click', this.handleGlobalClick);
  },
  watch: {
    showDePanel(newValue, oldValue) {
      if (newValue) {
        document.addEventListener('click', this.handleGlobalClick);
      } else {
        document.removeEventListener('click', this.handleGlobalClick);
      }
    },
    showBuPanel(newValue, oldValue) {
      if (newValue) {
        document.addEventListener('click', this.handleGlobalClick);
      } else {
        document.removeEventListener('click', this.handleGlobalClick);
      }
    },
  },
}
</script>
贡献者: tsxwslk
上一页扩散圆效果
下一页el-table表格线问题

Power by VuePress & vuepress-theme-plume