在元素加载之前更改CSS

时间:2018-09-03 09:58:40

标签: javascript jquery css dom cookies

目标:我有一个主导航栏,该导航栏在单击时打开(使用jquery和CSS样式--active)。如果用户将其保持打开状态并导航到网站上的新页面,则导航栏需要保持打开状态,而不会首先看上去被关闭。

问题:导航栏的确保持打开状态(使用cookie记住其状态),但是在采用--active类之前,它以默认样式(即关闭)短暂显示。看起来很笨拙,就像快闪一样。

任何人都可以想出一种方法来使导航栏在页面之间记住其状态,并且(当“打开cookie”时)采用--active类样式,而无需简要显示默认样式吗?

(我看过How to change CSS property before element is created?,但对我来说不起作用)。

$(document).ready(function() {
  const menuButton = $('.header__menu-button');
  const menuState = Cookies.get('menuState');

  if (menuState == 'opened') {
    menuButton.addClass('--active');
  };

  menuButton.on('click', function() {
    $(this).toggleClass('--active');

    if (menuButton.hasClass('--active')) {
      Cookies.set('menuState', 'opened');
    } else {
      Cookies.set('menuState', 'closed');
    }
  });
});
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  background-color: #dcdcdc;
}

.header {
  height: 110px;
  background-color: #add8e6;
}

.header__button-container {
  display: flex;
  justify-content: flex-end;
}

.header__menu-button {
  min-width: 100px;
  height: 110px;
  background-color: #fff;
  color: #000;
}

.menuTransition {
  transition: all 1s ease-in-out;
}

.header__menu-button.--active {
  min-width: 250px;
  background-color: #000;
  color: #fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="header">
  <div class="header__button-container">
    <button class="header__menu-button menuTransition"></button>
  </div>
</div>

1 个答案:

答案 0 :(得分:-1)

如果在新页面菜单中是--active,请在$(document).ready(function()之前使用此代码

$("button.header__menu-button").removeClass("--active");

此代码从您的导航栏中删除--active类!在您看到页面之前。

$(document).ready(function() {
  $("button.header__menu-button").click(function() {
    $(this).toggleClass("--active");
  })
});
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  background-color: #dcdcdc;
}

.header {
  height: 110px;
  background-color: #add8e6;
}

.header__button-container {
  display: flex;
  justify-content: flex-end;
}

.header__menu-button {
  min-width: 100px;
  height: 110px;
  background-color: #fff;
  color: #000;
}

.menuTransition {
  transition: all 1s ease-in-out;
}

.header__menu-button.--active {
  min-width: 250px;
  background-color: #000;
  color: #fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>

<div class="header">
  <div class="header__button-container">
    <button class="header__menu-button menuTransition"></button>
  </div>
</div>