我在这里有一个在线商店,它显示商品、尺寸、价格等,我想在其中添加一个动画,.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
这样我就在当前单击的元素而不是页面的第一个元素上执行动画。