隐藏HTML元素,当点击外部时: “`html 如何在点击外部时隐藏HTML元素 “`

huangapple go评论92阅读模式
英文:

How to hide an html element when clicked outside

问题

我想知道一种方法,当点击HTML元素外部时(在我的情况下是),工具提示应该隐藏。我不想使用'ng-clicked-outisde'库。

是否有一种方法可以实现这一点。

这是我的代码链接:https://stackblitz.com/edit/angular-b61t71

谢谢。

英文:

I want to know a way in which when clicked outside an html element(in my case <span>, please see my code), the tooltip should hide. I don't want to use 'ng-clicked-outisde' library.

Is there a way in which we can achieve it.

Here is the link of my code: https://stackblitz.com/edit/angular-b61t71

Thank You.

答案1

得分: 2

你可以像这样使用 HostListenerViewChild

@ViewChild('tooltip') tooltip: ElementRef;

@HostListener('document:click', ['$event'])
clickout(event) {
  if (this.tooltip) {
    if (!this.tooltip.nativeElement.contains(event.target)) {
      this.clickHover = false;
    }
  }
}

并且更新 HTML 文件:

<div #tooltip class="tooltip" (click)="clickHover = true">点击我!
  <span [style.display]="clickHover ? 'block' : 'none'" class="tooltiptext">提示文本</span>
</div>

工作示例

英文:

You can use HostListener and ViewChild like this

@ViewChild(&#39;tooltip&#39;) tooltip: ElementRef;

  @HostListener(&#39;document:click&#39;, [&#39;$event&#39;])
  clickout(event) {
    if (this.tooltip) {
      if (!this.tooltip.nativeElement.contains(event.target)) {
        this.clickHover = false;
      }
    }
  }

and update html file

&lt;div #tooltip class=&quot;tooltip&quot; (click)=&quot;clickHover = true&quot;&gt;Click me!
  &lt;span  [style.display]=&quot;clickHover ? &#39;block&#39;:&#39;none&#39;&quot; class=&quot;tooltiptext&quot;&gt;Tooltip text&lt;/span&gt;
&lt;/div&gt;

WORKING EXAMPLE

答案2

得分: 1

在 .html 文件中,您可以添加一个类似这样的叠加层:

&lt;div class=&quot;overlay&quot; *ngIf=&quot;clickHover&quot; (click)=&quot;clickHover = false&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;tooltip&quot; (click)=&quot;clickHover = true&quot;&gt;点击我!
  &lt;span *ngIf=&quot;clickHover&quot; class=&quot;tooltiptext&quot;&gt;工具提示文本&lt;/span&gt;
&lt;/div&gt;

在 .css 文件中:

.overlay {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  width: 100%;
  height: 100%;
}
英文:

Maybe you could add an overlay like this :

In .html :

&lt;div class=&quot;overlay&quot; *ngIf=&quot;clickHover&quot; (click)=&quot;clickHover = false&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;tooltip&quot; (click)=&quot;clickHover = true&quot;&gt;Click me!
  &lt;span *ngIf=&quot;clickHover&quot; class=&quot;tooltiptext&quot;&gt;Tooltip text&lt;/span&gt;
&lt;/div&gt;

in .css :

.overlay {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  width: 100%;
  height: 100%;
}

答案3

得分: 0

在您的组件的根元素上绑定事件,或在文档元素上绑定事件,或在文档的包装器上绑定事件,并处理以下情况:

  1. 单击您的元素
  2. 单击其他元素
英文:

Bind event on a root element of your component or on document element or on the wrapper of your document and handle cases:

  1. click on your element
  2. click on other elements

huangapple
  • 本文由 发表于 2020年1月6日 22:50:50
  • 转载请务必保留本文链接:https://go.coder-hub.com/59614153.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定