Element: [Bug Report] If there is a full screen effect on a DIV, the Popover and Tooltip will not display properly.如果一个DIV开启全屏效果,则Popover和Tooltip不能正常显示。

Created on 12 Oct 2019  ·  12Comments  ·  Source: ElemeFE/element

Element UI version

2.12.0

OS/Browsers version

Windows 10 Pro 1903 / Google Chrome 77.0.3865.90

Vue version

2.6.10

Reproduction Link

https://jsfiddle.net/3ej0x5yf/

Steps to reproduce

click the blue button to full screen, the Popover and Tooltip will not display properly

What is Expected?

If there is a full screen effect on a DIV, the Popover and Tooltip is ok.

What is actually happening?

If there is a full screen effect on a DIV, the Popover and Tooltip will not display properly

Most helpful comment

最近也遇到了同样的问题,看了下element的源码,发现可以这么解决~
popover可以直接加:append-to-body="false",但是tooltip麻烦点,加完appendToBody后发现弹出内容没有插入dom……所以自己写了个指令作为辅助,解决问题^_^

/*
!!! 使用此指令需要先设置<el-tooltip :append-to-body="false">

例子1:v-el-tooltip-append-to="$des"
例子2:v-el-tooltip-append-to
说明:$des为要将文字提示的弹出框插入的目的节点元素,不写则默认插入指令绑定节点元素的父节点
*/
import { DirectiveBinding } from 'vue/types/options';
import { VNode } from 'vue';

export default {
  bind(el: any, binding: DirectiveBinding, vnode: VNode) {
    el.tooltipAppend = () => {
      // 插入的目的节点元素
      const des = binding.value || el.parentElement;
      // 获取tooltip的节点元素popper
      const popper = vnode.componentInstance && vnode.componentInstance.$refs.popper as Element;
      // 将popper插入目的节点元素
      if (popper && des && !document.getElementById(popper.id)) {
        des.appendChild(popper);
      }
    };

    el.removeEventListener('mouseenter', el.tooltipAppend);
    el.addEventListener('mouseenter', el.tooltipAppend);
  },
  unbind(el: any) {
    el.removeEventListener('mouseenter', el.tooltipAppend);
  },
};

All 12 comments

如果一个DIV开启全屏效果,则Popover和Tooltip不能正常显示。

如果一个DIV开启全屏效果,则Popover和Tooltip不能正常显示。

我也遇到了这个问题,不能正常显示的原因是因为Popover和Tooltip是直接挂在body下,局部全屏只能全屏你这个div以及内部的元素。 不过我参考官方提供api修改Popover的opover-options好像没什么效果。

Hi all, I just fix this using body tag element. if el-tooltip element apended to body means you should assign the body element as fullscreen element..

var element = document.getElementsByTagName('body')[0];

同样问题,觉得 tooltip 和 popover 应该提供类似 getContainer 之类的 props

最近也遇到了同样的问题,看了下element的源码,发现可以这么解决~
popover可以直接加:append-to-body="false",但是tooltip麻烦点,加完appendToBody后发现弹出内容没有插入dom……所以自己写了个指令作为辅助,解决问题^_^

/*
!!! 使用此指令需要先设置<el-tooltip :append-to-body="false">

例子1:v-el-tooltip-append-to="$des"
例子2:v-el-tooltip-append-to
说明:$des为要将文字提示的弹出框插入的目的节点元素,不写则默认插入指令绑定节点元素的父节点
*/
import { DirectiveBinding } from 'vue/types/options';
import { VNode } from 'vue';

export default {
  bind(el: any, binding: DirectiveBinding, vnode: VNode) {
    el.tooltipAppend = () => {
      // 插入的目的节点元素
      const des = binding.value || el.parentElement;
      // 获取tooltip的节点元素popper
      const popper = vnode.componentInstance && vnode.componentInstance.$refs.popper as Element;
      // 将popper插入目的节点元素
      if (popper && des && !document.getElementById(popper.id)) {
        des.appendChild(popper);
      }
    };

    el.removeEventListener('mouseenter', el.tooltipAppend);
    el.addEventListener('mouseenter', el.tooltipAppend);
  },
  unbind(el: any) {
    el.removeEventListener('mouseenter', el.tooltipAppend);
  },
};

@linjiajian999 如果我在 el-dialog 中使用了 el-tooltip,你的辅助指令也能显示加了 append-to-body="false" 的 tooltip 吗

@linjiajian999 如果我在 el-dialog 中使用了 el-tooltip,你的辅助指令也能显示加了 append-to-body="false" 的 tooltip 吗

@Leecason 老哥是不是 艾特 错人了

@linjiajian999 如果我在 el-dialog 中使用了 el-tooltip,你的辅助指令也能显示加了 append-to-body="false" 的 tooltip 吗

@Leecason 老哥是不是 艾特 错人了

对不起~😄

@linjiayu2012 如果我在 el-dialog 中使用了 el-tooltip,你的辅助指令也能显示加了 append-to-body="false" 的 tooltip 吗

@linjiayu2012 如果我在 el-dialog 中使用了 el-tooltip,你的辅助指令也能显示加了 append-to-body="false" 的 tooltip 吗

可以的,这个指令只是用来解决将tooltip的append-to-body设置为false时提示框没有插入dom的问题。

发现datepicker 以及 下拉框也存在这种问题 有办法解决吗 ?

发现datepicker 以及 下拉框也存在这种问题 有办法解决吗 ?

可以的,他们俩实际用的是popover。datepicker可以直接用:append-to-body="false",下拉框的话官方文档有说明,可以用:popper-append-to-body="false"

Was this page helpful?
0 / 5 - 0 ratings

Related issues

makunsusu picture makunsusu  ·  3Comments

yubo111 picture yubo111  ·  3Comments

FranzSkuffka picture FranzSkuffka  ·  3Comments

akaylh picture akaylh  ·  3Comments

yorululu picture yorululu  ·  3Comments