介绍

Ripple (波纹) 是 Material Design 中一个标志性的特色。

点击 button 会溅起水波的感觉。

参考

Docs – Ripples

When to use it?

一般情况下,我们很少需要自己去使用 Ripple。因为 Angular Material 的各个组件 (比如 mat-button) 都已经自带 Ripple 了。

我是遇到一个比较特殊的需求才用上 Ripple 的。

需求是这样的:

有一个 Sidebar,Sidebar 里有一个 Extended Fab Button,这个 Sidebar 可以 collapse,当 collapsed 后 Extended Fab Button 会变小。

假如我们直接给 Extended Fab Button 一个 width: 56px,效果是这样的

没关系,我们 text hide 起来看看

依然被一层东西盖着了,翻看 Extended Fab Button 的 HTML 结构

有一堆的 div,每个 div 负责不同的东西,比如 Ripple,focus 时的变暗色等等。

结论:要改 Extended Fab Button 的 width 不那么容易。

为了满足需求,我们只能自己模拟一个 Extended Fab Button 了。

Simulate Extended Fab Button with Ripple

模拟 Extended Fab Button 的 Layout,颜色,字体,这些还不算太难

HTML

<button class="my-mat-extended-fab-button">
<mat-icon>edit</mat-icon>
Create products
</button>

Styles

.my-mat-extended-fab-button {
display: flex;
align-items: center;
gap: 12px;
border-radius: var(--mdc-extended-fab-container-shape);
background-color: var(--mdc-fab-container-color);
color: var(--mat-fab-foreground-color);
padding-inline: 12px 20px;
padding-block: 16px;
font-weight: 500;
font-size: 14px; box-shadow: var(--mdc-extended-fab-container-elevation-shadow); &:hover,
&:focus {
/*
1. Angular Material 的 Extended Fab Button 用了 2 层来做 hover 效果
这里偷工减料,只用一层,直接抄它 2 层效果的颜色来用。
*/
background-color: #cecef4;
}
}

效果

唯一比较难搞的是点击后的 Ripple 效果。

幸好 Angular Material 有独立封装 Ripple 效果。

添加 Ripple 效果

使用 matRipple 指令就可以了

<button class="my-mat-extended-fab-button" matRipple>
<mat-icon>edit</mat-icon>
Create products
</button>

效果

至少有 90% 以上相似度就可以了。

Ripple の Options

比较常用的 options:

  1. color

    <button class="my-mat-extended-fab-button" matRipple matRippleColor="red">

    效果

  2. radius

    <button class="my-mat-extended-fab-button" matRipple matRippleColor="red" [matRippleRadius]="20">

    效果

  3. centered

    by default 波纹是从点击的位置发散的,设置 centered 会让波纹从中心开始发散。

    <button
    class="my-mat-extended-fab-button"
    matRipple
    matRippleColor="red"
    [matRippleRadius]="20"
    [matRippleCentered]="true"
    >

    效果

Ripple の Trigger

Trigger 的玩法是这样的

<button class="my-mat-extended-fab-button" matRipple [matRippleTrigger]="rippleTrigger">
<mat-icon>edit</mat-icon>
Create products
</button> <button class="trigger-btn" #rippleTrigger>trigger</button>

当点击 Extended Fab Button 时,它不会有 Ripple 效果,反而是点击 trigger button 时 Extended Fab Button 才会出现 Ripple 效果,换了触发器。

效果

Ripple の Manual Trigger

Ripple 指令有一个 launch 方法,我们可以完全控制触发的时机。

export class AppComponent {
// 1. 获取 Ripple 指令
readonly myMatExtendedFabButtonRipple = viewChild.required('myMatExtendedFabButton', { read: MatRipple }); constructor() {
// 2. 最好等第一轮渲染完成后才干活
afterNextRender(() => {
// 3. 每 500ms 波动一次
window.setInterval(() => {
// 4. 设定坐标 x, y
const x = 97;
const y = 161; // 5. 覆盖原本的,比如 e.g. color 等等,当然也可以不要覆盖
const overrideConfig = {
color: 'pink',
} satisfies RippleConfig; // 6. 调用 launch 方法触发 Ripple 效果
this.myMatExtendedFabButtonRipple().launch(x, y, overrideConfig);
}, 500);
});
}
}

触发时可以设置坐标 x, y。

效果

坐标是对着 viewport 算的,不管有没有 scroll,它和 getBoundingClientRect 算法一样。

目录

上一篇 Angular Material 18+ 高级教程 – Material Icon

下一篇 Angular Material 18+ 高级教程 – CDK Accessibility の Focus

想查看目录,请移步 Angular 18+ 高级教程 – 目录

喜欢请点推荐,若发现教程内容以新版脱节请评论通知我。happy coding

Angular Material 18+ 高级教程 – Material Ripple的更多相关文章

  1. Siki_Unity_2-9_C#高级教程(未完)

    Unity 2-9 C#高级教程 任务1:字符串和正则表达式任务1-1&1-2:字符串类string System.String类(string为别名) 注:string创建的字符串是不可变的 ...

  2. Pandas之:Pandas高级教程以铁达尼号真实数据为例

    Pandas之:Pandas高级教程以铁达尼号真实数据为例 目录 简介 读写文件 DF的选择 选择列数据 选择行数据 同时选择行和列 使用plots作图 使用现有的列创建新的列 进行统计 DF重组 简 ...

  3. ios cocopods 安装使用及高级教程

    CocoaPods简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm.随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的 ...

  4. 【读书笔记】.Net并行编程高级教程(二)-- 任务并行

    前面一篇提到例子都是数据并行,但这并不是并行化的唯一形式,在.Net4之前,必须要创建多个线程或者线程池来利用多核技术.现在只需要使用新的Task实例就可以通过更简单的代码解决命令式任务并行问题. 1 ...

  5. 【读书笔记】.Net并行编程高级教程--Parallel

    一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控>这本书中也多次提到并发,不管是计算机 ...

  6. 分享25个新鲜出炉的 Photoshop 高级教程

    网络上众多优秀的 Photoshop 实例教程是提高 Photoshop 技能的最佳学习途径.今天,我向大家分享25个新鲜出炉的 Photoshop 高级教程,提高你的设计技巧,制作时尚的图片效果.这 ...

  7. 展讯NAND Flash高级教程【转】

    转自:http://wenku.baidu.com/view/d236e6727fd5360cba1adb9e.html 展讯NAND Flash高级教程

  8. Net并行编程高级教程--Parallel

    Net并行编程高级教程--Parallel 一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控 ...

  9. [转帖]tar高级教程:增量备份、定时备份、网络备份

    tar高级教程:增量备份.定时备份.网络备份 作者: lesca 分类: Tutorials, Ubuntu 发布时间: 2012-03-01 11:42 ė浏览 27,065 次 61条评论 一.概 ...

  10. Django 2.0.1 官方文档翻译: 高级教程:如何编写可重用的app (page 13)

    高级教程:如何编写可重用的app (page 13) 本节教程上接第七部分(Page 12).我们会把我们的 web-poll应用转换成一个独立的python包,你可以在新的项目中重用或者把它分享给其 ...

随机推荐

  1. API引用在Element UI (Vue 2)和Element Plus (Vue 3)中的不同

    API 变动 样式类名变化: 一些组件的样式类名有所变动,可能需要更新你的自定义样式. 事件名和属性名变化: 某些组件的事件名和属性名发生了变化,需要检查 Element Plus 文档 以了解详细信 ...

  2. for循环以及常用的遍历(迭代)用法

    for循环以及常用的遍历(迭代)用法   概念:(概念才是高楼的地基!) for循环是一个计次循环,一般运用在循环次数已知的情况下.通常适用于枚举或遍历序列,以及迭代序列中的元素. 注意*:迭代变量用 ...

  3. 使用ollama本地部署gemma记录

    1.官网https://ollama.com/安装ollama 2.先配置一下环境变量 不然下载的东西会默认丢在C盘里 3.cmd执行ollama run gemma:2b (使用后推荐直接下7b,2 ...

  4. 安全可信,Solon v2.8.6 发布

    Solon 框架! Java "纯血国产"应用开发框架.开放原子开源基金会,孵化项目.从零开始构建(非 java-ee 架构),有灵活的接口规范与开放生态. 追求: 更快.更小.更 ...

  5. 【H5】14 表单 其三 原生表单部件

    现在,我们将详细研究不同表单部件的功能,查看了哪些选项可用于收集不同类型的数据.这个指南有些详尽,涵盖了所有可用的原生表单小部件. 预备知识: 计算机基础知识和对于HTML的基本理解. 目标: 要了解 ...

  6. 人形机器人(humanoid)(双足机器人、四足机器人)—— 操控员 —— 机器人数据收集操作员

    参考: https://www.youtube.com/watch?v=jbQ4M4SNb2M 机器人数据收集操控员,就和大模型训练数据收集员.数据类型标识员(打标签人员)一样,都是为了人工生成AI训 ...

  7. 为什么我要弃用华为的软件产品——mindspore从入门到放弃之感想

    从本博主前段时间的博文就可以看到博主写了好多关于华为软件mindspore的入门资料和编译方法以及一些bug的修复,但是无奈之下发现这些简单而且显而易见的bug不仅长期存在与软件中而且在提交PR后而一 ...

  8. 局域网中linux和window共享文件方案——samba

    注明: 曾经写过:局域网中如何为Ubuntu20.04和window10共享文件,本文可以视作为该篇的续篇. 本文主要内容为Samba软件的安装和配置,以及相关的磁盘操作. 注意:(硬盘的UUID会受 ...

  9. .net5调用WebService简单事例

    1. 创建 .net5控制台项目: dotnet new console -o WebServiceConsole 2. 添加全局工具 dotnet tool install --global dot ...

  10. [KEYENCE Programming Contest 2023 Autumn(AtCoder Beginner Contest 325) E

    KEYENCE Programming Contest 2023 Autumn(AtCoder Beginner Contest 325) - AtCoder E E - Our clients, p ...