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

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, время: 21:45.