【问题标题】:Make a Responsive Javascript Horizontal Navigation with Logo in Center制作一个带有中心标志的响应式 Javascript 水平导航
【发布时间】:2015-10-20 23:13:47
【问题描述】:

我在这个网站上找到了一个question/post,第一次看它时效果很好,直到我需要它做更多事情,我已经玩过它,但还没有找到解决方案让它做我想做的事需要它来做。

我正在为客户构建一个站点,因此我需要它易于操作,以了解客户是否想要更改事物的实际顺序,因此在主题内的后端构建一个 ul/li 列表是不是一个选项,除非我有一种简单的方法可以修改 functions.php 并更改菜单选项卡的设置方式。

这是我的 javascript 编码,菜单是一个实际的 wordpress 菜单。

jQuery(document).ready(function() {
    jQuery("ul#menu-primary-items").find("li:contains('Home')").hide(); // hides home from navigation
    var position = jQuery("ul#menu-primary-items li").length-1;
    var i = 0;

    jQuery('ul#menu-primary-items li').each(function() {
        if(i == position/2) {
            jQuery(this).after('the img src code is in here');
        }

        i++;
    });
});

在整个页面宽度上我需要它看起来像

Link | Link | Link | LOGO IMG | Link | Link |Link

关于媒体宽度(主题@media max-width 是 999px)我需要它是一个带有

的下拉式 wordpress 框
LOGO IMG
WP "MENU" button
Link
Link
Link
Link
Link
Link

它不是像上面那样显示,而是显示为

WP "MENU" button
Link
Link
Link
LOGO IMG
Link
Link
Link

【问题讨论】:

    标签: javascript jquery html wordpress navbar


    【解决方案1】:

    查看JQuery代码中的媒体,设置LOGO位置:

    jQuery(document).ready(function() {
        jQuery("ul#menu-primary-items").find("li:contains('Home')").hide(); // hides home from navigation
        var position = jQuery("ul#menu-primary-items li").length-1;
        var i = 0;
    
    /* check media here */
    var isMedia999=false;
    isMedia999 = (window.width() < 1000); //true if max width is <=999px
    /* chek is done */
    
    if( ! isMedia999)
        jQuery('ul#menu-primary-items li').each(function() {
            if(i == position/2) {
                jQuery(this).after('the img src code is in here');
            }
            i++;
        });
    
    else jQuery('ul#menu-primary-items li').each(function() {
            if(i == 0) { // <== first position if max width 999px
                jQuery(this).after('the img src code is in here');
            }
            i++;
        });
    });
    

    当然这不会被实现。在调整大小时刷新,所以你可以这样做:

     jQuery(document).ready(function() {
             myfunc();
             windows.resize(myfunc());           
    
        });
    
        function myfunc(){
     jQuery("ul#menu-primary-items").find("li:contains('Home')").hide(); 
    
                    var position = jQuery("ul#menu-primary-items li").length-1;
                    var i = 0;
    
                /* check media here */
                var isMedia999=false;
                isMedia999 = (window.width() < 1000); //true if max width is <=999px
                /* chek is done */
    
                if( ! isMedia999)
                    jQuery('ul#menu-primary-items li').each(function() {
                        if(i == position/2) {
                            jQuery(this).after('the img src code is in here');
                        }
                        i++;
                    });
    
                else jQuery('ul#menu-primary-items li').each(function() {
                        if(i == 0) { // <== first position if max width 999px
                            jQuery(this).after('the img src code is in here');
                        }
                        i++;
                    });
                });
        }
    

    【讨论】:

    • windows.resize(){ ...refresh here... } 会去哪里?它应该只是说“刷新这里”
    • @CamilleRa'Chelle 我编辑我的答案。请检查一下。
    【解决方案2】:

    更好:使用 CSS 和 2 个徽标。

    1 个徽标对于媒体宽度 > 999 像素隐藏,第 2 个对于媒体

    @media max-width is 999px {
     .logo#wide { display:none; }
     .logo#tiny { display:inline; }
    }
    @media min-width is 1000px {
     .logo#wide { display:inline; }
     .logo#tiny { display:none; }
    }
    

    编辑:JQuery: jQuery(文档).ready(函数() { jQuery("ul#menu-primary-items").find("li:contains('Home')").hide(); // 从导航中隐藏主页

     var position = jQuery("ul#menu-primary-items li").length-1;
        var i = 0;
    
        jQuery('ul#menu-primary-items li').each(function() {
            if(i ==  0) {
               //put logo tiny here for media maxwidth 999px
            }
            if(i == position/2) {
              //  put logo wide here for media minwidth 1000px
            }
    
            i++;
        });
    });
    

    【讨论】:

      【解决方案3】:

      这样的东西能行吗?

      @media(max-width:whateveryouwant px)
      {
         .logo{
         float:right;
         }
      }
      

      另一种方法是将元素移动到 DOM 中。 您可以使用 jQuery 实现这一点:

      if((window).width() <= sizeYouWant){
         $('.logo').insertBefore('#FirstElement');
      }
      

      【讨论】:

      • 谢谢@baldráni,这并不完全有效,但它确实有助于将其从菜单中较小的屏幕尺寸中删除。我不得不在徽标类中将其更改为@media(max-width:whateveryouwant px) .logo{ display: none; },使其浮动隐藏图像,但将两个链接从屏幕中心移动到屏幕左侧,显示无帮助保持所有内容居中但隐藏图像。如何让图像以较小的分辨率出现在菜单上方,我应该在 css 中也尝试一下,还是需要使用 else/if 函数来显示它?
      • 你可以尝试在顶部放置一个标志,基本上是display:none。你display:inline它当你来max-width: ...px
      • 嗯...在 JQuery 中管理这个,你怎么看?我发布一个答案。 SY。
      猜你喜欢
      • 2017-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 2017-03-12
      • 2014-05-12
      • 1970-01-01
      相关资源
      最近更新 更多