Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблемы с анимацией (https://javascript.ru/forum/misc/13673-problemy-s-animaciejj.html)

vyazovetskova 11.12.2010 01:02

Книжку держала. http://javascript.ru/tutorial/object/intro...Вот, сами убедитесь. если в чем не права- поправьте (обоснование- наилучшее подтверждение вашей компетентности).Я и не думала давать мастер класс, вы обознались. А пример мой работает, я убедилась(Ваш, кстати, нет). А почему бы и не сделать на JQuery, не вижу причин этого не делать.

dmitriymar 11.12.2010 05:12

vyazovetskova,
работает его пример-и алгоритм там более грамотно составлен,ну и на мастер класс очень похоже.

vyazovetskova 11.12.2010 09:54

Работает, но не так как надо(на клик не реагирует). Не думаю, что описание своего опыта стоит называть мастер классом.

dmitriymar 11.12.2010 10:08

vyazovetskova,
чей его или ваш на клик не реагирует. его реагирует. если ваш не работает то проблема у вас таже что и говорил я вам. он грамотно организовал свой алгоритм(хотя по мне там не хватает пары строк но это не суть важно). весь смысл алгоритма сводиться вот к этому и я не один раз вам это говорил и мне казалось что вы поняли это.
сдвижка на одну точку-опрос переферии-сдвижка- опрос-сдвижка- опрос. и все алгорритмы выложенные здесь кроме этого не могли работать. причина одна что авторы их не способны думать-вызубрили школьный курс и блещут им. этим и отличаются разработчики от людей просто знающих язык.
у вас же непрерывная сдвижка без опроса. по поводу параллельности процессов-ну смотрите -поставьте несколько плееров на страницу и они могут играть параллельно-если вы им это не запретите.ну а прерывания на опрос переферии (назову всётаки как это в ассемблере) ни в одном языке ещё не отменяли. и если какаято оболочка сама их вставляет за вас-это плюс оболочки

x-yuri 11.12.2010 10:27

Цитата:

Сообщение от vyazovetskova
Передо мной встала задача сделать анимацию на js. Но не просто анимацию, а еще и такую, чтобы она реагировала на события. (Анимация не может реагировать на события, т.е. с точки зрения пользователя - может, но мы ведь программисты) Конкретно это было так: есть объект (у меня была улитка), который постоянно поднимается вверх до определенного уровня, потом падает вниз и опять поднимается и т.д...При клике на объект он должен упасть. Задачка с подвохом. Дело в том, что в js нет паралельности. (Потому что ее в программировании быть не может, параллельность есть в математике) Казалось бы, такую задачу можно решить использовав объекты. (Такое впечатление, что объекты могут помочь решить проблему "отсутствия параллельности") Но в js объектов как таковых нет. (В js есть объекты) Объектами называются обычные хэши. (В js нету хэшей, просто бывает можно рассматривать некоторые объекты как хэши) На ум пришло одно: немного подвинуть объект, проверить был ли клик или не достиг ли он пиковой вершины. Если был клик или вершина достигнута,то уронить объект. Если ни того, ни другого не произошло- подвинуть еще выше. (Более понятный вариант: "Выполнять анимацию в n шагов, проверяя, был ли клик в конце каждого шага") Код, который я приведу ниже, в принципе так и делает, но более изящно с помощью setTimeout. (Значит раньше у нас была проблема параллельности, а теперь мы уже считаем, что это совсем даже не проблема и эта перпендикулярность приводит нас к изящному решению) Зададим (математическая терминология детектед) 2 функции : начать движение(возвращает элемент на стартовую позицию, обуляет высоту) и двигаться вверх. Собственно. код:
function begin(x){ //x- высота, на которой сейчас находится улитка (высота, на которую нужно скинуть улитку)
H=0;
$('#snail').animate({top:'+='+x},1000); //возвращает улитку в начальное положение
goes_up(); // мы скинули улитку и начали движение вверх
}

function goes_up(){
H++;
$('#snail').animate({top:'-='+speed},1000);
if (H<(maxH/speed)){
timer = setTimeout("goes_up()",1000);
}
else {begin(maxH)}
}


H=0;//высота улитки
maxH=180; //максимальная высота, на которую может забраться улитка (какой же это maxH? это max(H*speed))
speed=3; //сколько улитка проползет на секунду
begin(0);

$('#snail').click(function(){
clearTimeout(timer); //сбрасывает setTimeOut
begin(H*speed); //сначала уронит улитку, а потом опять начнет движение
});

подробнее о setTimeOut и clearTimeOut можно прочесть тут :www.w3schools.com/js/js_timing.asp

к тому же код какой-то запутанно-замороченный
<!DOCTYPE HTML>
<html>
  <head>   
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
  </head>
  <body>

  <div id="snail" style="
    position: absolute;
    top: 100px;
    width: 20px;
    height: 20px;
    background: red;
  "></div>
  
  <script type="text/javascript">
      function go(){
          $('#snail').animate({top: '-=100'}, {duration: 3000});
          $('#snail').animate({top: '+=100'}, {duration: 500, complete: go});
      }
      $('#snail').click(function(){
          $('#snail').stop(true);
          $('#snail').animate({top: '100'}, {duration: 500, complete: go});
      });
      
      go();
  </script>
  </body>
</html>

dmitriymar 11.12.2010 10:28

vyazovetskova,
возможно и ваш алгоритм изначальный бы работал-если бы по он клик вы не пытались бы вызвать другую функцию не прервав работающую а передавали бы управление другому блоку работающей функции-но повторюсь что это "возможно" а проверять это нет ни времени ни желания

vyazovetskova 11.12.2010 23:20

Мой алгоритм работает, я его проверяла.

А по факту сыр-бор уже не из-за чего. Задача решена.


x-yuri,
ведите свой блог, если вас мои формулировки не устраивают. Это уже снобизм, придираться к языку. Смущает математическая терминология? да, это бесусловно имеет огромный смысл в решении этой задачки)) вы так отлично правите мой текст, лучше бы сами писали- тогда у таких как я новичков и вопросов не возникало. Критиковать всегда лучше.

x-yuri 12.12.2010 10:13

vyazovetskova, если ты не в состоянии воспринимать критику, зачем говорить "если в чем не права- поправьте"? Снобизм? Ровно наоборот ;) Придираюсь к языку? Ну да, а как ты хотела? Чтобы тебя поняли, надо называть вещи своими именами. Я же к орфографии не придирался? Хотя с ней у тебя вроде нормально. Проблема в том, что там были ошибки по-серьезнее терминологии. А хвалить, да, я не умею. И не только окружающих :) Так что советую тебе перечитать мое сообщение и вынести оттуда для себя что-нибудь ползеное, а не становится в позу и верить в то, что ты там себе напридумывала ;)

Kolyaj 12.12.2010 14:21

Цитата:

Сообщение от vyazovetskova
лучше бы сами писали- тогда у таких как я новичков и вопросов не возникало.

Такие, как вы, новички читать почему-то не любят. Для вас уже столько текстов написано, что за день не прочитаешь, а вы всё свои пишете, утверждая, а что ж вы сами-то не написали. Да написали, но вы не читаете.

x-yuri 18.12.2010 15:46

а снобизм, вот он:
Цитата:

Сообщение от dmitriymar
согласен с одним высказавшимся по поводу людей знающих ассемблер и скрипт и их положении в иерархии.блин да вы здесь читать все умеете? а думать ? или все заученными шаблонами языка думаете? ну ничего удивительно что таким как я платят в разы больше суммы зарплат каких как ваших за руководство такими как вы.

---
в общем, в результате долгой и нудной переписки, dmitriymar так и не смог объяснить, в чем наша ошибка. Насколько я понял, он утверждает, что события, возникшие во время обработки других событий "пропадают". Но он не смог объяснить, почему. Периодически можно было услышать "идёт эта информация из знания ассемблера с 93 года" или "мне всё равно-поскольку знаю что работает именно так как я говорю"

вот код который опровергает его утверждение
<!DOCTYPE HTML>
<html>
  <body>
 
<div id="div" style="
    width: 100px;
    height: 100px;
    background: red;
"></div>
 
<script type="text/javascript">
function $(id){ return document.getElementById(id); }
$('div').onclick = function(){
    $('div').onclick = function(){
        $('div').innerHTML += '.';
    }
    for( var i=0; i<1500000000; i++ );   // !!! количество итераций зависит от CPU
    $('div').innerHTML += 'o';
}
</script>
 
  </body>
</html>

(изначально я рассчитывал, что достатчно, чтобы один клик не пропал. Поэтому код мог бы быть удобнее)
но dmitriymar этого не достаточно. Недостаточно, что один клик не пропал. Не достаточно, что 30 кликов не пропало. Может у вас пропадет?

и считает, что тестировать надо так:
Цитата:

Сообщение от dmitriymar
чтобы не спорить в пустую. запусти какойнибудь цикл по таймеру длительный. сделай обработчик события он клик-чтобы считал колво нажатых раз. запусти несколько раз это дело по таймеру. ну и выведи по окончаню количество нажатий.

Цитата:

Сообщение от dmitriymar
в смысле обработчик события онклик к какому либо элементу на странице

p.s. надеюсь, что как только там у них перетурбации закончаться, dmitriymar, вынырнув из бюджета, раскажет нам все подробно и в картинках :)

dmitriymar 18.12.2010 15:53

вах блеснул-так блеснул.за такой блеск -ну если честно обычно избиваю конкретно-называя вещи своими именами -пизжу т аких как ты охуенно. особенно там где мои слова перекручивают. ты хочешь сказать что ты всегда будешь знать как отреагирует браузер на два одновременно возникших события?-об этом я тебе говорил-а тот говно код что ты здесь привёл(и я тебе об этом говорил не один раз)-имитирует одновременно одно событие. в вопросе заданном в начале поста-шло именно пересечение событий. напомни город в каком ты-возможно буду там проездом. и мне будет приятно-ну и тебе полезно несколько месяцев в больнице отдохнуть.
тебе было ясно сказано что ещё нужно событие запуску по таймеру-какое ты проигнорировал и гнёшь своё. поэтому повторю-прежде чем что то писать-НАУЧИСЬ СНАЧАЛА ЧИТАТЬ ТО ЧТО тебе ПИШУТ,А НЕ ЧИТАТЬ ТАК КАК ТЕБЕ ЭТО ХОЧЕТСЯ ПРОЧИТАТЬ!!!!

dmitriymar 18.12.2010 16:00

и ещё одно
$('#idl').animate({top:'-=180'},40000);//подъем
$('#id').animate({top:'+=180'},1000);//падение
что это такое как не функция циклического сдвига вызываемая по таймеру.что то другое? так нет-функция какая обращаеться к подпрограмме в какой находится цикл обеспечивающий движение.и скажу одно-людям нахватавшихся знаний в одной области -но не знающим основ-точнее трактующим их как хотят -стоит забыть о знаниях своих и начать с основ

x-yuri 18.12.2010 18:34

Цитата:

Сообщение от dmitriymar
ты хочешь сказать что ты всегда будешь знать как отреагирует браузер на два одновременно возникших события?-об этом я тебе говорил

Вот твое объяснение, что надо тестировать:
Цитата:

Сообщение от dmitriymar
ты тестируешь обрабатываються ли опросы преферии во время выполнения кода скрипта-не важно какого. цикл нужен чтобы этот скрипт условно не выполнялся мгновенно -чтобы было время нажать за его время выполнения пару раз на кнопку мыши. повторность его-чтобы увидить что будут фиксироваться нажатия+1 только во время когда скрипт не выполняеться-только в промежутках между вызовами по таймеру.

а потом была фраза:
Цитата:

Сообщение от dmitriymar
у меня такая чуйка что цикл запускался нажатием на тот элемент.

это здесь ты мне сказал про "два одновременных события"? Ну вот код с разными событиями на двух разных элементах. Результат тот же.
<!DOCTYPE HTML>
<html>
  <body>
 
<div id="div" style="
    width: 100px;
    height: 100px;
    background: red;
"></div>

<a href="#" id="go">go</a>

<a href="#" id="show-clicks">show clicks</a>
 
<script type="text/javascript">
var clicks = 0;

function $(id){ return document.getElementById(id); }

$('div').onclick = function(){
    clicks++;
}

$('go').onmousedown = function(){
    for( var i=0; i<1500000000; i++ );   // !!! количество итераций зависит от CPU
    $('div').innerHTML += 'done';
}

$('show-clicks').onclick = function(){
    alert( clicks );
}
</script>
 
  </body>
</html>


Цитата:

Сообщение от dmitriymar
тебе было ясно сказано что ещё нужно событие запуску по таймеру-какое ты проигнорировал и гнёшь своё.

ты для начала сумей объяснить, как оно работает. А там и тест не проблема будет написать ;) А то от тебя слышно только "я знаю как оно должно быть, но не знаю почему"...

Цитата:

Сообщение от dmitriymar
$('#idl').animate({top:'-=180'},40000);//подъем
$('#id').animate({top:'+=180'},1000);//падение
что это такое как не функция циклического сдвига вызываемая по таймеру.что то другое? так нет-функция какая обращаеться к подпрограмме в какой находится цикл обеспечивающий движение.

ты для начала этот цикл покажи, а потом можно будет о чем-то говорить. А то ты очень много говоришь, а аргументация... ну разве что такая: "если честно обычно избиваю конкретно-называя вещи своими именами -пизжу т аких как ты охуенно"

x-yuri 18.12.2010 18:44

ну вот я даже сделал как ты сказал. Ни один из 28 кликов не пропали
<!DOCTYPE HTML>
<html>
  <body>
 
<div id="div" style="
    width: 100px;
    height: 100px;
    background: red;
"></div>

<a href="#" id="go">go</a>

<a href="#" id="show-clicks">show clicks</a>
 
<script type="text/javascript">

var clicks = 0;
var n = 3;
var delay = 1000;

$('div').onclick = function(){
    clicks++;
}

$('go').onclick = function(){
    setTimeout( loop, delay );
};

function loop(){
    if( n <= 0 ){
        $('div').innerHTML += 'done';
        return;
    }
    for( var i=0; i<1500000000; i++ );   // !!! количество итераций зависит от CPU
    n--;
    setTimeout( loop, delay );
}

$('show-clicks').onclick = function(){
    alert( clicks );
}

function $(id){ return document.getElementById(id); }

</script>
 
  </body>
</html>

dmitriymar 18.12.2010 19:11

Цитата:

Сообщение от x-yuri
чтобы не спорить в пустую. запусти какойнибудь цикл по таймеру длительный. сделай обработчик события он клик-чтобы считал колво нажатых раз. запусти несколько раз это дело по таймеру. ну и выведи по окончаню количество нажатий.

вот что я сказал
а вот что ты сделал-
Цитата:

Сообщение от x-yuri
1 <!DOCTYPE HTML>
02 <html>
03 <body>
04
05 <div id="div" style="
06 width: 100px;
07 height: 100px;
08 background: red;
09 "></div>
10
11 <script type="text/javascript">
12 function $(id){ return document.getElementById(id); }
13 $('div').onclick = function(){
14 $('div').onclick = function(){
15 $('div').innerHTML += '.';
16 }
17 for( var i=0; i<1500000000; i++ ); // !!! количество итераций зависит от CPU
18 $('div').innerHTML += 'o';
19 }
20 </script>
21
22 </body>
23 </html>

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

x-yuri 18.12.2010 19:47

вот что ты сказал:
Цитата:

Сообщение от x-yuri
ты тестируешь обрабатываються ли опросы преферии во время выполнения кода скрипта-не важно какого

именно это я тестировал. Объяснить, почему надо тестировать не так, ты не в состояния. Да, в общем-то, у тебя в целом с объяснением проблемы, надо брать букварь и начинать с основ...

а потом я написал тест с твоих слов. Который опять же показал, что ты несешь чушь

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

dmitriymar 18.12.2010 19:53

бля-ты сам поставил в посте что я написал. и ты привёл код как ты это тестил. так ответь мне на один вопрос где в твоём коде вызов по таймеру функции несколько раз-упор на это я сделал-повторив про таймер два раза в двух строках.
а если при этом ещё постиш 2 противоречащие действия на функцию по таймеру и обработчик по клику-то в конце вобще ниезвестно что будет на выходе. что здесь ещё можно или нужно объяснять?блин займи 5 монет у кого нибудь и ВЫКУПИ АЗБУКУ НАЗАД!!!блин зоопарк один птица другой пень...

x-yuri 18.12.2010 21:06

вот что ты написал:
Цитата:

Сообщение от dmitriymar
ты тестируешь обрабатываються ли опросы преферии во время выполнения кода скрипта-не важно какого

вот код который это тестирует (таймер для этого не нужен):
<!DOCTYPE HTML>
<html>
  <body>
 
<div id="div" style="
    width: 100px;
    height: 100px;
    background: red;
"></div>
 
<script type="text/javascript">
function $(id){ return document.getElementById(id); }
$('div').onclick = function(){
    $('div').onclick = function(){
        $('div').innerHTML += '.';
    }
    for( var i=0; i<1500000000; i++ );   // !!! количество итераций зависит от CPU
    $('div').innerHTML += 'o';
}
</script>
 
  </body>
</html>

---
вот как ты представляешь себе тест:
Цитата:

Сообщение от dmitriymar
запусти какойнибудь цикл по таймеру длительный. сделай обработчик события он клик-чтобы считал колво нажатых раз. запусти несколько раз это дело по таймеру. ну и выведи по окончаню количество нажатий. в смысле обработчик события онклик к какому либо элементу на странице

вот моя реализация:
<!DOCTYPE HTML>
<html>
  <body>
 
<div id="div" style="
    width: 100px;
    height: 100px;
    background: red;
"></div>

<a href="#" id="go">go</a>

<a href="#" id="show-clicks">show clicks</a>
 
<script type="text/javascript">

var clicks = 0;
var n = 3;
var delay = 1000;

$('div').onclick = function(){
    clicks++;
}

$('go').onclick = function(){
    setTimeout( loop, delay );
};

function loop(){
    if( n <= 0 ){
        $('div').innerHTML += 'done';
        return;
    }
    for( var i=0; i<1500000000; i++ );   // !!! количество итераций зависит от CPU
    n--;
    setTimeout( loop, delay );
}

$('show-clicks').onclick = function(){
    alert( clicks );
}

function $(id){ return document.getElementById(id); }

</script>
 
  </body>
</html>

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

dmitriymar 18.12.2010 21:13

ну слава яйцам -таймер ввел. но код я не понял абсолютно-что он должен делать по твоему замыслу? про код в идеале-тот что имел ввиду это-а то как он будет работать и проявиться ли конфликт двух одновременно запускаемых действий нажатия и запуска по таймера зависит от настроек таймера и содержимого функций. здесь конфликт не так явен как с движением в изначальном у неё-там было 50 на 50 шансов конфликта-точнее больше 50 за конфликт. здесь же % соотношение конфликт не конфликт меньше-так что экспериментируй и поймёшь сам свою ошибку в мировозрении

Kolyaj 18.12.2010 21:29

dmitriymar,
покажи уже свой код, подтверждающий твои слова. Что ж мы мучаемся-то в незнании.

dmitriymar 18.12.2010 22:13

фу блин-как вы меня достали. и ты где нибудь тоже займи 5 монет-тоже выкупи азбуку назад...

x-yuri 19.12.2010 05:44

Вложений: 1
ну что тут скажешь... объяснять ты не умеешь, доказать ничего не можешь, слушать других не собираешься. Что ж ты на форуме делать собрался, м?

p.s. я думаю, мы его нашли

dmitriymar 21.12.2010 12:13

x-yuri,
пень пластмассовый-заебал ты показывать свою тупость и знание на уровне первого класса второй четверти

Как приостановить выполнение скрипта?

Это сделать нельзя. Когда выполняется JavaScript, браузер не может обрабатывать события, поскольку к этим событиям могут быть привязаны другие JavaScript-обработчики, а параллельное выполнение скриптов в JavaScript запрещено. Для пользователя это выглядит как зависание браузера. Поэтому JavaScript всегда должен завершаться как можно скорее.
И дятел если тему не рубишь что запуская одновременно два события или событие не закончив предыдущее ты не можешь знать наверняка какое выполнится и в какой последовательности и не законфликтуют ли и что всё это зависит от многих факторов-производительности умпа ,скорости инета ,загруженности другими приложениямиями -то тебе нихуя ни поможет-ни доктор ни таблетки какие он тебе выпишет. в твоём случае-долбоёб это диагноз
http://xpoint.ru/forums/programming/.../faq.xhtml#131
пиши город где ты есть-точно если там буду найду и скручу твою куриную шею
почему меня один только город интересует-всё просто. могу поспорить что ты там у себя -Первый Дятел на деревне. и стоит спросить у любого что то типа-не подскажешь, где мне дятла(долбоёба,выблядка....с писок большой) найти-укажет твой дом

Riim 25.12.2010 19:09

Важное качество программиста - умение объяснять свои мысли, передавать свои знания "младшим". Программист не умеющий делать этого - трутень. Он лишь берет для себя, не пытаясь что-либо передать дальше, часто прикрывая эту неспособность тем, что все кругом слишком глупые и видите ли неспособны понять его, о великого. dmitriymar, то, что тебя не понимают - твоя вина. Я вижу, что тебя пытаются понять, составляют какие-то примеры по твоим описаниям, ты же лишь обсираешь все, что тебе показывают, но сам, как тот самый трутень, не можешь сесть и составить нормальный пример с внятным объяснением.

Угрозы в адрес коллег унижают не их, а тебя, как последнее быдло - низший слой.

Ассемблер знаешь? Да, я вижу, что вполне адекватные заявления бодро перемешаны с какой-то ересью, вроде того:
Цитата:

здесь конфликт не так явен как с движением в изначальном у неё-там было 50 на 50 шансов конфликта-точнее больше 50 за конфликт. здесь же % соотношение конфликт
любой, кто хоть сколько-то разбирается в ассемблере, знает, что никаких шансов и вероятностей здесь нет, даже если так и выглядит с точки зрения пользователя. Все эти ляпы выдают в тебе дилетанта нахватавшегося умных фраз, частично не понимающего их, но пытающегося уверенно манипулировать ими, дабы испугать присутствующих своими невзъи*енными знаниями.

У тебя два варианта:
1. в очередной раз огрызнуться, подтвердив сказанное выше.
2. составить, наконец, пример с внятным объяснением того, что в нем происходит, и того, что из этого следует.

Возможно, не отвечу, я здесь последнее время редко появляюсь.

dmitriymar 25.12.2010 19:12

Цитата:

Сообщение от Riim
любой, кто достаточно хорошо разбирается в ассемблере, прекрасно знает, что никаких шансов и вероятностей здесь нет, даже если так и выглядит с точки зрения пользователя. Все эти ляпы выдают в тебе дилетанта нахватавшегося умных фраз, частично не понимающего их, но пытающегося уверенно манипулировать ими, дабы испугать присутствующих своими невзъи*енными знаниями.

не сдлвоблудствуй и не обеденяй части из разных не связанных постов в один-это называется демогогия.
чего тебе объяснить что при 2х таймерах и одном событии ты с увереностью не сможешь сказать какое событие произойдёт-и что в этой рулетке всё зависит от производительности компа?
и то что ты меня цитируеш вяжи хоть к тому откуда они взяты-здесь конфликт не так явен как с движением в изначальном у неё-там было 50 на 50 шансов конфликта-точнее больше 50 за конфликт. здесь же % соотношение конфликт-
эта фраза касается скрипта - 2х таймеров и одного события. причём время запуска второго таймера может совпадать с ещё работой функции в первом и на всё это событие онклик накладываеться
читай хотябы для начала что куда и о чём
причём читай с начала а не с конца

Riim 25.12.2010 19:17

Цитата:

Сообщение от dmitriymar
части из разных не связанных постов

там лишь одна цитата, разных нет.

dmitriymar 25.12.2010 19:19

Цитата:

Сообщение от Riim
любой, кто достаточно хорошо разбирается в ассемблере, прекрасно знает, что никаких шансов и вероятностей здесь нет, даже если так и выглядит с точки зрения пользователя. Все эти ляпы выдают в тебе дилетанта нахватавшегося умных фраз, частично не понимающего их, но пытающегося уверенно манипулировать ими, дабы испугать присутствующих своими невзъи*енными знаниями.

не вяжи пост о скрипте к ассемблеру

dmitriymar 25.12.2010 19:21

Riim,
читай сначала. и учти-что он выложил солянку из переписки со мной. фраза с одного поста+фраза с другого-об абсолюнто другом.. вот и вышла та ересь что он положил. контекст переписки он знает и фраза о процентах-адресовывалась ему

Riim 25.12.2010 19:23

Хорошо, он неправ, теперь напиши как правильно. Мы хотим пример.

dmitriymar 25.12.2010 19:35

посмотри начальный код в этом посте-и ответь для себя при каких условиях он пойдёт на перекос?
1 пока оператор движения(язык не поворачиваеться так назвать)-по мне это цикличиская функция -обёрнутая в оператор движения в одну сторону не закончится-обработки он клик не будет
2 если оператор движения ещё не закончился в одну сторону а уже пошел запуск движения в обратную сторну(зависит от производительности компа) а если ещё событие он клик наложиться..
Ты сам для себя можешь ответить как именно себя поведёт алгоритм в этом случае? я тоже не могу
и только это имелось в виду-прочитай теперь весь топик этот с начала с учётом этого что написал,ну и добавь ещё переписку с критиками в личке и почему ушел с ней в личку и на тот момент как здесь появился первый рабочий код-"десятый" изо всех "правильно работающих" она несколько часов как уже сделала свой скрипт. поняла ошибку что циклы движения не должны быть такими длинными-что нужно дать возможность для опроса без возможных перекосов. и ассемблер имелся в виду что там програмер сам сам вводит точки опроса переферии и в подобном алгоритме нужно принудить браузер чаще опрашивать переферию не давая ему возможность перекосячить
а у неё по сути дела 3 таймера. 2 из них регуляторы скорости. 3 й запуск этих вниз-верх по таймеру.
так предскажи как он будет срабатывать на разных компах с разной производительностью?

Riim 25.12.2010 19:59

Цитата:

Сообщение от dmitriymar
прочитай теперь весь топик этот с начала с учётом

да я уж два раза перечитал, но все равно точной причины спора понять не могу, порой такое ощущение, что вы с x-yuri доказываете друг другу одно и то же, но слишком уж не понимаете друг друга.

Может в этом проблема:
Цитата:

Сообщение от x-yuri
Насколько я понял, он утверждает, что события, возникшие во время обработки других событий "пропадают". Но он не смог объяснить, почему.

?
Если так, то события действительно никуда не пропадают, они происходят (здесь многопоточность) и их обработчики добавляются в очередь (а здесь уже один поток). Подробней здесь: http://javascript.ru/tutorial/events/timing .

dmitriymar 25.12.2010 20:03

Цитата:

Сообщение от Riim
если так, то события действительно никуда не пропадают, они происходят (здесь многопоточность) и их обработчики добавляются в очередь (а здесь уже один поток). Подробней здесь:

ну дак ты этим сказал тоже что я ему говорил,но при этом ещё говорил что будут события какие не выполнятся при опр условиях.вот тебе одно из них-первый пост в этом топике. и напрягал я его чтобы он написал для себя пример-когда события буду выполняться либо не в очереди либо "пропадать". и если бы он не перекручивал как хотел -то такой пример у него бы вышел-так я как я ему говорил таймер цикл и он клик -то увидел бы он эксперементируя с длинной цикла и временем в таймере .

у неё по сути дела 3 таймера. 2 из них регуляторы скорости. 3 й запуск этих вниз-верх по таймеру.+обработка события
так предскажи как он будет срабатывать на разных компах с разной производительностью?
скажи что имеет преимущество-движение верх,движение вниз,таймер,обработка события? в какой последовательности они построятся в очередь? и будут ли в очереди элементы до каких очередь может никогда не дойти?
то что анимейт не прервётся на он клике-пока он полностью не выполниться-это ясно-хотя судя по началу топика страницам так по 3 м многие считают что прервётся...

monolithed 25.12.2010 20:09

Цитата:

Сообщение от Riim
здесь многопоточность

:nono:
Цитата:

Сообщение от Riim
в очередь (а здесь уже один поток)

аля [stack] :)

Riim 25.12.2010 20:33

Цитата:

Сообщение от dmitriymar
ты хочешь сказать что ты всегда будешь знать как отреагирует браузер на два одновременно возникших события?-об этом я тебе говорил-а тот говно код что ты здесь привёл(и я тебе об этом говорил не один раз)-имитирует одновременно одно событие.

dmitriymar, т. е. ты думаешь, что если одновременно отработает interval и произойдет onclick, то один из обработчиков может не попасть в очередь на выполнение?

Цитата:

Сообщение от monolithed
:nono:

ну да, на самом низком уровне там опять же один поток (при одноядерном процессоре), поверх которого организуется "многопоточность", из которой в js опять делают один поток. Наизобретали блин :) .

dmitriymar 25.12.2010 20:38

Цитата:

Сообщение от Riim
dmitriymar, т. е. ты думаешь, что если одновременно отработает interval и произойдет onclick, то один из обработчиков может не попасть в очередь на выполнение?

нет, в этом случае не пропадёт а вот в этом-?
не забывай ещё о таймере запускающем 2 анимейта у каких есть ещё свои таймеры рег. скорость-хотя он может быть и по типу пустого цикла-что ещё хуже для этой ситуации. я говорю о случае
когда ещё работает анимейт +сработал таймер опять запускающий анимейт+онклик... попадёт в очередь ,не попадёт,попадёт но никогда не сработает-предскажешь? я не могу-могу сказать только одно что в этом случае какоето действие может быть никогда не выполнено(это зависит от параметра таймера ,длинны в машинных циклах-надеюсь термин этот объяснять не нужно?- действия выполняемого по таймеру и производительности компа)-и скорее всего это будет онклик

dmitriymar 25.12.2010 20:45

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

dmitriymar 25.12.2010 23:26

чтобы увидеть что событие он клик у неё никогда не сработает-достаточно посмотреть на сумму двух таймеров скорости в анимайтах и на таймер вызывающий парное исполнение анимейтов
function goes_up(){
$('#idl').animate({top:'-=180'},40000);//подъем
$('#id').animate({top:'+=180'},1000);//падение


};
setInterval(goes_up, 1000);//бесконечный подъем и падение
здесь видно что анимейты не закончаться а запуск их по новой уже начнётся.40000 милисикунд будет выполняться 1 анимейт+1000 второй.
а вот по новой запустится через 1000 милисекунд после запуска итого- 1000милисекунд-41000 милисекунд=-40000 милисекунд при каждом запуске. и вопрос очень большой становится ли в очередь он клик или не становится-и если становится то выполнится ли он вообще

Считаю эту тему закрытой.Не думаю что кто либо из моих опонентов-влепивших мне минус 300 с хвостом за этот топик найдёт что мне возразить:yes:

Kolyaj 25.12.2010 23:29

Цитата:

Сообщение от dmitriymar
чтобы увидеть что событие он клик у неё никогда не сработает

Клик прекрасно сработает во время анимации.

Цитата:

Сообщение от dmitriymar
$('#idl').animate({top:'-=180'},40000);//подъем
$('#id').animate({top:'+=180'},1000);//падение

При данном коде подъём и падение будут происходить одновременно.

dmitriymar 26.12.2010 00:06

Kolyaj,
и не прекращаются попытки возразить-хоть и не в тему абсолютно...
смотри не участок кода а весь
$('#idl').animate({top:'-=180'},40000);//подъем
$('#id').animate({top:'+=180'},1000);//падение


};
setInterval(goes_up, 1000);
каким оброазом одновременно? скрипт однопотоковый-всё по очереди идёт и как эта очередь выстроится?как то что события с таймером не выстраиваются по времени(предидущий пост) как он клик впишется? или ты знаешь как комп будет вести себя при таких глюках в логике-тянущих на фатальную ошибку для браузера?
Цитата:

Сообщение от Kolyaj
Клик прекрасно сработает во время анимации.

не сработает-пока анимейт не закончится-а в задании что падение сразу после клика!!! или ты хочешь сказать что анимейт в средине обрубится не доработав до конца и пойдёт событие он клик-не смеши. я уже устал смеяться.какоето непредсказуемое пресечение будет но не так как ты его себе представляешь

x-yuri 26.12.2010 03:55

по-моему, все ждут, что я что-то скажу... (типа шутка)

думаю, я все же понял, что ты хотел сказать dmitriymar

дело в том, что в jQuery две анимации на одном элементе по умолчанию запускаются в очереди: т.е. вторая начинается только после того, как закончиться первая:
<!DOCTYPE HTML>
<html>
  <head>   
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
  </head>
  <body>

<div style="
    position: absolute;
    width: 100px;
    height: 100px;
    background: red;
"></div>

<script type="text/javascript">
    $('div').animate({'left': '500px'}).animate({'left': '0px'});
</script>

  </body>
</html>


потом, во время animate могут обрабатываться клики:
<!DOCTYPE HTML>
<html>
  <head>   
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
  </head>
  <body>

<div style="
    position: absolute;
    width: 100px;
    height: 100px;
    background: red;
"></div>

<script type="text/javascript">
    $('div').animate({'left': '500px'}, 5000).click(function(){ $(this).stop() });
</script>

  </body>
</html>


animate внутри (упрощенно) работает так:
$.fn.animate = function(){
    <добавить действие в очередь>
    setTimeount(function(){
        $(<elements>).<property> += ...;
    }, duration);
}


итого: у нее в первом сообщении 2 таймера - animate'овский (с очередью действий) и свой собственный. Каждый последующий вызов animate просто добавляет в очередь еще одно действие, сразу оно не запускается

кроме того, ты говорил про случай, когда скрипт не успевает обрабатывать события. В таких случаях ОС говорит, что приложение не отвечает, а браузер, предлагает остановить скрипт. Раз браузер умудряется предложить остановить скрипт, значит он с операционной системой этот вопрос как-то решает, значит он обрабатывает какие-то события. Только ты сам не знаешь, как именно ведет себя ОС и браузер в таких случаях, как они пытаются предотвратить такие проблемы. Ты сам об этом говоришь.

ты сказал, что я перекручиваю твои слова? Нет, я специально ничего такого не делал. Повторюсь: ты очень невнятно объясняешь. И не то чтобы я хочу тебя обидеть... просто констатирую факт, или я не прав? Так что, в крайнем случае - я неправильно тебя понял. А вот иронизировал... да, было дело...

p.s. скажи честно, ты умеешь признавать свои ошибки? ;)


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