Скрытие элемента в pageLoad() с помощью jQuery

#javascript #jquery #css

#javascript #jquery #css

Вопрос:

Если я скрою некоторые элементы в page_load с помощью jquery, элементы мерцают на долю секунды при публикации страницы, а затем исчезают:

   function pageLoad() {

        $('#panelOne').hide();
        $('#panelTwo').hide();
  

Есть ли способ предотвратить мерцание?

Я не хочу устанавливать для элементов css значение visibility: hidden, потому что тогда вызов метода jquery .show() позже, похоже, не покажет элемент.

Комментарии:

1. Обычно я просто устанавливаю display: none, но я хотел бы увидеть лучшее решение, если оно есть.

2. Установка css для отображения: none; является лучшим вариантом. Это будет работать с .show(); позже. мир…

3. Я сам пробовал display: none; в CSS, но как заставить его работать без javascript для переключения отображения, если пользователь отключил JS?

4. если они отключат javascript, вам нужно будет сделать это на сервере.

Ответ №1:

Настройка visibility: hidden не работает, но display: none работает. Смотрите jsFiddle.

Вы могли бы сделать это в событии DOMReady, но было бы чище сделать это в CSS.

Комментарии:

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

2. Я полагаю, что метод hide в jQuery на самом деле устанавливает display: none для вас.

3. Ну да. Но это чище и почти наверняка быстрее сделать в CSS.

4. Проблема с подходом CSS заключается в том, что вам затем требуется javascript для отображения содержимого. Предположительно, вся причина, по которой он доставляется, заключается в том, что он должен быть показан в какой-то момент; те, у кого нет javascript, тогда пропускают содержимое.

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

Ответ №2:

$.show() не работает с элементами, для которых установлено значение visibility: hidden . Вам нужно использовать display: none . Это сработает для вас лучше, чем использование jQuery для скрытия в DOM ready, и абсолютно гарантирует, что вы не увидите мерцания.

Ответ №3:

Определенно используйте document ready в отличие от page load:

 $(function() {
    $('#panelOne, #panelTwo')
        .hide();
});
  

Ответ №4:

Вместо того, чтобы скрывать в pageload, спрячьте его в domready вот так:

 $(function() { ........ });
  

Замените …… вашими двумя скрытыми строками.

Domready запускается, когда dom-дерево построено, и намного раньше, чем pageLoad. Pageload ожидает запуска изображений и прочего. (предполагается, что у вас есть pageLoad следующим образом: <html onload="pageLoad();"> ).

Комментарии:

1. На самом деле я все еще вижу мерцание при выполнении этого. Это то же самое, что document.ready()?

2. Да, $(функция) — это сокращение от document.ready. Если вы все еще видите мерцание, вам нужно подумать о том, чтобы скрыть элемент в коде (html / css), а затем снова показать его в js, когда захотите.

3. @Sean: у вас есть пример URL-адреса? Я изо всех сил пытаюсь понять причину мерцания.