Цитата:
<script type="text/javascript"> window.onload = function(){ var elem = document.getElementsByTagName('div')[0], i = l = 120, j = k = 0; elem.onclick = function(){ if(k!=0) { i = -l; return false; } (function(){ if(i>=k){ elem.style.top = --i +'px'; j = i; k = 1; } else { elem.style.top = ++j +'px'; if(++j>=l) i = l; } window.setTimeout(arguments.callee, 15); })(); return false; }; }; </script> <div style="background: #0095FF; position: absolute; width: 30px; height: 30px; top: 120px"></div> Цитата:
|
Цитата:
|
Цитата:
да вот в том то и момент что если браузер не выдаёт предложение закрыть-то событие он игнорирует. пример этого -предпоследний "рабочий "-фф через раз его критически закрывает. и вопрос как работает дураказащита в браузерах в подобных ситуациях-в пресечениях,незнаю наверное введу новый термин-но в коде изначальном появляются ещё отложенные пресечения-так вот вопрос обрабатываются все они или часть просто отбрасывается? не думаю что ктото сможет дать однозначный ответ. и не важно таймеры или события ещё работают а таймер опять запустился вызывающий их и в этот момент момент ещё добавляются события. взять допустим два таймера сработавшие одновременно и тянущие элемент в разные стороны(на большое расстояние). в какой последовательности они сработают? сработают ли вообщее? как они сработают? будет ли критическая ошибка? в каких браузерах будет одно действие в каких другое? что имеет больший приоритет-выполняемое действие? действие по таймеру,возникающие событие? какой приоритет у них будет при постановке в очередь? какие возможно станут?-никто об этом не знает. и если бы не было этого кода изначально ошибочного во всех своих строках(помимо ошибок алгоритма-он не соответствует её заданию ну никак-это я о моментальном падении при клике)-эта тема здесь бы никогда не возникла. могу поспорить что подобная ситуация не рассматривается не в одной книге и не в одном учебном заведении. рассмотрение этого на уровне рассмотрения пишущих браузеры-ситуация продумывания дуракозащиты:yes: |
Цитата:
исправил) -забыл слово должен |
dmitriymar
Мне кажется, что если задать эти вопросы Дмитрию Сошникову, то он с удовольствием на них ответит. |
Цитата:
за твой код я ничего не говорю-в твоём коде (условно провожу аналогии) реализованы "прерывания" на опрос и обработку событий-тем что(опять скажу цикл) движения работает меньший промежуток времени чем промежуток времени через какой таймер его опять вызовет. но ведь он ничего общего не имеет с той ситуацией что рассматривается) |
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
|
function goes_up(){
$('#idl').animate({top:'-=180'},40000);//подъем $('#id').animate({top:'+=180'},1000);//падение }; setInterval(goes_up, 100); |
Цитата:
но по поводу кода привёдённого им-вторым постом в этом топике-привожу код какой он положил со всеми доработками-и посмотри коменты к нему.так что думаю что и первый код какой он привёл-не соответветсвует задаваемому вопросу-точнее на нём не возможно сделаить реализацию того что она хотела |
x-yuri,
можеш не приводить мне примеры на дждиквери-я его заведомо отказался изучать. понять могу что написано что на нём но на это нужно время. всё что на нём легко сделать-всё тоже можно на скрипте.ну да кода больше-ну дак он используется повторно и позволяет делать то чего не может джиквери |
Цитата:
|
ну так у exec такая большая карма, потому что всем влом его код читать :) а если серьезно, то где там проблема? Его скрипт упрощенно работает так:
setTimeout(function(){ <сдвигаем квадрат> setTimeout(arguments.callee, 13); }, 13) по такой же схеме работает анимация в jQuery. А чтобы не осталось никаких сомнений я добавил возможность остановить квадрат: <div id='foo' style='width: 50px; height: 50px; position: absolute; background: #555555'> </div> <script type='text/javascript'> window.onload = function () { function delta(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); } document.getElementById("foo").onclick = function () { var E = this; var timerId; this.onclick = function(){ clearTimeout( timerId ); // !!! останавливаем квадрат }; var go = function( toTop, from, to ){ var start = new Date().getTime(), callee = arguments.callee; timerId = setTimeout(function () { var progress = (new Date().getTime() - start) / 1000; E.style.top = ((to - from) * (toTop ? progress : delta(progress)) + from) + "px"; if (progress < 1) timerId = setTimeout(arguments.callee, 13); else callee(!toTop, toTop ? 0 : 180, toTop ? 180 : 0); }, 13); }; go(false, 0, 180); }; }; </script> |
Цитата:
|
запарился-ща гляну -вполне может быть что он код изменил ещё тогда и я не глянув его перепечатал
|
нет, ты же сказал не упоминать jQuery. И ты похоже игнорируешь ссылки "Посмотреть исходный код"... приведу его нескрытым
<div id='foo' style='width: 50px; height: 50px; position: absolute; background: #555555'> </div> <script type='text/javascript'> window.onload = function () { function delta(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); } document.getElementById("foo").onclick = function () { var E = this; var timerId; this.onclick = function(){ clearTimeout( timerId ); // !!! останавливаем квадрат }; var go = function( toTop, from, to ){ var start = new Date().getTime(), callee = arguments.callee; timerId = setTimeout(function () { var progress = (new Date().getTime() - start) / 1000; E.style.top = ((to - from) * (toTop ? progress : delta(progress)) + from) + "px"; if (progress < 1) timerId = setTimeout(arguments.callee, 13); else callee(!toTop, toTop ? 0 : 180, toTop ? 180 : 0); }, 13); }; go(false, 0, 180); }; }; </script> |
Цитата:
|
кликни по контейнеру когда он будет двигаться в любую сторону-никакой реакции. кликни по нему два раза подряд-браузер рухнет.код я просматривал-посмотри там за ним коменты-но я в него не вчитывался-смысл если по работе примера видно что он не рабочий-говорю о браузере фф
|
опять приходим к к тому что такое анимация.простите если я изменение координат контейнера в пространстве организую в цикле(допустим от х=10 до х=50). а реализацию того чтобы это движение было видно полностью а не только начало и конец-реализую введением в тело цикла-прокруткой пустого цикла.это будет не анимация?
|
Цитата:
|
для начала, если ошибка в том, что он не реализовал возможность ронять квадрат по клику - тогда да, он это не реализовал. Я это добавил к его коду и оно у меня работает
но, я так понимаю, к его коду осталась единственная претензия - он приводит к тому, что firefox некорректно завершает работу. Только у меня и его код работает, и доделанный мной вариант и ничего не роняется. Те кто в теме, а у вас? Больше похоже, что это не связано со скриптом exec. У тебя есть идеи, что не так в его коде, из-за чего падает firefox? |
ну и смысл моего поста был-что то что она хочет в её случае никогда не сможет реализоваться при таком алгоритме.-ошибка с таймером-это приводит к отсутствию раеакции на он клик-причина первая
и то что пока анимейт весь не выполниться-не будет реакции на на он клик-то есть падения. ей же нужно падение с любой точки. и вместо того чтобы прочитать то что я написал-и глянуть на эти грубые ошибки в её алгоритме-все наперебой мне начали доказывать что они п..е мультипликаторы и браузероразработчики. удивляюсь что фраза не прозвучала что анимация это русалочки и т.д и без двд она никак:write: |
ты сам сказал что его код никто не в состоянии дочитать до конца.. не реализовал говоришь-почитай посты перед ним-от него. он считает что падение он реализовал. -если идти по логической цепочке пред сообщений-не читая его код
|
не знаю изза чего-и у меня и монолита тогда браузеры рухнули
|
dmitriymar, x-yuri я честно не понимаю уже о чем эта тема, что сделать чтобы вы прекратили эту полемику?
Цитата:
|
Цитата:
|
Цитата:
<!DOCTYPE HTML> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> <script src="my.js"></script> </head> <body> <div id="id" style=" position: absolute; top: 80px; width: 50px; height: 50px; background: red; "></div> <script type="text/javascript"> function goes_up(){ $('#id').animate({top:'-=80'},40000);//подъем $('#id').animate({top:'+=80'},1000);//падение }; setInterval(goes_up, 100);//бесконечный подъем и падение $('#id').click(function(){ $(this).stop(true).animate({top: '80'}, 0); }); </script> </body> </html> здесь есть один нюанс. Но это не верно: "это приводит к отсутствию раеакции на он клик", "пока анимейт весь не выполниться-не будет реакции на на он клик-то есть падения". Ну хоть здесь ты согласен, что не прав? Цитата:
Цитата:
|
Цитата:
способ-можно сломать тебе пальцы чтобы ты не мог печатать-вот всё и остановится.))) дак я и не говорю что не нормально -движение -опрос-движение-это я помоему с самого начала говорил |
Цитата:
|
Цитата:
<!DOCTYPE HTML> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> <script src="my.js"></script> </head> <body> <div id="id" style=" position: absolute; top: 80px; width: 50px; height: 50px; background: red; "></div> <script type="text/javascript"> function goes_up(){ $('#id').animate({top:'-=80'},40000);//подъем $('#id').animate({top:'+=80'},1000);//падение }; setInterval(goes_up, 100);//бесконечный подъем и падение $('#id').click(function(){ $(this).animate({top: '80'}, 0); alert('click'); }); </script> </body> </html> то что ты имел в виду именно это - что обработчик не запустится, подтверждают слова из твоего первого сообщения "пока цикл не закончится опросов и других любых действий не будет". Но ты не будешь признавать, что ты не прав. Так что да, смысла продолжать нету... |
Цитата:
|
а в какой очереди выстроиться?пока анимейт 40 раз в очередь станет при одном проходе вверх вниз.
x-yuri,ну вот ты написал алгоритм и мой первый пост в этой теме-ответь для себя-упадёт ли он когда нибудь при этом алгоритме по клику? и опять ты чуть перекрутил слова мои-когда я говорил что не обработается он клик-я тогда (найди историю переписки)имел в виду именно ту ситуацию что таймер запускается когда функция ещё не отработала. мои слова-отсутсвие реакции на он клик в этом случае-она будет заметна без алерт?не будет заметна-и участок кода реагирующий на он клик-никогда не выполниться-соответсвено реакции на он клик -не будет. и что имеет больший приоритет-таймер или клик?не будут ли копится клики в низу стека? и если будут копится внизу-может копятся(и очередь до них никогда не дойдёт) мож не попадают -проверять не особо хочется-тратить время на чушь подобную. главное знать что при подобном обработки не будет да и всё. ну и фиксация события(алерт и стоп-имеют больший приоритет чем функции простые-иначе было бы по клику заметно припадение-поскольку скорость падения выше чем подъёма) и его обработка это разные вещи |
Часовой пояс GMT +3, время: 08:07. |