Angular material md-list > md-item 上的设计涟漪

Angular material design ripple on md-list > md-item

我有一个项目列表(每个项目都包含多个元素),其中每个项目都可以点击并切换视图。有没有办法让整个 md-item-content 产生连锁反应?我尝试了 class="ripple" 但这还不够。

<md-content>
    <md-list layout="column" md-padding>
        <md-item ng-repeat="resto in list.data.recommendations">
            <a ui-sref="resto({qname: resto.qname})" class="ripple">
              <md-item-content id="resto{{$index}}">
                 ...

如果你想对特定元素使用连锁反应,你可以使用 md-ink-ripple

<div md-ink-ripple></div>

如果你想要涟漪而不是 anchor,我建议使用 md-button。然后只需在控制器中更改 ui-路由器状态即可。

有关示例,请参阅 https://github.com/angular/material-start/blob/master/app/index.html#L30

       <md-list layout="column" md-padding>
        <md-item ng-repeat="resto in list.data.recommendations">
            <md-button ng-click="vm.navigateToResto(resto)" ng-class="{'selected' : it === vm.selected }" id="resto{{$index}}">
              ...
            </md-button>
        </md-item>
      </md-list>

实际上,缺少这方面的文档。

我正在寻找解决方案并在这里找到您的问题,所以我去查看了他们的源代码。

您可以使用 md-list > md-list-item 但有一些限制。在你的情况下,我的想法是在 sidenav 上接近他们的文档菜单(他们的指令是 menu-link,在 link 本身),我已经完成了我原来的一些修改代码(接近你的代码):

            <md-list>
                <md-list-item
                    ng-repeat="section in ::admin.sections"
                    ng-class="{
                        'active': $state.includes(section.active),
                        'disabled': section.disabled
                    }"
                    ng-click="!section.disabled && $state.go(section.state)">
                    <span ng-bind="::section.label"></span>
                </md-list-item>
            </md-list>

基本上,并非所有元素都被接受为 md-list-item 中的动作触发器。 md-checkboxmd-switch 是唯一被接受在 md-list-item 指令上的 preLink 函数中进行处理的子项。

另一种方法是将 ng-click 放在 md-list-item 本身或其内部的子元素中。

preLink 过程是一个包装器,使用 "non-styled" 按钮在点击时执行 "proxy",并在视觉上完成涟漪效果。

其他东西,比如属性,也没有被转移到这个"proxy",所以disabled不能直接使用,你需要模拟它的结果。就我而言,我中断了 ng-click 操作,并将 class 放入元素中。

只需将 md-ink-ripple 指令和 .md-clickable class 添加到 <md-list-item>元素:

<md-list-item md-ink-ripple class="md-clickable">
    <p>Foo</p>
</md-list-item>

如果您愿意,您还可以将 字体粗细 设置为 500(这就是默认 clickable 的方式-item 看起来像).

其他答案涵盖了大多数情况,但您也可以使用

自定义波纹效果的颜色
<md-list-item md-ink-ripple="#03A9F4">
  <p></p>
</md-list-item>

这会产生淡蓝色的波纹颜色。

Angular Material 背后的团队希望将此保留在内部并减少自定义,这就是他们没有很好地记录它的原因。但是,我认为这是一个有用的定制。希望能帮助到你!干杯!

这是最好的方法:

<div md-ink-ripple class="ripple">Div like an md-button</div>
  1. 添加到您的 div md-ink-ripple 指令
  2. 将波纹 class 添加到您的 div:

`

.ripple {
  position: relative;
  &:active > .wave {
    animation: ripple 0.25s;
  }
  .wave{
    position:absolute;
    width:100%;
    height:100%;
    background-image: radial-gradient(circle, #000 10%, transparent 10.01%);
    background-repeat: no-repeat;
    background-position: 50%;
    background-size: 0 0;
    top:0;
    left:0;
    transform: scale(0);
    opacity:0;
  }
}
@keyframes ripple {
  0% {transform: scaleX(0);}
  50%{transform: scaleX(1);opacity:0.3;}
  100%{transform: scaleX(1);opacity:0;background-size: 1000% 1000%;}
}

`