У меня есть функция (экран предварительной загрузки), которая запускается загрузкой страницы только на домашней странице.
Проблема в том, что он запускается каждый раз, когда пользователь возвращается на домашнюю страницу.
Я искал использование sessionStorage, чтобы эта функция запускалась один раз за сеанс браузера, однако я новичок в JQuery и не могу понять, куда он идет / что на самом деле нужно сказать.
Буду очень признателен за любую помощь. Спасибо!
Вот мой код…
$(document).ready(function() {
window.onload = function () {
$('#loader-wrapper').addClass('hidden');
}
});Файлы cookie могут помочь. 1) проверьте, существует ли cookie (2), если он существует, ничего не делайте (3), если он не существует, установите cookie и продолжайте с одноразовым кодом. Однако файлы cookie могут сохраняться и после сеанса браузера, вы можете установить срок их действия. Вы также можете изучить варианты локального хранения.
Файлы cookie @Doug можно манипулировать, если они не выполняются должным образом, и поэтому обычно рассматриваются как угроза безопасности.
@treyBake Я думаю, вроде ... но угроза безопасности заключается в том, что вы храните в них конфиденциальную информацию (и даже тогда эта угроза не так опасна). Что-то вроде visitCookie = true Угрозы безопасности там не вижу. В любом случае, просто предлагаю способ отслеживания посещения домашней страницы - я просто выбрасывал файлы cookie, потому что это то, с чего я начал десяток лет назад: P, но есть другие варианты локального хранилища для jlan, которые можно попробовать
@ Даг, это верная точка зрения! Это больше риск с конфиденциальными данными и т. д., Как правило, я просто избегаю where pos и придерживаюсь localStorage :)
В идеале я бы хотел избежать использования файлов cookie, так как тогда мне нужно начать рассмотрение предупреждения о файлах cookie!
Определенно не пытаюсь склонить вас к файлам cookie. Всегда выбирайте подходящий инструмент для работы и / или инструмент, который вам удобнее всего. Но чтобы добавить кое-что к идее предупреждения; это не куки. Если вы храните какие-либо уникальные данные, через GPRD вам необходимо запросить согласие. Если вы используете локальное хранилище для чего-то неуникального, все будет в порядке.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно просто написать:
$(document).ready(function() {
$('#loader-wrapper').addClass('hidden');
});
Но ваш вопрос о том, чтобы запускать это только один раз за сеанс браузера, для меня не имеет смысла. Вы хотите, чтобы ваша функция выполнялась при загрузке вашей страницы. $(document).ready(...) запускает функцию только один раз и только при загрузке DOM. Он не будет запускаться позже, когда пользователь взаимодействует со страницей (если, конечно, он не запускает перезагрузку страницы одним щелчком мыши).
Я вынул строку window.onload и снова протестировал. Когда я перехожу на другую страницу через меню, а затем возвращаюсь на домашнюю страницу, я снова вижу страницу предварительной загрузки (которую я хочу видеть только при первом открытии сайта в браузере). Я предполагаю, что это вызывает перезагрузку страницы, как вы сказали?
Это странное требование. Поскольку addClass ('hidden') скроет элемент только при первой загрузке страницы, если вы активируете его только один раз за сеанс. Модель DOM не кэшируется ни в браузере, ни в сеансе. Каждый раз, когда вы заходите на страницу, элемент #loader-wrapper снова будет виден.
Ах нет! Ладно, тогда я неправильно смотрю на это. В настоящее время я использую CSS + JQuery, чтобы скрыть div при загрузке страницы, чтобы получить предварительный загрузчик с постепенным исчезновением ... Могу ли я сделать это таким образом, если я хочу, чтобы загрузчик страницы был виден (а затем исчезал) один раз за сеанс браузера? Сказал вам, что я новичок в этом ...
Чтобы запускать это один раз за сеанс, используйте следующее, чтобы сохранить, что пользователь уже сделал это во время текущего сеанса:
$(function() {
var visited = sessionStorage['visited'] || false;
if (visited) {
$('#loader-wrapper').addClass('hidden');
} else {
sessionStorage['visited'] = true;
}
});Было бы более эффективно / проще добавить класс hidden в div по умолчанию (в HTML) и удалять его только в случае их первого посещения:
$(function() {
var visited = sessionStorage['visited'] || false;
if (!visited) {
$('#loader-wrapper').removeClass('hidden');
sessionStorage['visited'] = true;
}
});Спасибо за это! Могу я спросить, это в дополнение к тому, что у меня есть сейчас, или вместо?
@ jlan155 вместо. На самом деле вам не нужно все готово, документальный материал. $(function () {... - это сокращение от этого. Единственная часть, которую я извлек из вашего примера, - это $('#loader-wrapper').addClass('hidden');, который теперь вызывается, если это первое посещение этого сеанса.
@ jlan155 - глядя на некоторые другие ваши комментарии, это может быть не так ... вы хотите скрыть div, если это НЕ их первое посещение?
Это верно, поэтому он должен отображаться при вашем первом посещении, а затем не показываться снова, пока вы находитесь на сайте. Если вы закроете браузер и снова вернетесь на сайт, вы должны ожидать, что увидите его снова.
@ jlan155 - Понятно - я отредактировал. Возможно, вам лучше добавить класс hidden в div и удалить класс только в случае их первого посещения ...
удалите эту строку window.onload (и закрывающую скобку) ...