改变垫子展开指示器的旋转

2023-12-09

我成功地将垫指示器移动到左侧,而不是右侧,并且我使用变换属性使其在展开时向内转动。不过,我希望指示器在展开时朝上,在折叠时朝下。我如何正确地设计它来实现这一目标:https://stackblitz.com/edit/indicatorrotation?file=styles.css

扩展概述-example.css

  .mat-expansion-panel-header {
       flex-direction: row-reverse;
   } 

全局样式.css

  .mat-expansion-indicator::after {
      transform: rotate(225deg) !important;  
}

垫扩展指示器的旋转由以下方式处理这个动画。正如在那里所看到的,这很简单rotate(180deg)(顺时针 180 度)。并且指标最初有rotate(45deg)当面板关闭时默认显示向下图标,当面板打开时默认显示向上图标并带有顺时针动画。

当您应用旋转时;

.mat-expansion-indicator::after {
    transform: rotate(225deg) !important;  
}

当面板关闭时,图标最初向上旋转,单击时顺时针旋转 180 度。此时,关闭时无法显示向下图标,打开时无法显示向上图标,因为rotate(225deg)如果你改变它,你就会失去向内转动的能力,因为动画是顺时针开始的,但我们需要完全相反的东西。

最终,在不覆盖默认动画的情况下不可能逆时针旋转。不幸的是,Angular Material 没有任何机制来覆盖默认动画,如这里所见 .

所以我的解决方案是完全禁用默认动画mat-expansion-panel-header并实现一个模仿的自定义指令这个动画但逆时针方向。

首先禁用默认动画mat-expansion-panel-header;

<mat-expansion-panel-header [@.disabled]="true">

然后创建新的动画styles.css with 相同的时间和行为作为默认动画。

@keyframes inwards-open {
  0%   { transform: rotate(0deg); }
  100% { transform: rotate(-135deg); }
}

@keyframes inwards-close {
  0%   { transform: rotate(-135deg); }
  100% { transform: rotate(0deg); }
}

.openAnimate {
  animation: inwards-open 225ms cubic-bezier(0.4,0.0,0.2,1) !important;
}

.closeAnimate {
  animation: inwards-close 225ms cubic-bezier(0.4,0.0,0.2,1) !important;
}

并实现一个自定义指令,根据面板打开/关闭事件处理动画状态

import { Directive, ElementRef, HostListener, AfterViewInit, OnDestroy } from '@angular/core';
import { fromEvent, Subscription } from 'rxjs';

@Directive({
  selector: '[appCustomMatExpansionToggle]'
})
export class CustomMatExpansionToggleDirective implements AfterViewInit, OnDestroy {
  private elem: HTMLSpanElement;
  private uns: Subscription;
  constructor(private elRef: ElementRef) {}

  ngAfterViewInit() {
    this.elem = this.elRef.nativeElement.querySelector(".mat-expansion-indicator");

    this.uns = fromEvent(this.elem, 'animationend').subscribe(() => {
      this.elem.classList.remove("openAnimate");
      this.elem.classList.remove("closeAnimate");
    });
  }

  @HostListener("opened")
  onOpen() {
    this.elem.classList.add("openAnimate");
  }

  @HostListener("closed")
  onClose() {
    this.elem.classList.add("closeAnimate");
  }

  ngOnDestroy() {
    this.uns.unsubscribe();
  }
}

最后将自定义指令应用到mat-expansion-panel

<mat-expansion-panel appCustomMatExpansionToggle>

这是一个工作演示https://stackblitz.com/edit/indicatorrotation-mp73uh

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

改变垫子展开指示器的旋转 的相关文章

  • CSS 背景在 iOS 中拉伸以填充高度,但滚动上有空白

    这个 CSS 让我的背景在 iOS 中填充 100 的屏幕高度 但有一个小问题 当你向下滚动时 最初有空白 然后当你松开手指并停止滚动时 背景图像会 调整 并填充 100再次屏幕高度的 如果您继续滚动 该问题不会在同一页面上再次出现 只是第
  • Sitecore 多种 RTE 类样式

    我可以为 RichTextEditor RTE 添加 CSS 样式路径 如下所示 并且我可以在 RTE 中选择定义的样式
  • 不透明动画在 IE 上不起作用

    我有一个动画菜单 其中包含一些级联不透明动画 这些动画在打开菜单和悬停每个按钮时执行 它只是每 100 毫秒向菜单上的每个图标添加 colorHigh 类 你可以看到一个现场演示在这里 http germanalvarez net 5 la
  • Angular2 - 更改位置而不触发路线

    我有一个使用服务来加载项目列表的视图 我总是只显示一个项目 并使用 gt 按钮在项目之间移动 有没有办法在不触发 Angular 路由系统的情况下更改浏览器地址栏中的地址并将记录添加到浏览器历史记录中 我知道如果我使用 location g
  • Angular 中的动态子组件

    我正在构建一个具有一致的元素列表设计模式的应用程序 如果我有一个 A 类型的对象 我会创建AComponent它接受a作为输入 然后创建另一个组件来迭代 A 列表 AListComponent 那么如果我有一个对象 B 我需要做同样的事情
  • 使用验证器禁用 FormGroup

    I had formArray我的复选框checkboxForm 如果没有复选框 我需要禁用按钮提交checked 我在我的上实现了自定义验证器checkboxForm 这是我尝试过的 Ts file get formReceivedSum
  • 如何重启ngOnInit来更新Interpolation

    有办法重新启动吗ngOnInit 改变变量时 因为我想重新开始ngOnInit 改变时theme多变的 这是我的代码 设置 ts export class SettingsPage implements OnInit phraseColor
  • Angular 2 兄弟组件通信

    我有一个列表组件 当在 ListComponent 中单击某个项目时 该项目的详细信息应显示在 DetailComponent 中 两者同时出现在屏幕上 因此不涉及路由 如何告诉详细组件列表组件中的哪个项目被单击 我考虑过向父级 AppCo
  • 工具提示未显示在 fontawesome 图标按钮上

    我有一个很棒的图标嵌套在 a 中 但工具提示没有弹出 i class fa fa random title some tooltip i style i fa display inline block 如果您使用的工具提示插件使用 befo
  • 获取脚本中 CSS 颜色属性的实际值

    当我使用window getComputedStyle在元素的颜色属性上 它返回一个带有rgb or rgba 值 无论最初用于设置颜色的语法如何 在 Internet Explorer 中 当被迫使用element currentStyl
  • 为什么明确:正确的方法没有按预期工作

    我总是很困惑clear left clear right and clear both在CSS中 我知道clear both意味着它不允许在其两侧浮动元素 我做了一些测试here http jsfiddle net malaikuangre
  • 如何在对角线元素上创建 CSS 边框

    这是一个例子 http jsfiddle net 52c7t http jsfiddle net 52c7t Simply 我试图让 div 位于右侧 并具有像左侧 div 一样的边框 我希望边框位于右侧 div 的左侧 我尝试了一百万种不
  • Mousemove视差效果移动div的位置

    我正在尝试创建轻微的视差效果 我不确定它是否真的构成视差 但这是一个类似的想法 其中有四层 当鼠标移动时 它们以略有不同的速率移动 我找到了一个很好的例子 它提供了与我想要的类似的东西 http jsfiddle net X7UwG 2 h
  • 自定义 CSS 不适用于 Bootstrap

    首先我想说 我知道我的 HTML 并不是最高效或最干净的 我的问题是我编写的自定义 CSS 根本不适用于我的网页 Bootstrap 似乎工作得很好 但是当我尝试进行任何编辑或覆盖 Bootstrap 时 它完全不起作用 我知道我的自定义
  • 如何使用鼠标单击选择多个项目?

    This is the default jQueryUI display as a Grid Layouts demo here http jqueryui com demos selectable display grid I can s
  • 删除 CSS Transitionend 事件侦听器不起作用

    我在尝试删除 css Transitionend 事件侦听器时遇到问题 我可以添加监听器 e addEventListener transitionend function event transitionComplete event pr
  • 反应式形式的 NgbDatepicker:设置初始值

    这可能是我一段时间以来处理过的最令人沮丧的问题之一 一般来说 日期 尤其是 NgbDatepicker 在 Angular 中处理起来有点麻烦 我正在 Angular 8 中针对反应 式表单实现 NgbDatepicker 我的问题的要点是
  • 错误 TypeError:无法使用角度 6 读取 ngx-bootstrap 中 null 的属性“createText”

    我想使用以下命令从不同的组件打开 ngx bootstrap 模式 ViewChild在角度 6 但我收到此错误 错误类型错误 无法读取 null 的属性 createText 在 ComponentLoader push node mod
  • 打印html时在页面上打印页码

    我读过很多关于打印页码的网站 但当我尝试打印它时 我仍然无法让它显示在我的 html 页面上 所以 CSS 代码如下 page margin 10 top center font family sans serif font weight
  • Angular2 http.post 被执行两次

    我遇到一个奇怪的问题 Angular2 的 RC1 Http 服务执行 http post 调用两次 我已经调试了我的应用程序 并且我知道这不是点击事件问题 导致核心服务调用的所有调用 public create json Object p

随机推荐

  • PHP 开放时间 [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我有一个客户想要一家在线披萨店 当然 他也不希望顾客在营业时间之后下订单 我为此制作了一个简单的脚本 我想我将来可能会与任何想要的人分享
  • DES、三重 DES、AES、河豚数据加密的比较

    有人比较这些加密算法的优缺点吗 Use AES 更详细地说 DES 是七十年代的旧 数据加密标准 它的密钥大小对于适当的安全性而言太短 56 个有效位 这可以被暴力破解 正如已经证明的那样十多年前 此外 DES 使用 64 位块 这在使用相
  • 使用 SharedPreferences 设置登录状态并在应用程序启动时检索它 - Flutter

    我有一个 flutter 应用程序 在该应用程序启动时我必须检查登录状态并相应地调用相关屏幕 用于启动应用程序的代码 class MyApp extends StatefulWidget override MyAppState create
  • 左外连接与 Entity Framework Core

    我正在尝试使用 EF7 7 0 0 rc1 final vNext RC1 rc1 final 和 SQL Server 2014 执行左外连接请求 数据库 宠物 身份证 姓名 用户 ID 姓名 PetId 这个有效 var queryWo
  • ASP.NET Core 中基于令牌的身份验证(已更新)

    我正在使用 ASP NET Core 应用程序 我正在尝试实现基于令牌的身份验证 但不知道如何使用新的保安系统 我的场景 客户端请求令牌 我的服务器应该授权用户并返回 access token 客户端将在以下请求中使用该令牌 这里有两篇关于
  • 具有格式相关类型的柯里化函数

    据我所知 F 不像处理其他函数那样处理 printfn 因为它依赖于字符串参数的类型 有人可以向我解释为什么这会阻止我这样做吗 let printn printfn A 该错误表示类型被推断为 a gt unit 我需要添加显式参数或类型注
  • 使用Friendly_id匹配单个Rails路线中的多个模型

    我有一个公司和一个用户模型 两者都有一个通过Friendly id 的slug 确保两种模型中的段头都是唯一的 我想要网址 http www example com any company name http www example com
  • Google 地图 API 路线

    我可以在应用程序中的谷歌地图上标记两个点 然后计算地图上的方向以及逐向导航吗 我正在创建一个应用程序 用于获取两点之间的行驶方向在地图上 一步一步 step1首先创建一个类MyOverlay java用于绘制路径 import androi
  • phpmyadmin 出现奇怪的错误,安装成功但仍然无法运行

    我一整天都在努力安装 phpmyadmin 我已经尝试重新安装很多次了 但还是不行 打开 localhost phpmyadmin 时 我收到一些文本 而不是实际的 phpmyadmin UI 正文是 addJSON options PMA
  • 如何在 Web midi api 中发现 midi 键盘?

    参考 2013 年的浏览器支持 Web MIDI API 我目前正在 OS 10 9 2 上运行 Chrome 34 0 1847 116 并尝试使用 Web Midi API 启用 chrome flags enable web midi
  • Perl正则表达式匹配较长句子中的可选短语

    我正在尝试匹配句子中的可选 可能存在 短语 perl e word1 word2 word3 print 1 1 2 2 3 3 n if m word1 word2 word3 Output 1 word1 2 3 word3 我知道第一
  • 使用 Coldfusion 上传时存储文件名

    我正在尝试将要上传的所选文件的文件名存储到表单上的隐藏输入字段中 我的表格看起来像这样
  • 如何手动更新实体框架代码优先模型,以便它更新数据库(使用新列)?

    有人可以告诉我如何将数据成员 col 添加到我的 mvc3 模型 类 并让它更新数据库 而不必从头开始生成所有内容 我首先从代码开始工作 当我更改模型然后运行我的项目时 我收到一条错误消息 指出模型已更改 有什么干净简单的方法来同步创建新的
  • std::使用整数数组中的元素作为 std::variant 中的目标类型从 std::variant 获取内容

    我有一个整数数组来检索 std variant 中的内容 但是编译失败 报错信息No matching function to call get 您能否解释原因并提出实现相同目的的可行解决方案 using my type std varia
  • 显示实时页面查看者数量[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 javascript 或 php 统计网站当前访问者 我的网站上有一个嵌入式流 但我想提取页面上实时观看者的数量 有没有一种方法可以使用 PHP AJAX 来执行此操作 显示当前正在查看我的
  • 从 C#(非 C)COM 组件加载和传递 JScript 数组

    我看过有关 jscript 数组的教程 但还没有看到 我看到类似的问题 但涉及 Win32 代码而不是 NET 想知道如何在 JScript 和 C COM 组件之间来回传递数组 例如 我在 C COM 中定义了两个属性 它们返回字符串和整
  • 视图模型不断创建实时数据实例

    我在中创建了视图模型的实例onCreate活动的方法 ticketViewModel ViewModelProviders of this get TicketViewModel class 那我有一个方法 AddTicket 它使用vie
  • 增加 Angular 2+ 和 ASP.NET Core WebAPI 应用程序中的超时

    在我的 Angular 2 ASP NET Core MVC WebAPI 应用程序中 我有一个从客户端 UI 到服务器的长时间运行的 API 调用 请求在 30 秒后超时 我想在客户端或服务器端定义此特定 API 调用的超时 我只找到了全
  • 将文件拖到桌面快捷方式 - 不在应用程序中打开文件

    我有一个小型日志查看器应用程序来读取一些自定义日志 我可以将文件直接拖到可执行文件上 然后通过命令行加载它们就可以了 但是 如果我将文件拖到桌面快捷方式 Windows 将不会使用这些文件作为命令行参数来打开应用程序 它根本不会打开该应用程
  • 改变垫子展开指示器的旋转

    我成功地将垫指示器移动到左侧 而不是右侧 并且我使用变换属性使其在展开时向内转动 不过 我希望指示器在展开时朝上 在折叠时朝下 我如何正确地设计它来实现这一目标 https stackblitz com edit indicatorrota