【问题标题】:Set cookie to only show DIV once per session将 cookie 设置为每个会话仅显示一次 DIV
【发布时间】:2019-07-03 06:31:47
【问题描述】:

我有一个在页面加载时显示的 DIV。 可以通过按钮或单击窗口中的任意位置(按照常规模式)将其关闭。

我需要这个 DIV 在每个会话中只显示一次。目前,每次在网站上加载新页面时都会显示它。有没有简单的解决办法?

我想根据下面的工作版本继续使用 JQuery 显示/隐藏来执行此操作。非常感谢任何帮助。

HTML

<div id="promoModal" class="promomodal">
  <div class="promo-modal-content">
    <span class="promo-close">&times;</span>
    CONTENT
  </div>

</div>

CSS

  .promomodal {
    position: fixed;
    z-index: 1;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    overflow: auto;
    background-color: rgb(0, 0, 0);
    background-color: rgba(0, 0, 0, 0.7);
    padding: 10px;
  }

  .promo-modal-content {
    background-color: #071177;
    margin: 15% auto;
    padding: 10px;
    max-width: 500px;
    text-align: center;
  }

  .promo-close {
    color: #fff;
    float: right;
    top: 0;
    font-size: 28px;
    font-weight: bold;
  }

</style>

JS

var modal = document.getElementById("promoModal");
var span = document.getElementsByClassName("promo-close")[0];

  jQuery(document).ready(function ($) {

    $('.promomodal').show();

    span.onclick = function () {
      jQuery('.promomodal').hide();
    }
    window.onclick = function (event) {
      if (event.target == modal) {
        jQuery('.promomodal').hide();
      }
    }
  });

</script>

【问题讨论】:

  • 是否可以将某人定义为“离开”网站为在 x 分钟内未加载页面的人?例如如果他们在 5 分钟内没有访问该网站,他们就离开了?
  • 如果 cookie 不存在,显示 div 并创建/存储 cookie。 cookie 不应该有过期日期,因此当用户关闭浏览器时它会自动被删除。这样,div 将在每个会话中仅打开一次,而不是在每个页面上。
  • @TobyMellor 我希望它每次访问只显示在一页上。目前,它每次都会加载到网站的每个页面上。

标签: javascript jquery css cookies


【解决方案1】:
var modal = document.getElementById("promoModal");
var span = document.getElementsByClassName("promo-close")[0];

  jQuery(document).ready(function ($) {

   if (sessionStorage.getItem('promomodalWasShown') == null) {
      $('.promomodal').show();
      sessionStorage.setItem('promomodalWasShown', 'true');
   }

    span.onclick = function () {
      jQuery('.promomodal').hide();
    }
    window.onclick = function (event) {
      if (event.target == modal) {
        jQuery('.promomodal').hide();
      }
    }
  });

【讨论】:

  • 我已经实现了这个解决方案,但它似乎没有任何效果。每次加载时,模态仍然显示在网站的每个页面上。任何想法为什么会发生这种情况?
  • 请尝试 $(".promomodal").show("slow", function() { console.log(sessionStorage.getItem('promomodalWasShown')); });只是看看有什么问题。
  • 我应该把那个放在哪里?
  • 看起来在第一页加载时,控制台打印出'null'。这是预期的吗?问题是,在网站的所有其他页面上,模式仍然加载,并且控制台日志不再打印 null。
  • 因为默认显示的是普通的div,所以每个页面都会显示。并使用 show() 显示第二次。请设置显示:无;用于您的 CSS 中的 .promomodal。
猜你喜欢
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2020-10-08
相关资源
最近更新 更多