Как я могу заставить браузер ожидать для отображения страницы, пока это полностью не загружается?

Определенно возможно получить доступ к членам парламента, не занимающим официального поста со смещением указателя в C++. Позволяет предполагают, что у меня было следующее определение типа, к которому я хотел получить доступ.

class Bar {
  SomeOtherType _m1;
  int _m2;
};

Принятие там не является никакими виртуальными методами в Панели, легкий случай является _m1. Участники в C++ хранятся как смещения ячейки памяти объекта. Первый объект при смещении 0, втором объекте при смещении sizeof (первый участник), и т.д.

, Таким образом, вот способ получить доступ к _m1.

SomeOtherType& GetM1(Bar* pBar) {
  return*(reinterpret_cast<SomeOtherType*>(pBar)); 
}

Теперь _m2 является немного более трудным. Мы должны переместить исходный указатель sizeof (SomeOtherType) байты из оригинала. Бросок для обугливания должен гарантировать, что я увеличиваю в байтовом смещении

int& GetM2(Bar* pBar) {
  char* p = reinterpret_cast<char*>(pBar);
  p += sizeof(SomeOtherType);
  return *(reinterpret_cast<int*>(p));
}
74
задан jasonszhao 5 December 2015 в 00:20
поделиться

10 ответов

Это очень плохая идея по всем указанным причинам и многим другим. Тем не менее, вот как это сделать с помощью jQuery :

<body>
<div id="msg" style="font-size:largest;">
<!-- you can set whatever style you want on this -->
Loading, please wait...
</div>
<div id="body" style="display:none;">
<!-- everything else -->
</div>
<script type="text/javascript">
$(document).ready(function() {
    $('#body').show();
    $('#msg').hide();
});
</script>
</body>

Если у пользователя отключен JavaScript, он никогда не увидит страницу. Если страница никогда не завершает загрузку, они никогда не увидят страницу. Если страница загружается слишком долго, они могут предположить, что что-то пошло не так, и просто перейти в другое место вместо * пожалуйста, подождите ... * ing.

30
ответ дан 24 November 2019 в 12:03
поделиться

Вы можете начать с того, что главная страница индекса вашего сайта будет содержать только сообщение "Загрузка". Отсюда вы можете использовать ajax для получения содержимого вашей следующей страницы и встраивания его в текущую, после удаления сообщения «Загрузка».

Возможно, вы сможете обойтись простым включением контейнера сообщения загрузки в папку в верхней части страницы, которая имеет 100% ширину / высоту, а затем удаляет указанный div по завершении загрузки.

Последний вариант может работать некорректно в обеих ситуациях и будет зависеть от того, как браузер отображает контент.

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

0
ответ дан 24 November 2019 в 12:03
поделиться

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

Браузер начинает загрузку страницы и позже обработает внешние CSS и js, особенно если место css / js связанный находится в «правильном» месте. (Я думаю, что советую загружать js как можно позже и использовать внешний CSS, который вы загружаете в заголовок). Теперь, если у вас есть какая-то часть ваших css и / или js, которую вы хотели бы применить как можно скорее, просто включите ее в саму страницу. Это будет противоречить советам инструментов повышения производительности, таких как YSlow, но, вероятно, приведет к увеличению изменения вашей страницы, отображаемой так, как вы хотите, чтобы она отображалась. Используйте это только тогда, когда это действительно необходимо!

1
ответ дан 24 November 2019 в 12:03
поделиться

Хотя это не всегда хорошая идея, вы можете решить, действительно ли вы хотите это сделать. Есть несколько разных способов сделать это, и я нашел здесь простой пример:

http://www.reconn.us/content/view/37/47/

Возможно, не лучший, но он должен помочь вам разработать собственное решение. Удачи.

3
ответ дан 24 November 2019 в 12:03
поделиться

Также убедитесь, что сервер буферизует страницу и не немедленно (при построении) передает ее в браузер клиента.

Поскольку вы не указали свой стек технологий :

  • PHP: посмотрите ob_start
  • ASP.NET: убедитесь, что Response.BufferOutput = True (по умолчанию)
4
ответ дан 24 November 2019 в 12:03
поделиться

Есть безусловно, допустимое использование для этого. Один из них - запретить людям нажимать на ссылки / вызывать события JavaScript до тех пор, пока не загрузятся все элементы страницы и JavaScript.

В IE вы можете использовать переходы между страницами, что означает, что страница не отображается, пока она не будет полностью загружена:

<meta http-equiv="Page-Enter" content="blendTrans(Duration=.01)" />
<meta http-equiv="Page-Exit" content="blendTrans(Duration=.01)" />

Обратите внимание на короткую продолжительность. Достаточно лишь убедиться, что страница не отображается до тех пор, пока она не будет полностью загружена.

В FireFox и других браузерах я использовал решение, которое я использовал, чтобы создать DIV, который является размером страницы и белый, затем в самом конце страницы вставьте JavaScript, который его скрывает. Другой способ - использовать jQuery и также скрыть его. Не так безболезненно, как решение IE, но оба работают хорошо.

10
ответ дан 24 November 2019 в 12:03
поделиться

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

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

http://www.webdeveloper.com/forum/showthread.php?t=180958

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

20
ответ дан 24 November 2019 в 12:03
поделиться

Вы можете скрыть все, используя какой-нибудь css:

#some_div
{
  display: none;
}

, а затем в javascript назначить функцию для document.onload, чтобы удалить этот div.

jQuery упрощает подобные вещи.

3
ответ дан 24 November 2019 в 12:03
поделиться

обязательно: "use jQuery"

Я видел страницы, которые помещали черный или белый div, покрывающий все наверху страницы, а затем удаляли его в событии document.load. Или вы можете использовать .ready в jQuery . Как уже было сказано, это была одна из самых раздражающих веб-страниц, которые я когда-либо видел, я бы посоветовал не использовать ее .

3
ответ дан 24 November 2019 в 12:03
поделиться

Вот решение, использующее jQuery:

<script type="text/javascript">
$('#container').css('opacity', 0);
$(window).load(function() {
  $('#container').css('opacity', 1);
});
</script>

Я поставил этот скрипт сразу после моего тега . Просто замените "#контейнер" на селектор для DOM-элементов, которые вы хотите скрыть. Я пробовал несколько вариантов этого (включая .hide()/.show() и .fadeOut()/.fadeIn()), и простая настройка непрозрачности, кажется, имеет наименьшее количество плохих эффектов (мерцание, изменение высоты страницы и т.д.). Вы также можете заменить css('непрозрачность', 0) на fadeTo(100, 1) для более плавного перехода. (Нет, fadeIn() не сработает, по крайней мере, под jQuery 1.3.2.)

Теперь предостережения: Я реализовал вышесказанное, потому что я использую TypeKit, и есть раздражающее мерцание, когда вы обновляете страницу, а шрифты загружаются за несколько сотен миллисекунд. Поэтому я не хочу, чтобы какой-то текст появлялся на экране до тех пор, пока TypeKit не загрузится. Но очевидно, что у вас большие проблемы, если вы используете код выше, и что-то на вашей странице не загружается. Есть два очевидных способа его улучшить:

  1. Максимальный промежуток времени (скажем, 1 секунда), по истечении которого появляется все, загружается страница или нет
  2. Какой-то индикатор загрузки (скажем, что-то из http://www.ajaxload.info/)

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

$(document).ready(function() {
  setTimeout('$("#container").css("opacity", 1)', 1000);
});

Так что теперь, в худшем случае, ваша страница займет дополнительную секунду.

.
10
ответ дан 24 November 2019 в 12:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: