【问题标题】:Showing a div only once per time when user on the site doesn't work?当网站上的用户不起作用时,每次只显示一次 div?
【发布时间】:2020-12-22 07:03:48
【问题描述】:

我想问一下javascript,如何一次显示一个div?

我有我在下面工作的代码。但还是不行。

JS 每次显示一次 Div

(function() {
    var visited = sessionStorage.getItem('visited');
    if (!visited) {
        document.getElementById("popupMode").style.visibility = "visible";
        sessionStorage.setItem('visited', true);
    }
})();

我想要什么:

我有一个弹出 div 让用户可以选择模式。当用户选择了弹出窗口将消失。当我刷新页面时,我希望弹出窗口不再出现,它只在我们开始访问网络时出现一次。

如果您不介意,我在弹出窗口中也有一个切换器模式,但它不会切换。

完整代码见My Codepen

弹出模式

<!-- Popup Mode -->
<div id="popupMode">
  <div class="container-fluid p-0 h-100">
    <div class="row h-100">
      <div class="col-12 main-content">
        <div id="modeChoice">
          <div class="title">
            <h2>Welcome</h2>
            <p>
              You can switch the button from light mode<br>to dark mode
            </p>
          </div>
          <div class="choose-mode">
            <div id="modeSwitcher">
              <input type="checkbox" class="checkbox" id="chk" />
              <label class="label" for="chk">
                 <i class="fas fa-moon"></i>
                 <div class="ball"></div>
              </label>
            </div>
          </div>
          <div id="buttonPopupMode">
            <a href="#" class="btn button-primary">UNDERSTAND</a>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

完整的 JS

window.onload = function() {

  (function() {
    var visited = localStorage.getItem('visited');
    if (!visited) {
      document.getElementById("popupMode").style.visibility = "visible";
      localStorage.setItem('visited', true);
    }
  })();

  if (localStorage.darkMode == "true") {
    document.body.classList.toggle('dark');
    document.getElementById("chk").checked = true;
  } else {
    document.body.classList.toggle('light');
  }
};

document.getElementById("chk").addEventListener('change', () => {
  document.body.classList.toggle('dark');
  document.body.classList.toggle('light');
  localStorage.darkMode = (localStorage.darkMode == "true") ? "false" : "true";
});

$("#popupMode").delay(3000).fadeIn(500);

$("#buttonPopupMode .button-primary").on('click', function() {
  $('#popupMode').hide();
})

【问题讨论】:

    标签: javascript jquery local-storage session-storage


    【解决方案1】:

    将这一行 $("#popupMode").delay(3000).fadeIn(500); 移到 if (!visited) {...} 内。

    更新后的代码如下所示。

    window.onload = function() {
    
      (function() {
        var visited = localStorage.getItem('visited');
        if (!visited) {
          document.getElementById("popupMode").style.visibility = "visible";
          localStorage.setItem('visited', true);
          // Add below line. 
          $("#popupMode").delay(3000).fadeIn(500);
        }
      })();
    
      if (localStorage.darkMode == "true") {
        document.body.classList.toggle('dark');
        document.getElementById("chk").checked = true;
      } else {
        document.body.classList.toggle('light');
      }
    };
    
    document.getElementById("chk").addEventListener('change', () => {
      document.body.classList.toggle('dark');
      document.body.classList.toggle('light');
      localStorage.darkMode = (localStorage.darkMode == "true") ? "false" : "true";
    });
    
    // remove below line.
    // $("#popupMode").delay(3000).fadeIn(500);
    
    $("#buttonPopupMode .button-primary").on('click', function() {
      $('#popupMode').hide();
    })
    

    附言 localStorage 与 sessionStorage localStoragesessionStorage 完成完全相同的事情并具有相同的 API,但使用 sessionStorage - the data is persisted only until the window or tab is closed,而使用 localStorage - the data is persisted until the user manually clears the browser cache or until your web app clears the data。我建议使用localStorage,但这取决于您和您的要求,您可以选择更合适的。

    【讨论】:

    • 哦,兄弟,我已经用您拥有的代码编辑了代码。但div没有出现@Karan
    • 我用 sessionStorage 更改 localStorage 并且它可以工作
    • 如果您努力刷新页面,那么它也可以工作。它没有显示 div 的原因可能是您可能已经在 localStorage 中拥有 visited 值。
    • 但是,使用 sessionStorage 可以正常工作。以后我用它(sessionStorage)可以吗?
    • 我已经更新了答案并解释了localStoragesessionStorage 之间的区别。
    猜你喜欢
    • 2021-09-30
    • 2013-11-17
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多