AngularJS 中更新数组时的滑动动画
Sliding animation when updating an array in AngularJS
我正在开发一个基于 AngularJS 的日期选择器。
HTML 很简单:
<div class="calendar-slider-actions">
<a class="slider-prev" ng-click="vm.prevWeek()">
<i class="ico ico-arrow-left"></i>
</a>
<div class="slider-clip">
<ul class="slides">
<li class="slide" data-ng-repeat="date in vm.dates">
<div class="radio">
<input type="radio" name="group-days" id="field-{{date.weekDay | lowercase}}" ng-value="vm.selectedDate" ng-checked="vm.selectedDate === date.date">
<label class="btn btn-primary btn-primary-alpha radio-label" for="field-{{date.weekDay | lowercase}}" ng-click="vm.selectDate(date)">
<strong>{{date.weekDay}}</strong> {{date.shortDate}}
</label>
</div>
</li>
</ul>
</div>
<a class="slider-next" ng-click="vm.nextWeek()">
<i class="ico ico-arrow-right"></i>
</a>
</div>
样式正确这给了我这样的东西
日期是在控制器中即时生成的,当时只生成了七个。一旦我向左或向右单击,就会计算接下来的七个日期,数组会更新,GUI 也会刷新为新日期。到目前为止一切顺利。
控制器看起来像这样:
function DayPickerCtrl($scope) {
var vm = this;
vm.selectedDate = moment().startOf('day').format();
_changeDisplayedWeek(0);
vm.selectDate = function(date) {
vm.selectedDate = date.date;
};
vm.nextWeek = function() {
_changeDisplayedWeek(7);
};
vm.prevWeek = function() {
_changeDisplayedWeek(-7);
};
function _changeDisplayedWeek(daysToAdd) {
var selectedDate = moment(vm.selectedDate).add(daysToAdd, 'days');
vm.selectedDate = selectedDate.format();
vm.weekOfYear = selectedDate.format('WW');
vm.dates = _expandWeek(selectedDate);
};
function _expandWeek(startDate) {
var dates = [];
var dayOfWeek = moment(startDate).startOf('isoweek');
for (var i = 0; i<7; i++) {
dates.push({ weekDay: dayOfWeek.format('dd'), shortDate: dayOfWeek.format('DD.MM'), date: dayOfWeek.format() });
dayOfWeek.add(1, 'd');
}
return dates;
};
我面临的问题是我无法在日期更新期间制作动画。按照预期,如果日期可以向左或向右滑动,那就太酷了。我确实尝试使用 ng-animate 来实现这一点,但我不知道该怎么做。
这是日期选择器的基本示例:https://plnkr.co/edit/4Oz0RBvJafiTm6ZAfidt?p=preview
关于如何让它工作的任何想法?
提前致以问候和感谢
卢卡斯
有时使用 angular-animate
可能会很棘手。查看您的标记,我假设您想单独滑动每个单选按钮(可能会产生一些惊人的效果)。 angular-animate
的问题不维护列表中标记为 ng-leave
的项目的顺序。在这种情况下,(要删除的)项目附加到 <ul><li></li></ul>
的末尾,这会固定相对位置。
看看这个 plunker。我很快就注意到了图片中的样式,因此您可能需要稍微调整一下。
干杯。
我正在开发一个基于 AngularJS 的日期选择器。 HTML 很简单:
<div class="calendar-slider-actions">
<a class="slider-prev" ng-click="vm.prevWeek()">
<i class="ico ico-arrow-left"></i>
</a>
<div class="slider-clip">
<ul class="slides">
<li class="slide" data-ng-repeat="date in vm.dates">
<div class="radio">
<input type="radio" name="group-days" id="field-{{date.weekDay | lowercase}}" ng-value="vm.selectedDate" ng-checked="vm.selectedDate === date.date">
<label class="btn btn-primary btn-primary-alpha radio-label" for="field-{{date.weekDay | lowercase}}" ng-click="vm.selectDate(date)">
<strong>{{date.weekDay}}</strong> {{date.shortDate}}
</label>
</div>
</li>
</ul>
</div>
<a class="slider-next" ng-click="vm.nextWeek()">
<i class="ico ico-arrow-right"></i>
</a>
</div>
样式正确这给了我这样的东西
日期是在控制器中即时生成的,当时只生成了七个。一旦我向左或向右单击,就会计算接下来的七个日期,数组会更新,GUI 也会刷新为新日期。到目前为止一切顺利。
控制器看起来像这样:
function DayPickerCtrl($scope) {
var vm = this;
vm.selectedDate = moment().startOf('day').format();
_changeDisplayedWeek(0);
vm.selectDate = function(date) {
vm.selectedDate = date.date;
};
vm.nextWeek = function() {
_changeDisplayedWeek(7);
};
vm.prevWeek = function() {
_changeDisplayedWeek(-7);
};
function _changeDisplayedWeek(daysToAdd) {
var selectedDate = moment(vm.selectedDate).add(daysToAdd, 'days');
vm.selectedDate = selectedDate.format();
vm.weekOfYear = selectedDate.format('WW');
vm.dates = _expandWeek(selectedDate);
};
function _expandWeek(startDate) {
var dates = [];
var dayOfWeek = moment(startDate).startOf('isoweek');
for (var i = 0; i<7; i++) {
dates.push({ weekDay: dayOfWeek.format('dd'), shortDate: dayOfWeek.format('DD.MM'), date: dayOfWeek.format() });
dayOfWeek.add(1, 'd');
}
return dates;
};
我面临的问题是我无法在日期更新期间制作动画。按照预期,如果日期可以向左或向右滑动,那就太酷了。我确实尝试使用 ng-animate 来实现这一点,但我不知道该怎么做。
这是日期选择器的基本示例:https://plnkr.co/edit/4Oz0RBvJafiTm6ZAfidt?p=preview
关于如何让它工作的任何想法?
提前致以问候和感谢 卢卡斯
有时使用 angular-animate
可能会很棘手。查看您的标记,我假设您想单独滑动每个单选按钮(可能会产生一些惊人的效果)。 angular-animate
的问题不维护列表中标记为 ng-leave
的项目的顺序。在这种情况下,(要删除的)项目附加到 <ul><li></li></ul>
的末尾,这会固定相对位置。
看看这个 plunker。我很快就注意到了图片中的样式,因此您可能需要稍微调整一下。
干杯。