如何更改 Angular CDK 拖放的 z-index?

Tob*_*ann 9 css drag-and-drop angular-material angular angular-cdk

我在我的应用程序中使用了Angular Material CDK 拖放功能。拖放功能工作正常,除非我在对话框中使用它(对于大多数组件,我使用的是 Nebular,在这种情况下是 Nebular 对话框)。我遇到的问题是,只要我在对话框中拖动一个可拖动元素,该元素就会消失在对话框后面。放下后,它重新出现在正确的位置。在屏幕截图中,我将“AAAA”元素拖离列表 - 它消失在对话框后面。

可拖动按钮消失在对话框后面

Stackblitz:https ://stackblitz.com/edit/angular-znqckb

我正在使用以下实现:

 <div cdkDropList cdkDropListOrientation="horizontal" class="example-list" [cdkDropListData]="techs"
     (cdkDropListDropped)="drop($event)">
     <button *ngFor="let tech of techs" nbButton cdkDrag>{{tech}}</button>
 </div>
Run Code Online (Sandbox Code Playgroud)

组件.ts:

drop(event: CdkDragDrop<string[]>) {
    moveItemInArray(this.techs, event.previousIndex, event.currentIndex);
}
Run Code Online (Sandbox Code Playgroud)

我没有修改样式表。我认为可以通过修改 z-index 以某种方式解决此问题,但我不知道如何将其应用于“拖动”元素。

小智 10

您可以更改 DragRefConfig,在您的组件中注入正确的配置(具有所需的 z-index)。例如:

const DragConfig = {
  dragStartThreshold: 0,
  pointerDirectionChangeThreshold: 5,
  zIndex: 10000
};

providers: [{ provide: CDK_DRAG_CONFIG, useValue: DragConfig }]
Run Code Online (Sandbox Code Playgroud)

预览元素的 z-index 将为 10000 ;-)

更多信息:https : //material.angular.io/cdk/drag-drop/api#DragRefConfig


小智 6

我自己正在努力解决这个问题,目前我正在使用一个粗略的解决方法。在全局样式 (styles.scss) 中将 .cdk-overlay-container 的 z-index 强制设置为 1000 应该会得到您想要的结果。但这不是最佳实践。

在 styles.scss 中添加以下内容:

.cdk-overlay-container {
  z-index: 1000 !important;
}
Run Code Online (Sandbox Code Playgroud)

堆栈闪电战在这里

据我所知,不可能在拖动预览(“拖动”元素)上强制使用 z 索引,因为 cdk 将其 z 索引动态设置为内联样式。您使用的 Nebular 库似乎将叠加容器的 z 索引设置为 1040。Angular 材质库将拖动预览的 z 索引设置为 1000,这就是它位于叠加层后面的原因。Vanilla Angular Material 将 cdk 叠加层的 z-index 设置为 1000,因此拖放功能可以在这种情况下使用。