【发布时间】:2020-01-06 04:59:22
【问题描述】:
我有一个 hover(mouseenter)、click、mouseleave 的实现,它在目标元素悬停时显示和隐藏弹出模式组件。
但问题是弹出模式组件打开时离悬停元素有点远,这是由于我给出的top,left 位置。
我怎样才能正确定位这个模态组件,是否可以将弹出组件放在鼠标光标的一侧,而不是将弹出组件放在悬停元素的一侧?
(当我将鼠标悬停在元素上时,弹出组件的距离也会发生变化)。
也许 CSS :after 可以成为一个解决方案?
最小可重现示例
https://stackblitz.com/edit/angular-34rr1t?file=src/app/app.component.html
用于处理弹出模式打开和关闭的TS文件
modalShow = false;
modalleft;
modaltop;
addClickEvent(e,name) {
if (e.type === 'click') {
this.modalShow= true;
}
else if (e.type === 'mouseenter') {
this.modalleft = e.clientX
this.modaltop = e.clientY
this.closeModal("room");
this.modalShow= true;
}
else if (e.type === 'mouseleave') {
this.closeModal('room');
this.modalShow= false;
}
}
closeModal(modalType: string) {
this.modal[modalType].active = false;
}
用于处理弹出模式打开和关闭的 HTML
<div class="fs-heatmap-wrapper__content__box"
*ngFor="let existingZone of floor.droppeditem"
(mouseenter)="addClickEvent($event,floor.name)"
(mouseleave)="addClickEvent($event,floor.name)"
(click)="addClickEvent($event,floor.name)">
</div>
<fs-modal *ngIf="!modalShow"
[ngStyle]="{'top.px': modalleft,
'left.px':modaltop ,
'position':'absolute'}"
(onCloseModal)="closeModal('room')">
</fs-modal>
HTML fs-模态
<div class="modal">
<div class="modal__body">
</div>
</div>
CSS fs-modal
.modal {
background: rgba(0, 0, 0, 0.5);
max-height: 100%;
overflow-y: scroll;
z-index: 9999999;
&__body {
pointer-events: all;
padding: 50px;
background: #ffffff;
box-shadow: 4px 45px 23px -6px rgba(0, 0, 0, 0.4);
margin: 2% 0;
height: auto;
*min-height: 1200px;
}
【问题讨论】:
-
我已经更新了带有 modalshow 标志的代码以显示和隐藏,现在谁能帮我将它们定位在鼠标指针旁边,这将是一个很大的帮助,谢谢
-
我也遇到过 stackoverflow.com/questions/15702867/… ,但是如何在 Angular 中实现
-
当鼠标从悬停在弹出窗口的顶部进入时,弹出窗口会在鼠标指针附近打开,而当鼠标从底部、左、右进入时,它会出现在上面发布的图像中
标签: javascript html css angular angular7