Запускать JQuery один раз за сеанс браузера

У меня есть функция (экран предварительной загрузки), которая запускается загрузкой страницы только на домашней странице.

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

Я искал использование sessionStorage, чтобы эта функция запускалась один раз за сеанс браузера, однако я новичок в JQuery и не могу понять, куда он идет / что на самом деле нужно сказать.

Буду очень признателен за любую помощь. Спасибо!

Вот мой код…

$(document).ready(function() {
  window.onload = function () {
    $('#loader-wrapper').addClass('hidden');
  }
});

удалите эту строку window.onload (и закрывающую скобку) ...

treyBake 12.11.2018 15:47

Файлы cookie могут помочь. 1) проверьте, существует ли cookie (2), если он существует, ничего не делайте (3), если он не существует, установите cookie и продолжайте с одноразовым кодом. Однако файлы cookie могут сохраняться и после сеанса браузера, вы можете установить срок их действия. Вы также можете изучить варианты локального хранения.

Doug 12.11.2018 15:48

Файлы cookie @Doug можно манипулировать, если они не выполняются должным образом, и поэтому обычно рассматриваются как угроза безопасности.

treyBake 12.11.2018 15:49

@treyBake Я думаю, вроде ... но угроза безопасности заключается в том, что вы храните в них конфиденциальную информацию (и даже тогда эта угроза не так опасна). Что-то вроде visitCookie = true Угрозы безопасности там не вижу. В любом случае, просто предлагаю способ отслеживания посещения домашней страницы - я просто выбрасывал файлы cookie, потому что это то, с чего я начал десяток лет назад: P, но есть другие варианты локального хранилища для jlan, которые можно попробовать

Doug 12.11.2018 15:58

@ Даг, это верная точка зрения! Это больше риск с конфиденциальными данными и т. д., Как правило, я просто избегаю where pos и придерживаюсь localStorage :)

treyBake 12.11.2018 16:03

В идеале я бы хотел избежать использования файлов cookie, так как тогда мне нужно начать рассмотрение предупреждения о файлах cookie!

jlan155 12.11.2018 16:20

Определенно не пытаюсь склонить вас к файлам cookie. Всегда выбирайте подходящий инструмент для работы и / или инструмент, который вам удобнее всего. Но чтобы добавить кое-что к идее предупреждения; это не куки. Если вы храните какие-либо уникальные данные, через GPRD вам необходимо запросить согласие. Если вы используете локальное хранилище для чего-то неуникального, все будет в порядке.

Doug 13.11.2018 03:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
394
2

Ответы 2

Вам нужно просто написать:

$(document).ready(function() {
    $('#loader-wrapper').addClass('hidden');
});

Но ваш вопрос о том, чтобы запускать это только один раз за сеанс браузера, для меня не имеет смысла. Вы хотите, чтобы ваша функция выполнялась при загрузке вашей страницы. $(document).ready(...) запускает функцию только один раз и только при загрузке DOM. Он не будет запускаться позже, когда пользователь взаимодействует со страницей (если, конечно, он не запускает перезагрузку страницы одним щелчком мыши).

Я вынул строку window.onload и снова протестировал. Когда я перехожу на другую страницу через меню, а затем возвращаюсь на домашнюю страницу, я снова вижу страницу предварительной загрузки (которую я хочу видеть только при первом открытии сайта в браузере). Я предполагаю, что это вызывает перезагрузку страницы, как вы сказали?

jlan155 12.11.2018 16:23

Это странное требование. Поскольку addClass ('hidden') скроет элемент только при первой загрузке страницы, если вы активируете его только один раз за сеанс. Модель DOM не кэшируется ни в браузере, ни в сеансе. Каждый раз, когда вы заходите на страницу, элемент #loader-wrapper снова будет виден.

LaurentG 12.11.2018 16:36

Ах нет! Ладно, тогда я неправильно смотрю на это. В настоящее время я использую CSS + JQuery, чтобы скрыть div при загрузке страницы, чтобы получить предварительный загрузчик с постепенным исчезновением ... Могу ли я сделать это таким образом, если я хочу, чтобы загрузчик страницы был виден (а затем исчезал) один раз за сеанс браузера? Сказал вам, что я новичок в этом ...

jlan155 12.11.2018 16:44

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

$(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 12.11.2018 16:23

@ jlan155 вместо. На самом деле вам не нужно все готово, документальный материал. $(function () {... - это сокращение от этого. Единственная часть, которую я извлек из вашего примера, - это $('#loader-wrapper').addClass('hidden');, который теперь вызывается, если это первое посещение этого сеанса.

OK sure 12.11.2018 16:30

@ jlan155 - глядя на некоторые другие ваши комментарии, это может быть не так ... вы хотите скрыть div, если это НЕ их первое посещение?

OK sure 12.11.2018 16:35

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

jlan155 12.11.2018 16:38

@ jlan155 - Понятно - я отредактировал. Возможно, вам лучше добавить класс hidden в div и удалить класс только в случае их первого посещения ...

OK sure 12.11.2018 16:41

Другие вопросы по теме