Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   помогите новичку с функцией setInterval (https://javascript.ru/forum/project/54901-pomogite-novichku-s-funkciejj-setinterval.html)

smollalex 05.04.2015 21:07

помогите новичку с функцией setInterval
 
В общем есть такой код:
<span class="target" data-start="0" data-end="8000000000" data-interval="1000" data-timer="1010"></span>

$(document).ready(function(){

		$('.target').each(function(){
			var timer = $(this).attr('data-timer');
			setInterval(Calc(this), timer);
		});
		

		function Calc(input){
			var Target = $(input);
			var startValue = Number(Target.attr('data-start'));
			var endValue = Number(Target.attr('data-end'));
			var interval = Number(Target.attr('data-interval'));
			var progress = startValue;
			if (startValue < endValue) {
				var progress = startValue + interval;
				Target.attr('data-start', progress);
				Target.html(progress);
			}
		}
	});


Подскажите плиз, почему функция вызывается только один раз? Спасибо!

theKingOfJava 05.04.2015 21:24

потому что у тебя в setInterval первым аргументом попадает undefined. setInterval принимает в качестве первого аргумента функцию, а не ее вызов. можешь попробовать переписать так
function Calc(input){return function(){твой код}}

возможнол есть другие ошибки. Но причина -- в этом

smollalex 05.04.2015 21:27

Спасибо, работает )

nerv_ 05.04.2015 21:30

setInterval(Calc.bind(0, this), timer);

рони 05.04.2015 21:33

таймеры через data
 
:write:
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">

  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
    $(document).ready(function(){

		$('.target').each(function(){
		    var Target = $(this);
			var duration = Target.data('duration');
            var startValue = Target.data('start');
            Target.html(startValue);
            var f = Calc.bind(this);
            Target.timer = setInterval(f, duration);
		});


		function Calc(){
			var Target = $(this);
			var startValue = Target.data('start');
			var endValue = Target.data('end');
			var step = Target.data('step');
            startValue += step;
			if (startValue < endValue) {
				Target.data('start', startValue);
			}
            else {
              window.clearInterval(Target.timer);
              startValue = endValue
            };
            Target.html(startValue);
		}
	});

  </script>
</head>

<body>
<span class="target" data-start="0" data-end="8000" data-step="1000" data-duration="1010"></span>
<span class="target" data-start="0" data-end="12" data-step="1" data-duration="1010"></span>
</body>

</html>


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