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-checkbox
和 md-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>
- 添加到您的 div md-ink-ripple 指令
- 将波纹 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%;}
}
`
我有一个项目列表(每个项目都包含多个元素),其中每个项目都可以点击并切换视图。有没有办法让整个 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-checkbox
和 md-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>
- 添加到您的 div md-ink-ripple 指令
- 将波纹 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%;}
}
`