.add-to-cart-btn
<button>
ここに商品、サイズ、価格などを表示しているこのオンライン ショップがあり、ボタンをクリックするたびに何らかのアニメーションが実行されるようにアニメーションを追加したいと考えています。次のような jQuery でこれを行うことができます。
$(document).ready(function() {
$('.add-to-cart-btn').on('click', function() {
$(this).addClass('bounce').delay(1000).removeClass('bounce');
});
});
しかし、私は「Angular Way」をやろうとしており、近いと思います。ここに指令があります:この投稿のおかげで
angular.module('ForeverLeather').directive('animateTrigger', ['$animate', function ($animate) {
return function (scope, elem, attrs) {
elem.on('click', function (elem) {
scope.$apply(function() {
var el = angular.element(document.getElementsByClassName("add-to-cart-btn"));
var promise = $animate.addClass(el, "bounce");
promise.then(function () {
scope.$apply(function() {
$animate.removeClass(el, "bounce");
});
});
});
});
}
}]);
HTML
<div class="col-md-4 col-sm-6" ng-repeat="item in templateItems">
<div class="product-img-wrapper">
<img ng-src="{{item.src}}">
</div>
<h3 class="product-header">{{item.name}}</h3>
<p class="lead product-text">
{{item.description}}
</p>
<div class="product-btn-wrapper">
<select ng-options="size.size as size.text for size in item.sizes" ng-model="item.selectedItem.size"
class="form-control" ng-change="getPrice(item, item.selectedItem.size)">
<option value="" disabled>-- Select to view prices --</option>
</select>
<span class="text-left product-price">{{item.selectedItem.price | currency}}</span>
<button ng-click="addToCart(item.type, item.name, item.selectedItem.size);"
class="btn btn-lg btn-success add-to-cart-btn animated" animate-trigger>
<i class="fa fa-cart-plus"></i> Add To Cart
</button>
</div>
</div>
これは機能します..まあ、私の問題は、
var el = angular.element(document.getElementsByClassName("add-to-cart-btn"));
このクラス名を持つページの最初のボタンを常に見つけることです。これを次のように変更する必要があります。
var el = angular.element(elem); // invalid
var el = angular.element(this); // invalid
ページの最初の要素ではなく、現在クリックされている要素でアニメーションを実行するようにします。