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, вынырнув из бюджета, раскажет нам все подробно и в картинках :)


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