Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.11.2011, 11:48
czp czp вне форума
Профессор
Отправить личное сообщение для czp Посмотреть профиль Найти все сообщения от czp
 
Регистрация: 15.10.2011
Сообщений: 213

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

<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);
}

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

Последний раз редактировалось czp, 08.11.2011 в 12:17.
Ответить с цитированием
  #2 (permalink)  
Старый 08.11.2011, 13:10
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

нужно просто вынести
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) один раз делать, а не каждый раз
Ответить с цитированием
  #3 (permalink)  
Старый 08.11.2011, 13:18
czp czp вне форума
Профессор
Отправить личное сообщение для czp Посмотреть профиль Найти все сообщения от czp
 
Регистрация: 15.10.2011
Сообщений: 213

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

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

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

Последний раз редактировалось czp, 08.11.2011 в 13:20.
Ответить с цитированием
  #4 (permalink)  
Старый 08.11.2011, 13:30
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

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

Последний раз редактировалось nekto_O, 08.11.2011 в 13:34.
Ответить с цитированием
  #5 (permalink)  
Старый 08.11.2011, 13:35
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

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

добавьте строку
op = Math.round(op * 100) / 100;
Ответить с цитированием
  #6 (permalink)  
Старый 08.11.2011, 15:42
czp czp вне форума
Профессор
Отправить личное сообщение для czp Посмотреть профиль Найти все сообщения от czp
 
Регистрация: 15.10.2011
Сообщений: 213

ооо) спасибо, сработали обама варианта))
Pavel M+
nekto_O+
Ответить с цитированием
  #7 (permalink)  
Старый 08.11.2011, 16:01
czp czp вне форума
Профессор
Отправить личное сообщение для czp Посмотреть профиль Найти все сообщения от czp
 
Регистрация: 15.10.2011
Сообщений: 213

ой ребята подскажите, а как скрипт заморозить??
в php вот так sleep(25) а в JS?? на нужное мне вермя преостановить
Ответить с цитированием
  #8 (permalink)  
Старый 08.11.2011, 16:14
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

http://alljs.ru/articles/timeout/overview#nosleep
Ответить с цитированием
  #9 (permalink)  
Старый 08.11.2011, 19:13
czp czp вне форума
Профессор
Отправить личное сообщение для czp Посмотреть профиль Найти все сообщения от czp
 
Регистрация: 15.10.2011
Сообщений: 213

спасибо)
Ответить с цитированием
  #10 (permalink)  
Старый 09.11.2011, 12:41
czp czp вне форума
Профессор
Отправить личное сообщение для czp Посмотреть профиль Найти все сообщения от czp
 
Регистрация: 15.10.2011
Сообщений: 213

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

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ ТОЛЬКО ЦИФРЫ Amateur Internet Explorer 3 19.06.2011 07:20
id элемента не может начинаться с цифры? Kolyaj Events/DOM/Window 4 01.12.2010 17:25
Как правильно передать значение. xadv Работа 2 05.11.2010 12:55
Как правильно прописать свой код в .js Всеми_Любимый Элементы интерфейса 6 23.02.2010 21:34
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20