Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Динамичный подсчет времени (https://javascript.ru/forum/misc/36700-dinamichnyjj-podschet-vremeni.html)

kingstakh 05.01.2016 10:07

Цитата:

Сообщение от рони (Сообщение 402544)
kingstakh,

Хм, протестировал в приложении, почему-то тоже подвисает после просмотра одной остановки и возврата к выбору другой ... Наверное что-то у меня не так

рони 05.01.2016 10:11

kingstakh,
Цитата:

Сообщение от рони
 $scope.myArray = [].map.call($scope.work.split(','),foo)

call лишний убрал

рони 05.01.2016 10:12

Цитата:

Сообщение от kingstakh
после просмотра одной остановки и возврата к выбору другой

это как?

kingstakh 05.01.2016 10:17

Цитата:

Сообщение от рони (Сообщение 402608)
это как?

Разобрался, у меня не все автобусы по выходным имеют расписание, просто не курсируют, поэтому контроллер получает пустое поле, отсюда и глюк с зависанием, добавил проверку:

if ($scope.weekend) {
       $scope.arrString = [].map.call($scope.weekend.split(','),foo)
	} else {
       $scope.arrString = [''];
    }

kingstakh 05.01.2016 12:03

Цитата:

Сообщение от рони (Сообщение 402607)
kingstakh,

call лишний убрал

:write: Как бы еще разделить время по расписанию и подсчет времени непосредственно на странице, сейчас одной строкой, для верстки неудобно, в первом примере было

<span class="bustime" >{{bustime}}</span><span class="timeleft">{{arrString[$index]}}</span>

рони 05.01.2016 12:25

Цитата:

Сообщение от kingstakh
Как бы еще разделить время по расписанию и подсчет времени

просто подумать :dance:
<!DOCTYPE html>
<html ng-app="app">
<head>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>
  <meta charset="utf-8">
  <title>Расписание</title>
  <style type="text/css">
 .bustime {
     color: #FF1493;
 }
  .timeleft {
    color: #0000FF;
  }

  </style>
<script>
 var c = {
    formatTime: function(b) {
        b = Math.floor(b / 1E3);
        var a = Math.floor(b / 60),
            d = Math.floor(a / 60);
        b %= 60;
        a %= 60;
        return c.two(d % 24) + " час. " + c.two(a) + " мин. " + c.two(b) + " сек. "
    },
    two: function(b) {
        return (9 < b ? "" : "0") + b
    }
};
angular.module("app", [])
  //Часы
.controller("TimeCtrl", function($scope, $interval) {
  var tick = function() {
    $scope.clock = Date.now();
  }
  tick();
  $interval(tick, 1000);
})

.controller("TabsDemoCtrl", function($scope) {
    $scope.work = '6:00, 8:45, 12:00, 12:10, 12:35, 23:37'; // Рабочие дни
    $scope.weekend = '6:00, 8:45, 13:00, 14:10, 15:35, 23:50'; // Выходные дни
    $scope.fn = function ()
    {  function foo(data) {
        var el = data.match(/\d+/g);
        var date = new Date;
        date.setHours(+el[0], +el[1],0,0);
        date = date.getTime() - (new Date).getTime();
        return {time : data, text : ' '+(date < 0 ? "Автобус ушел" : "Осталось : " + c.formatTime(date))};

    }
       $scope.myArray = $scope.work.split(',').map(foo)
       $scope.arrString = $scope.weekend.split(',').map(foo)
       window.setTimeout($scope.fn,1000) // Вывод данных в приложении работает
    }
   $scope.fn()

});
</script>
</head>
<body>
<h3 ng-controller="TimeCtrl">Сейчас {{ clock | date:'HH:mm:ss'}}</h3>
  <ul ng-controller="TabsDemoCtrl">
    <li ng-repeat="bustime in myArray track by $index">
       <span class="bustime" >{{bustime.time}}</span><span class="timeleft">{{bustime.text}}</span>

    </li>
</ul>
  <ul ng-controller="TabsDemoCtrl">
Здесь для выходных дней
    <li ng-repeat="bustime in arrString track by $index">
       <span class="bustime" >{{bustime.time}}</span><span class="timeleft">{{bustime.text}}</span>
    </li>
</ul>

</body>
</html>

kingstakh 05.01.2016 12:46

Цитата:

Сообщение от рони (Сообщение 402624)
просто подумать :dance:

Эх, было бы чем ... СПАСИБО!


Часовой пояс GMT +3, время: 09:48.