Javascript готовый характер - PullRequest
2 голосов
/ 07 августа 2011

Предполагается ли запуск Javascript как можно меньше на веб-сайте / веб-приложении? Под этим я подразумеваю обычное намерение прогонять все ваши js-файлы, как только страница загрузится и отложит их в сторону, а затем, когда появятся функции, чтобы выполнить их сразу и покончить с этим?

Я работаю над проектом, использующим карты Google, и у меня есть сценарий для пользовательского объекта-маркера, и отладчик сообщил мне, что браузер просматривает все мои js-файлы, прежде чем что-либо появляется на странице.

Моя проблема возникает здесь: я хотел анимировать определенные маркеры, чтобы они непрерывно подпрыгивали вверх и вниз с помощью jQuery (аналогично иконкам OS X в доке), и мои несколько попыток выполнения функций бесконечного цикла просто приводили к краху браузера. Итак, я понимаю, что браузеру это не нравится, , но есть ли способ заставить простой скрипт повторяться в фоновом режиме, пока пользователь перемещается по странице? Или Javascript просто не должен использоваться таким образом?

(Я работал с Flash долгое время, поэтому мое мышление все еще там.)

Ответы [ 5 ]

3 голосов
/ 07 августа 2011

Да, функции Javascript должны просто выполнять свою работу и выходить как можно скорее.Графический интерфейс и сценарии выполняются в одном потоке, поэтому, пока вы находитесь внутри функции Javascript, в браузере ничего не отображается.Если вы попытаетесь использовать бесконечный цикл, браузер будет зависать.

Вы используете методы window.setInterval и window.setTimeout для запуска кода, который выполняется в определенное время.Запустив интервал, который обновляет что-то несколько раз в секунду, вы можете создать анимацию.

2 голосов
/ 07 августа 2011

Вы должны установить таймер для выполнения скрипта через определенное время.

var timer = setTimeout(code, milliseconds);

будет исполнять code в такие-то миллисекунды. Каждое выполнение сценария может установить новый таймер для повторного выполнения сценария.

Вы можете отменить синхронизированное событие, используя clearTimeout(timer).

1 голос
/ 07 августа 2011

Поскольку вы сказали, что используете jQuery, рассмотрите возможность использования его API эффектов (например, jQuery.animate()), это сделает вашу жизнь намного проще!

1 голос
/ 07 августа 2011

Используйте setTimeout () или setInterval () . Статьи по MDC довольно хороши.

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

0 голосов
/ 07 августа 2011

Лично я сохраняю как можно больше кода для выполнения после загрузки страницы, частично помещая все свои <script> в нижней части <body>. Это означает (предполагаемое) сокращение времени загрузки страницы, при этом все мои JS готовы к работе в случае необходимости.

Я бы не рекомендовал проходить через все, что вам нужно, в начале документа. Вместо этого привязывайте вещи к таким событиям, как нажатия кнопок и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...