Как показать страницу preloader только один раз при вводе через доменное имя?
Итак, у меня есть jQuery page preloader на главной странице:
<script type="text/javascript">
$(window).load(function() {
$("#preloader").delay(700).fadeOut("slow");
})
<div id="preloader" class="preloader"></div>
Это показывает 4 раза:
- при входе на сайт через доменное имя;
- при обновлении главной страницы по F5;
- когда я нажимаю на логотип (я должен перейти на главную страницу, когда я нажал это);
- когда я нажимаю пункт меню "Главная".
Но я хочу показать его только в первые два раза.
Итак, первая идея, которая пришла мне в голову, - удалить
div
класс, чтобы не показывать изображение preloader по всей странице, когда я нажимаю логотип или пункт меню JS. И использовали это:
документ.getElementById ("preloader").className = 'test';
но потом... Я понял, что, нажав пункт меню, чтобы снова загрузить главную страницу, Я создаю новую копию документа, поэтому мой preloader снова имеет свой класс и появился. Поэтому я решил использовать AJAX и не перезагружать всю страницу, нажав пункт меню или логотип. Теперь я использую это:
<script type="text/javascript">
$(document).ready(function(){
$("#blog, #logo").click(function(){
$("#container").load("/blog");
document.getElementById("preloader").className = 'test';
});
});
</script>
Итак, когда я нажимаю логотип или пункт меню, я загружаю свою категорию под названием "Блог" в контейнер. И моя боковая панель выглядит так:
...
<a href="javascript:;" id="logo"><i class="logo"></i></a>
...
<li class="m_blog"><a id="blog" href="javascript:;"><i class="icon"></i>Blog</a></li>
...
так, это работает! Прелоадер появляется только при открытии сайта через доменное имя. Но проблема 1 появляются. Когда я открываю категорию "видео", у меня есть такой адрес: mysite.com/video/
и когда я вернулся на главную страницу через логотип или меню у меня же адрес! Потому что загрузка контента без перезагрузки всей страницы и адреса не меняется. Как я могу это исправить? Помогите мне, пожалуйста! Я просто хочу показать свой preloader только один раз: когда я прошел через доменное имя или обновил главную страницу F5. У меня уже кружится голова, потому что я знаю только HTML и CSS, но сегодня начинаю изучать AJAX и jQuery. Помоги мне в этом деле.
2 ответов
Итак, я решил проблему самостоятельно. Но, в любом случае, спасибо @prabeen-giri, которые помогли мне думать правильно. Во-первых, мне нужно объяснить механизм загрузчиков. Просто посмотрите на CSS:
position: fixed;
display: block;
top: 0; /* making preloader cover all screen */
right: 0;
left: 0;
bottom: 0;
background-repeat: no-repeat;
background-position:center; center;
background-size: auto auto;
background-image: url(../images/preload.png); /* your picture should be here */
background-color:#000;
z-index:99; /* must be the highest number of all others to cover them all */
Итак, ваш загрузчик просто изображение или что-то еще, которые охватывают все окно и плавно исчезают (по jQuery) при загрузке всего содержимого.
<div id="preloader" class="preloader"></div>
а вот скрипт:
<script type="text/javascript">
$(window).load(function() {
$("#preloader").delay(700).fadeOut("slow");});
</script>
чтобы решить мою проблему и показать preloader только один раз, когда ввод сайта через доменное имя нам необходимо использовать cookies. Есть 2 cookie вспомогательная функция (от Quirksmode):
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
Итак, нам нужно ввести наш собственный файл cookie, чтобы создать условия для запуска скрипта. Изначально созданный нами файл cookie равен null и это равенство будет условием для запуска скрипта. После этого мы устанавливаем cookie некоторое значение, чтобы не запускать jQuery снова. Вот код:
<script type="text/javascript">
$(window).load(function() {
if (readCookie('referer') == null){
$("#preloader").delay(700).fadeOut("slow");}
createCookie('referer',1,0);
});
</script>
но как удалить наш preloader изображение и фон после обновления страницы? Потому что мы просто отключаем jQuery fadeOut proccess нашими условиями. Изображение и черный фон продолжают покрывать наше окно и не собираются исчезать...
давайте создадим новое состояние и поместите его в
<script>
if (readCookie('referer') == null) {
document.write("<style>.preloader {background-image: url(../images/preload.png); background-color:#000; z-index:99;}</style>");
}
</script>
этим мы устанавливаем наше изображение, Z-индекс и фон в класс preloader. Наш cookie равен null только при входе пользователя на сайт через доменное имя или очистили его cookie и обновите страницу (что кажется маловероятным). И если cookie равен 1, как мы установили выше, наш загрузчик появится, но без изображения и фона, и наш jQuery fadeOut не будет работать тоже! Итак, моя проблема решена, как я и хотел, preloader появится только один раз. Еще раз спасибо @prabeen-giri!
Edit:Извините, мне пришлось редактировать все это
вот в чем дело, вы отправляете http-запрос на сервер на вас каждое условие, которое по сути означает, что вы перезагружаете DOM в исходном состоянии, над которым вы работаете впоследствии с помощью Javascript.
использование метода GET было бы намного проще, но, как вы сказали, вы только учитесь. Вместо этого вы можете использовать cookies,
вот вспомогательные функции cookie
function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}
function getCookie(c_name)
{
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++)
{
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name)
{
return unescape(y);
}
}
}
всякий раз, когда вы нажимаете home / logo call
setCookie('referer','home',7), setCookie('referer','logo',7);
Теперь
$(window).load(function() {
if (getCookie('referer') != 'home' || getCookie('referer') != 'logo'){
$("#preloader").delay(700).fadeOut("slow");
}
setCookie('referer',null,7);
});
Я думаю, что должно работать.