Как я могу остановить появление моего div на пару секунд и исчезновение?

Я поддерживаю веб-сайт компании, в которой работаю, и буквально вчера возникла проблема, которую я не смог решить. Я погуглил свою задницу и не могу найти решение. Проблема в том, что у нас есть три внизу нашей страницы, которые должны отображаться только при нажатии на соответствующую ссылку (неупорядоченный список из трех ссылок, каждая ссылка загружает функцию отображения/скрытия javascript). Но со вчерашнего дня все три отображаются примерно на 2 секунды, а затем исчезают, что очень раздражает!! Они вообще не должны отображаться, если на них не нажать. Сайт находится по адресу www.successphotography.com — посмотрите сами! Любая помощь будет принята с благодарностью. соответствующий код:

<ul class="moreInfo">
<li onclick='swappy("graduation")'>Graduation Photography</li>
<li onclick='swappy("school")'>School Photography</li>
<li onclick='swappy("family")'>Family Photography</li>
</ul>
<div id="graduation">
<--- lots of content here --->
</div
<div id="school">
<--- lots of content here --->
</div>
<div id="family">
<--- lots of content here --->
</div>

JavaScript для функции swappy:

    window.onload=function(){

if (document.getElementById("graduation")) { 
    document.getElementById("graduation").style.display = 'none';
    document.getElementById("school").style.display = 'none';
    document.getElementById("family").style.display = 'none';

    }
}
function swappy(myself){
    switch(myself){
        case("graduation"):
            document.getElementById("graduation").style.display = 'block';
            document.getElementById("school").style.display = 'none';
            document.getElementById("family").style.display = 'none';
        break;
        case("school"):
            document.getElementById("graduation").style.display = 'none';
            document.getElementById("school").style.display = 'block';
            document.getElementById("family").style.display = 'none';       
        break;
        case("family"):
            document.getElementById("graduation").style.display = 'none';
            document.getElementById("school").style.display = 'none';
            document.getElementById("family").style.display = 'block';      
        break;
        default:
            document.getElementById("graduation").style.display = 'none';
            document.getElementById("school").style.display = 'none';
            document.getElementById("family").style.display = 'none';
        break;
    }
}

Любая помощь будет очень высоко ценится! Большое спасибо


person hav    schedule 01.02.2012    source источник
comment
Каков стиль div в CSS? Если вы хотите, чтобы они не появлялись при загрузке страницы, установите их там как display:none.   -  person Jivings    schedule 01.02.2012


Ответы (3)


Это происходит потому, что вы скрываете свой div только тогда, когда происходит событие window.onload, и это, конечно, может занять некоторое время, в зависимости от того, сколько элементов вы должны загрузить на страницу, задержку, рендеринг и так далее.

Чтобы избежать Javascript FOUC (Flash нестилизованного содержимого), вы должны вместо этого скрыть элементы #school и #family с помощью css, но когда js не включен, вы больше не сможете получить доступ к содержимому этих div. Итак, взгляните на это обсуждение: реализация ненавязчивого javascript

person Fabrizio Calderan    schedule 01.02.2012

Поскольку вы уже используете jQuery, подумайте об использовании готового обработчика:

$().ready(function(){ /* code to hide elements here */})

а не ваш текущий window.onload=function

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

person Jamie Dixon    schedule 01.02.2012

Золотое правило здесь таково:

вы должны настроить/создать свой CSS и JS таким образом, чтобы ваш внешний интерфейс показывал (@ начальная загрузка) точно так же с включенным JavaScript и без Javascript.

Таким образом, вы никогда не получите волнистую, шаткую реакцию на нагрузку.

Быстрое исправление: изначально скрыть div с помощью CSS (отображение: нет)

person Monkie    schedule 01.02.2012
comment
Я не думаю, что это лучший совет. Если JS отключен, вы хотите, чтобы скрытые поля отображались. Контент должен быть доступен пользователю с включенным или отключенным JS. Скрытие его с помощью CSS устраняет эту возможность для пользователей без поддержки JS. - person Jamie Dixon; 01.02.2012
comment
@JamieDixon Вот для чего нужны теги noscript. - person Jivings; 01.02.2012
comment
чем вы просто делаете их display: none в функции js, называемой точно после их создания. таким образом, время загрузки страницы не повлияет на время, пока не начнется загрузка, и они не будут скрыты. - person khael; 01.02.2012
comment
@Jivings Как бы вы внедрили noscript в этот сценарий? Не могли бы вы продублировать HTML-код для этого раздела или сделать что-то еще? Я заинтересован в том, как это будет реализовано. - person Jamie Dixon; 01.02.2012
comment
Спасибо, я использовал ваше быстрое исправление, пока не реализовал ненавязчивую версию, которая будет работать как с CSS, так и с javascript. - person hav; 01.02.2012