Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   не правильно вычесляет цифры (https://javascript.ru/forum/misc/22987-ne-pravilno-vycheslyaet-cifry.html)

czp 08.11.2011 11:48

не правильно вычесляет цифры
 
что то у меня не праивльно работае, вычесление цифр, подскажите где у меня проблема, надо сделать плавное затухание (не прибигая к ферймворкам)

<style>
#tron {
 width:500px; 
 height:500px;
 background:#0F0;
}

</style>


<input type="button" onclick="hide('tron', 1)" value="opacity" />
 <div id="tron" ></div>

function hide(ob, x) {
  element = document.getElementById(ob);
  i = 0;
  op = parseFloat(x);
 
  if (op > i || op !== 0) {
    op -=0.05;
	element.style.opacity = op;
	/*element.style.filter='alpha(opacity='+op*100+')';*/ 
	tss = setTimeout('hide(\''+ob+'\', '+op+')', 10); 
  }
  if (op < 0) { clearTimeout(tss);element.style.opacity = 0;}
  alert(op);
}

из сообшений видно, что скрипт как то не правильно делает вычесление, и в итоги в минус заходит, как исправить?

Pavel M. 08.11.2011 13:10

нужно просто вынести
op -=0.05;
выше проверки на ноль

еще хорошо бы объявлять переменные в функции с помощью var, иначе они станут глобальными, а это плохо

вместо 'hide(\''+ob+'\', '+op+')' лучше нормально вызывать функцию

и вместо alert() использовать console.log(), - не будет прерываться выполнение программы

будет что-то вроде

function hide(ob, x) {
	var element = document.getElementById(ob),
		i = 0,
		op = parseFloat(x);

	op -= 0.05;

	if (op > i) {
		element.style.opacity = op;
		setTimeout(function () {
			hide(ob, op);
		}, 10);
	} else {
		element.style.opacity = 0;
	}
	console.log(op);
}


да по хорошему лучше и document.getElementById(ob) один раз делать, а не каждый раз

czp 08.11.2011 13:18

дак всеравно не праивльно считает он, 0,95, потом 0,86 потом 0,7999999, как он так криво считает??

надо что бы четко шло

1
0,95
0,90
0,85
0,80
....
и так далие
как так сделать?

nekto_O 08.11.2011 13:30

op = (op-0.05).toFixed(2);

Pavel M. 08.11.2011 13:35

если это так важно, то после
op -= 0.05;

добавьте строку
op = Math.round(op * 100) / 100;

czp 08.11.2011 15:42

ооо) спасибо, сработали обама варианта))
Pavel M+
nekto_O+

czp 08.11.2011 16:01

ой ребята подскажите, а как скрипт заморозить??
в php вот так sleep(25) а в JS?? на нужное мне вермя преостановить

Kolyaj 08.11.2011 16:14

http://alljs.ru/articles/timeout/overview#nosleep

czp 08.11.2011 19:13

спасибо)

czp 09.11.2011 12:41

в продолжение темы, а подскажите как мне вычеслить стиль???, тоесть
op = document.getElementById('tron').style.opacity

не работает, мне надо что бы
op = parseFloat(x);

я сам не назначал, а оно считывала стиль существуюущий


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