Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   программная анимация (https://javascript.ru/forum/misc/23608-programmnaya-animaciya.html)

trikadin 04.12.2011 20:37

nerv_, ваш способ медленнее и больше памяти жрёт.

taha 05.12.2011 02:20

trikadin, сделал как Вы сказали и всё прекрасно, не считая firefox, который тормозит скрипт на функции easeOut в этих строках, как и в прошлых вариантах

function d(progress) {
	        for(var a = 0, b = 1, result; 1; a += b, b /= 2) {
	           if (progress >= (7 - 4 * a) / 11)


правда в нем еще две группы с 10-15 вкладок в каждой.. и он всегда тормозит.. но остановить скрипт он всёже хочет в данном месте

trikadin 05.12.2011 02:29

А что после ифа?

И каково значение progress? lim(a)=2 при b=>0, следовательно, если progress > -1/11, то бесконечный цикл гарантирован.

taha 05.12.2011 03:34

код взят всё с тойже статьи

function easeOut(progress) {
     function d(progress) {
        for(var a = 0, b = 1, result; 1; a += b, b /= 2) {
           if (progress>=(7-4*a)/11)
               return -Math.pow((11 - 6 * a - 11 * progress) / 4, 2) + Math.pow(b, 2);
        }
     }
     return 1 - d(1 - progress);
}


поемуто с простейшими функциями такого не случается

значение progress не знаю.. ибо firefox зависает.. это периодически случается только в нём кстати...

но теперь, благодаря Вам, в три раза реже))

оффтоп... когда перебираю все анимируемые элементы
var obj = document.getElementById("Mylist");
	for (var i in obj.childNodes){
			if ( obj.childNodes[i].nodeType == 1 ){
				...
       }}

firebug говорит
Цитата:

Предупреждение: reference to undefined property obj.childNodes[i].nodeType
Строка: 49
не могу понять почему... вроде всё правильно же

taha 05.12.2011 08:38

сделал одну из предложеных функций easeOut'вой

function easeOut(progress) { return 1-Math.pow((1-progress),2) * ((2.5 + 1) * (1-progress) - 2.5); }


firefox, ниразу не завис ещё, остальные еще быстрее залетали

но вопрос по
Цитата:

Предупреждение: reference to undefined property obj.childNodes[i].nodeType
Строка: 49
остался актуален

поискал в инете, в статьях про DOM примеры вот такие:
var object = document.getElementById('el');
    for (var childItem in object.childNodes) {
    if (object.childNodes[childItem].nodeType == 1)
    object.childNodes[childItem].style.color = '#FF0000';
    }

тоесть тоже самое... и в чём косяк?

PS: то что firefox притормаживал это впринципе норм.. его обычное состояние

trikadin 05.12.2011 11:59

Вообще, object.childNodes - это массив (грубо говоря) узлов. Поэтому можно попробовать перебирать вот так:
for (var i=0; i!= object.childNodes; ++i)


Потому что мало ли, что там может выплыть при переборе через key in obj.

taha 05.12.2011 12:17

эхххххх..... =\\\\\\\\\\\

var n = 0; /* Все прямые потомки являющиеся элементами */

	for (var i in objPiE.childNodes) n=(objPiE.childNodes[i].nodeType==1)?(++n):(n);
	/* Колличество элементов li в данном списке */


красивей смотрелось =(

melky 05.12.2011 12:30

Цитата:

Сообщение от taha (Сообщение 140806)
var obj = document.getElementById("Mylist");
	for (var i in obj.childNodes){
			if ( obj.childNodes[i].nodeType == 1 ){
				...
       }}

в IE сюда попадёт ещё и item и length.
перебирайте элементы через цикл, а не через перебор свойств.
var i = 0, curr;
while(curr = obj.childNodes[i++]){
        //....
}

devote 05.12.2011 12:34

for(var curr, i = 0; curr = obj.childNodes[i]; i++){ 
    if ( curr.nodeType == 1 ) {
        // ...
    }
}

taha 05.12.2011 12:46

trikadin,
спасибо огромное работает также, но firebug ругаться перестал на это...
он что-то вобще взбесился.. даже на jquery, который тупо только подключен, ругается


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