Делал демо angularjs animations with animate.css, слайдер получился :)
http://nervgh.github.io/pages/angularjs-and-animatecss/ |
|
калькулятор для подбора типоразмера шин
<!doctype html>
<html ng-app>
<head>
<meta charset="utf-8">
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<script src="http://code.angularjs.org/1.1.5/angular.min.js"></script>
<script language="javascript" type="text/javascript">
function TireController($scope) {
//набор 1
var IVALUE = 25.4;
var I2VALUE = 0.02;
$scope.sectionWidthSet1 = 0;
$scope.aspectRatioSet1 = 0;
$scope.rimDiameter_Inch_Set1 = 0;
//набор 2
$scope.sectionWidthSet2 = 0;
$scope.aspectRatioSet2 = 0;
$scope.rimDiameter_Inch_Set2 = 0;
//расчетные данные
$scope.rimHeight_mm_Set1;
$scope.innDiameterSet1;
$scope.extDiameterSet1;
$scope.rimHeight_mm_Set2;
$scope.innDiameterSet2;
$scope.extDiameterSet2;
$scope.roadClearance;
$scope.computing=function(){
// Внутренний диаметр, мм
$scope.innDiameterSet1 = Math.round($scope.rimDiameter_Inch_Set1 * IVALUE);
$scope.innDiameterSet2 = Math.round($scope.rimDiameter_Inch_Set2 * IVALUE);
// Внешний диаметр, мм
$scope.extDiameterSet1 = Math.round($scope.sectionWidthSet1 * $scope.aspectRatioSet1 * I2VALUE + $scope.innDiameterSet1);
$scope.extDiameterSet2 = Math.round($scope.sectionWidthSet2 * $scope.aspectRatioSet2 * I2VALUE + $scope.innDiameterSet2);
//Высота профиля, мм
$scope.rimHeight_mm_Set1 = Math.round(($scope.extDiameterSet1 - $scope.innDiameterSet1)/2);
$scope.rimHeight_mm_Set2 = Math.round(($scope.extDiameterSet2 - $scope.innDiameterSet2)/2);
//Изменение значения клиренса
$scope.roadClearance = ( $scope.extDiameterSet2 - $scope.extDiameterSet1 )/2;
}
//do calculation
$scope.computing();
}
</script>
</head>
<body>
<div ng-controller="TireController">
<div class="container">
<div class="row">
<div class="panel panel-default">
<div class="panel-body">
<div class="col-md-5 col-md-offset-1">
<b>Старый размер</b>:
<select class="form-control" ng-model="sectionWidthSet1" ng-change="computing()">
<option value="145">145</option>
<option value="155">155</option>
<option value="165">165</option>
<option selected="selected" value="175">175</option>
<option value="185">185</option>
<option value="195">195</option>
<option value="205">205</option>
<option value="215">215</option>
<option value="225">225</option>
<option value="235">235</option>
<option value="245">245</option>
<option value="255">255</option>
<option value="265">265</option>
<option value="275">275</option>
<option value="285">285</option>
<option value="295">295</option>
<option value="305">305</option>
<option value="315">315</option>
<option value="325">325</option>
</select>
/
<select class="form-control" ng-model="aspectRatioSet1" ng-change="computing()">
<option value="0">—</option>
<option value="25">25</option>
<option value="30">30</option>
<option value="35">35</option>
<option value="40">40</option>
<option value="45">45</option>
<option value="50">50</option>
<option value="55">55</option>
<option value="60">60</option>
<option value="65">65</option>
<option selected="selected" value="70">70</option>
<option value="75">75</option>
<option value="80">80</option>
<option value="85">85</option>
</select>
R
<select class="form-control" ng-model="rimDiameter_Inch_Set1" ng-change="computing()">
<option value="12">12</option>
<option selected="selected" value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
</select>
<br>
</div>
<div class="col-md-5">
<b>Новый размер</b>:
<select class="form-control" ng-model="sectionWidthSet2" ng-change="computing()">
<option value="145">145</option>
<option value="155">155</option>
<option value="165">165</option>
<option selected="selected" value="175">175</option>
<option value="185">185</option>
<option value="195">195</option>
<option value="205">205</option>
<option value="215">215</option>
<option value="225">225</option>
<option value="235">235</option>
<option value="245">245</option>
<option value="255">255</option>
<option value="265">265</option>
<option value="275">275</option>
<option value="285">285</option>
<option value="295">295</option>
<option value="305">305</option>
<option value="315">315</option>
<option value="325">325</option>
</select>
/
<select class="form-control" ng-model="aspectRatioSet2" ng-change="computing()">
<option value="0">—</option>
<option value="25">25</option>
<option value="30">30</option>
<option value="35">35</option>
<option value="40">40</option>
<option value="45">45</option>
<option value="50">50</option>
<option value="55">55</option>
<option value="60">60</option>
<option value="65">65</option>
<option selected="selected" value="70">70</option>
<option value="75">75</option>
<option value="80">80</option>
<option value="85">85</option>
</select>
R
<select class="form-control" ng-model="rimDiameter_Inch_Set2" ng-change="computing()">
<option value="12">12</option>
<option selected="selected" value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
</select>
</div>
</div>
</div>
</div>
|
часть 2 калькулятора - почему то ограничение на 10000 символов в посте.
<div class="row">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Расчетные данные</h3>
</div>
<div class="panel-body">
<div class="col-md-12 clearfix">
<p>
Клиренс изменится на: <span class="badge badge-info">{{ roadClearance }}</span>
</p>
</div>
<div class="col-md-12 center-block">
<table class="table table-hover table-bordered">
<thead>
<tr>
<th>
Размер
</th>
<th>
Старый вариант
</th>
<th>
Новый вариант
</th>
<th>
Разница
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
Ширина шины, мм (A)
</td>
<td>
{{ sectionWidthSet1 }}
</td>
<td>
{{ sectionWidthSet2 }}
</td>
<td>
{{ sectionWidthSet1 - sectionWidthSet2 }}
</td>
</tr>
<tr>
<td>
Высота профиля, мм (B)
</td>
<td>
{{ rimHeight_mm_Set1 }}
</td>
<td>
{{ rimHeight_mm_Set2 }}
</td>
<td>
{{ rimHeight_mm_Set1 - rimHeight_mm_Set2 }}
</td>
</tr>
<tr>
<td>
Внутренний диаметр, мм (C)
</td>
<td>
{{ innDiameterSet1 }}
</td>
<td>
{{ innDiameterSet2 }}
</td>
<td>
{{ innDiameterSet1 - innDiameterSet2 }}
</td>
</tr>
<tr>
<td>
Внешний диаметр, мм (D)
</td>
<td>
{{ extDiameterSet1 }}
</td>
<td>
{{ extDiameterSet2 }}
</td>
<td>
{{ extDiameterSet1 - extDiameterSet2 }}
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
|
Нужно было сделать такую "анимацию": кликаем, стили применяются сразу. Кликаем ещё раз, стили пропадают через время. То бишь, эдакий addClass через таймаут, но без JS-императива.
Всё проклял, пока не понял простую вещь - для определения параметров анимации ангуляр читает стили. нужно читать доки :) в общем, вот пример : элемент станет красным мгновенно, а синим- через время (одну секунду)
<html><head>
<style>.test {
color: #00f;
font-size: 48px;
-webkit-transition-property: color, font-size;
transition-property: color, font-size;
-webkit-transition-duration: 1s;
transition-duration: 1s;
-webkit-transition-timing-function: steps(1);
transition-timing-function: steps(1);
}
.hidden-add {
-webkit-transition-duration: 0s;
transition-duration: 0s;
}
.hidden {
color: #f00;
font-size: 36px;
}</style>
<style type="text/css"></style></head>
<body>
<div ng-app="app" ng-init="hidden = true" class="ng-scope">
<button ng-click="hidden = !hidden">Toggle</button>
<div ng-class="{hidden: hidden}" class="test-animation test hidden">myEl</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script><script src="https://code.angularjs.org/1.2.16/angular-animate.min.js"></script>
<script>
var app = angular.module('app', ['ngAnimate']);
</script>
</body></html>
Тут зарыт трюк, поэтому его поясню. Зарыт он в стилях. Префиксы уберу за простотой.
/* Начальные стили - цвет и размер шрифта */
.test {
color: #00f;
font-size: 48px; }
/* конечные стили - другие цвет и размер шрифта */
.hidden {
color: #f00;
font-size: 36px; }
/* Параметры анимации */
.test {
transition-property: color, font-size; /* Анимируем изменение свойств цвет и размер шрифта */
transition-duration: 1s; /* длительность прописана чисто для ангуляра */
transition-timing-function: steps(1); /* смягчение не нужно - нужно, чтобы стили ставились мгновенно. так что сюда подходит лестничная функция с одной ступенькой с конца */
}
/* Анимация добавления класса */
.hidden-add {
transition-duration: 0s; /* снимаем время анимации, получаем мгновенное применение стилей */
}
|
Цитата:
|
|
kazemir,
что это за ад?) |
Цитата:
|
Цитата:
- direction-links - previous-text - next-text - boundary-links - first-text - last-text которые, по сути, задают отображение в шаблоне. У меня их просто нет, только сервис. Т.е. шаблон настраивается произвольно, как угодно. Иными словами, можно легко сделать враппер-директиву с нужной разметкой и использовать. Или, как у меня в примере, использовать контроллер с подгружаемыми шаблонами, Или вообще не подгружать шаблоны, а писать его прямо в разметку :) Возможность задавать общие опции для всех экземпляров пагинатора (конфигурировать) Поскольку, сервис - функция, можно расширить ее прототип и доп. методы/свойства будут у всех созданных ею экземпляров. |
| Часовой пояс GMT +3, время: 14:23. |