Ответ 1
Если вы хотите использовать эффект пульсации для определенных элементов, вы можете использовать md-ink-ripple
.
<div md-ink-ripple></div>
У меня есть список элементов (каждый из которых включает в себя несколько элементов), где каждый элемент является кликабельным и переключает представление. Есть ли способ получить эффект пульсации на целом 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>
Просто добавьте директиву md-ink-pipple и класс .md-clickable в элемент <md-list-item>
:
<md-list-item md-ink-ripple class="md-clickable">
<p>Foo</p>
</md-list-item>
Также вы можете установить font-weight на 500, если хотите (как выглядит элемент clickable-item по умолчанию).
Другие ответы охватывают большинство случаев, но вы также можете настроить цвет эффекта пульсации, используя
<md-list-item md-ink-ripple="#03A9F4">
<p></p>
</md-list-item>
Это даст светло-голубой цвет пульсации.
Команда, стоящая за Angular Material, хотела сохранить это внутреннее и уменьшить настройку, поэтому они не задокументировали ее хорошо. Однако я думал, что это была удобная настройка. Надеюсь, поможет! Ура!
Собственно, недостатка документации по этому поводу.
Я искал решение и нашел ваш запрос здесь, поэтому я пошел проверить исходный код.
Вы можете использовать md-list > md-list-item
с несколькими ограничениями. В вашем случае идея состоит в том, чтобы приблизиться к своему меню docs, по sidenav (их директива называется menu-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
являются единственными дочерними элементами, которые принимаются для выполнения процесса, внутри preLink
в директиве md-list-item
.
Другим способом является размещение ng-click
самого md-list-item
или дочернего элемента внутри него.
Процесс preLink
представляет собой оболочку, используя кнопку "не-стиле", которая делает "прокси" на клике и визуально усиливает эффект пульсации.
Другие вещи, такие как атрибуты, также не переносятся на этот "прокси", поэтому disabled
нельзя использовать напрямую, вам нужно имитировать его результаты. В моем случае я прерываю действие ng-click и помещаю класс в элемент.
Я бы предложил использовать md-button
, если вы хотите рябь вместо anchor
. Затем просто измените ваше состояние ui-router в контроллере.
См. 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>
Вот лучший способ сделать это:
<div md-ink-ripple class="ripple">Div like an md-button</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%;}
}
`