メニューボタンがクリックされるとすぐに、モバイルナビゲーションバーメニューの背景色を透明からインディゴにワードプレスで変更するにはどうすればよいですか?

feli_x

WordPressを使用して、bs4navwalker(https://github.com/nicgene/bs4navwalker#bs4navwalkerを使用して写真内に透明なナビゲーションバーを作成しましたデスクトップ版では問題ないように見えます。navbarデスクトップバージョン

ただし、モバイルバージョンでは、ナビゲーションバーメニューボタンをクリックした後、メニューエントリがページ上のテキストでオーバーレイされます。 navbarモバイルバージョン

誰かがモバイルナビゲーションバーのメニューボタンをクリックしたらすぐに、メニューの背景色をインディゴに変更したいと思います。ボタンがクリックされていない場合、ボタン自体はそのままである必要があります。

これまで、cssを介してプロパティを変更したい適切なクラスを見つけようとしましたが、bs4navwalker.phpファイル内に適切なクラスが見つかりませんでした。

テーマのheader.php内で、navbarが宣言されています。

<nav id='navbar_0' style="postion: relative;" class="navbar navbar-default navbar-expand-md navbar-light fixed-top indigo topBotomBordersIn">
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <?php
    wp_nav_menu([
    'menu'            => 'primary',
    'theme_location'  => 'top',
    'container'       => 'div',
    'container_id'    => 'navbarCollapse',
    'container_class' => 'collapse navbar-collapse',
    'menu_id'         => false,
    'menu_class'      => 'navbar-nav mr-auto',
    'depth'           => 0,
    'fallback_cb'     => 'bs4navwalker::fallback',
    'walker'          => new bs4navwalker()
    ]);
  ?>
</nav>

私のCSSは

.indigo{
background:rgba(63,81,181,0.90); /* indigo, 4th value is alpha, better than opacity, which makes also the font transparent  */
color: white !important;  /* font color for transition */
transition: background-color 1s ease 0s;

.transparent{
background:rgba(255,255,255,0.0);

.solid{
  background-color:rgba(63,81,181,0.75);  /* indigo */
  color: #ffffff !important;  /* font color */
  transition: background-color 1s ease 0s;
  }

そして、javascript関数navbar_transparent()を介して、Webサイトの1ページのみのnavbarに透過クラスを適用しました。また、関数navbar_animation()を適用しました。この関数は、ユーザーがページを25ピクセル以上下にスクロールするとすぐに、ナビゲーションバーをソリッドナビゲーションバーに変換します。

function navbar_transparent(){
jQuery('.navbar').removeClass('indigo');
jQuery('.navbar').addClass('transparent');

function navbar_animation(){
  jQuery(document).ready(function() {
  // Transition effect for navbar
  jQuery(window).scroll(function() {
  // checks if window is scrolled more given value, adds/removes solid class
  if(jQuery(this).scrollTop() > 25) {
    jQuery('.navbar').addClass('solid');
    }else{
     jQuery('.navbar').removeClass('solid');
    }
  });
});
}

誰かがヒントを持っていますか?

feli_x

いくつかの実験の後、私は答えを見つけました。これは、nav要素が一度に3つのカラークラス(透明、インディゴ、またはソリッド)のうちの1つだけを持つ必要があるという要求に基づいています。さらに、関数navbar_animation()は、メディアクエリが原因で、ウィンドウの幅が768ピクセル以上の場合、ナビゲーションバーにのみ影響します。つまり、モバイルビューでは、navbar_functionは効果がありません。これは、変更されたjavascript関数によって実現されます。

function navbar_transparent(){
  jQuery('.navbar').removeClass('indigo');
  jQuery('.navbar').addClass('transparent');
  jQuery('.navbar-toggler').click(function(){  // navbar should have only one of the three color classes: transparent, solid, indigo
      var el = document.getElementById('navbar_0');
    if(el.classList.contains('transparent')){
      jQuery('nav').removeClass('transparent');
      jQuery('nav').addClass('solid');  // switch to solid
      }
    else if(el.classList.contains('indigo')){
      jQuery('nav').removeClass('indigo');
      jQuery('nav').addClass('solid');  // switch to solid
      }
    else if(el.classList.contains('solid')){
      jQuery('nav').removeClass('solid');
      jQuery('nav').addClass('transparent');  // switch back to transparent
    }    
  })
}
function navbar_animation(){
  jQuery(document).ready(function(){
    // Transition effect for navbar
    jQuery(window).scroll(function(){
      // checks if window is scrolled more given value, adds/removes solid class
      var x = window.matchMedia("(min-width: 768px)") // perform transition to indigo navbar only, if in desktop view
      if(x.matches){
        var el = document.getElementById('navbar_0');
        if(jQuery(this).scrollTop() > 25){  // if scrolled enough, make navbar indigo
          if(el.classList.contains('transparent')){
            jQuery('.navbar').removeClass('transparent');
            jQuery('.navbar').addClass('indigo');
            }
          }
        else{
          if(el.classList.contains('indigo')){  // if scrolled up again, switch back to transparent navbar
            jQuery('.navbar').removeClass('indigo');
            jQuery('.navbar').addClass('transparent');
            }
          }
        }
      });
    });
  }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ