无法在 Wordpress 中折叠响应式菜单

问题描述

我是网站开发的新手,所以我正在使用一些响应式菜单进行测试,以了解它在 wordpress 中的工作原理。我选择了这个菜单,它在演示中完美运行。然而,当我将代码应用到我的网站时,菜单栏无法折叠。 class="navbar-collapse collapse show" 该类中的show无法正常删除。 [您可以在检查页面时看到它:https://gttutor.com/test/ 我可以知道我应该如何修复它吗?谢谢!

<div class="navbar-collapse collapse show" id="navbarSupportedContent" style="padding-right: 0px;">
            <ul class="navbar-nav ml-auto">
                
        </div>

<nav class="navbar navbar-expand-lg navbar-mainbg" style="
    padding-right: 0px;
    padding-left: 0px;
    padding-bottom: 0px;
    padding-top: 0px;">
        <a class="navbar-brand navbar-logo" href="#">Navbar</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <i class="fas fa-bars text-white"></i>
        </button>
        <div class="navbar-collapse collapse" id="navbarSupportedContent" style="padding-right: 0px;">
            <ul class="navbar-nav ml-auto">
                <div class="hori-selector"><div class="left"></div><div class="right"></div></div>
                <li class="nav-item">
                    <a class="nav-link" href="javascript:void(0);"><i class="fas fa-tachometer-alt"></i>Dashboard</a>
                </li>
                <li class="nav-item active">
                    <a class="nav-link" href="javascript:void(0);"><i class="far fa-address-book"></i>Address Book</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="javascript:void(0);"><i class="far fa-clone"></i>Components</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="javascript:void(0);"><i class="far fa-calendar-alt"></i>Calendar</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="javascript:void(0);"><i class="far fa-chart-bar"></i>Charts</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="javascript:void(0);"><i class="far fa-copy"></i>Documents</a>
                </li>
            </ul>
        </div>
    </nav>

    <script>
          // ---------Responsive-navbar-active-animation-----------
        function test(){
          var tabsNewAnim = $('#navbarSupportedContent');
          var selectorNewAnim = $('#navbarSupportedContent').find('li').length;
          var activeItemNewAnim = tabsNewAnim.find('.active');
          var activeWidthNewAnimHeight = activeItemNewAnim.innerHeight();
          var activeWidthNewAnimWidth = activeItemNewAnim.innerWidth();
          var itemPosNewAnimTop = activeItemNewAnim.position();
          var itemPosNewAnimLeft = activeItemNewAnim.position();
          $(".hori-selector").css({
            "top":itemPosNewAnimTop.top + "px","left":itemPosNewAnimLeft.left + "px","height": activeWidthNewAnimHeight + "px","width": activeWidthNewAnimWidth + "px"
          });
          
          $("#navbarSupportedContent").on("click","li",function(e){
            $('#navbarSupportedContent ul li').removeClass("active");
            $(this).addClass('active');
            var activeWidthNewAnimHeight = $(this).innerHeight();
            var activeWidthNewAnimWidth = $(this).innerWidth();
            var itemPosNewAnimTop = $(this).position();
            var itemPosNewAnimLeft = $(this).position();
            $(".hori-selector").css({
              "top":itemPosNewAnimTop.top + "px","width": activeWidthNewAnimWidth + "px"
            });
          });
        }
        $(document).ready(function(){
          setTimeout(function(){ test(); });
        });
        $(window).on('resize',function(){
          setTimeout(function(){ test(); },500);
        });
        $(".navbar-toggler").click(function(){
          setTimeout(function(){ test(); });
        });
    </script>

来自等级的方法

( function test( $ ){
          var tabsNewAnim = $('#navbarSupportedContent');
          var selectorNewAnim = $('#navbarSupportedContent').find('li').length;
          var activeItemNewAnim = tabsNewAnim.find('.active');
          var activeWidthNewAnimHeight = activeItemNewAnim.innerHeight();
          var activeWidthNewAnimWidth = activeItemNewAnim.innerWidth();
          var itemPosNewAnimTop = activeItemNewAnim.position();
          var itemPosNewAnimLeft = activeItemNewAnim.position();
          $(".hori-selector").css({
            "top":itemPosNewAnimTop.top + "px",500);
        });
        $(".navbar-toggler").click(function(){
          setTimeout(function(){ test(); });
        }(jQuery));

解决方法

您的 navbar-toggler 按钮没有任何切换类代码。相反,定义了一个空的 setTimeout()。试着像这样改变它。

$('.navbar-toggler').on('click',function(e) {
      $('#navbarSupportedContent').toggleClass("show");
      e.preventDefault();
    });
,

@Ozgur Sar 已经给出了正确答案,但可能有其不工作的原因:

控制台中出现错误“$ is not a function”的可能性很大。虽然 Wordpress 本身就有 jQuery,但该函数有时必须按如下方式包装才能工作:

( function( $ ) {
    /* your code ... */
}( jQuery ) );

所以你的代码看起来像:

( function( $ ) {
      var tabsNewAnim = $('#navbarSupportedContent');
      var selectorNewAnim = $('#navbarSupportedContent').find('li').length;
      var activeItemNewAnim = tabsNewAnim.find('.active');
      var activeWidthNewAnimHeight = activeItemNewAnim.innerHeight();
      var activeWidthNewAnimWidth = activeItemNewAnim.innerWidth();
      var itemPosNewAnimTop = activeItemNewAnim.position();
      var itemPosNewAnimLeft = activeItemNewAnim.position();
      $(".hori-selector").css({
        "top":itemPosNewAnimTop.top + "px","left":itemPosNewAnimLeft.left + "px","height": activeWidthNewAnimHeight + "px","width": activeWidthNewAnimWidth + "px"
      });
      
      $("#navbarSupportedContent").on("click","li",function(e){
        $('#navbarSupportedContent ul li').removeClass("active");
        $(this).addClass('active');
        var activeWidthNewAnimHeight = $(this).innerHeight();
        var activeWidthNewAnimWidth = $(this).innerWidth();
        var itemPosNewAnimTop = $(this).position();
        var itemPosNewAnimLeft = $(this).position();
        $(".hori-selector").css({
          "top":itemPosNewAnimTop.top + "px","width": activeWidthNewAnimWidth + "px"
        });
      });
      
      $('.navbar-toggler').on('click',function(e) {
          $('#navbarSupportedContent').toggleClass("show");
          e.preventDefault();
      });
}( jQuery ) );

这应该有效。

我没有使用超时函数。如果您想要平滑过渡,请尝试使用 CSS 过渡属性使其看起来更漂亮。


关于将 javascript 添加到 wordpress

一种更可靠的方法是将它放在一个单独的文件中(可能是您的主题文件夹内的 js 文件夹)并使用 jQuery 的依赖项将其排入队列(因为代码将不起作用,如果jquery 未正确加载)。这可以在您的主题的 functions.php 中:

function gttutor_scripts() {

    wp_enqueue_script( 'script',get_template_directory_uri() . '/js/gt-tutor.js',array ( 'jquery' ),1.1,true);

}
add_action( 'wp_enqueue_scripts','gttutor_scripts' );