【问题标题】:List of issues using jQuery使用 jQuery 的问题列表
【发布时间】:2016-02-08 05:00:39
【问题描述】:

我正在我的 Wordpress 网站上为响应式移动导航编写 jQuery 脚本。我已经设置了它,以便我的导航菜单位于右侧,当我单击按钮时,它向左滑动并且 html 标记随之移动。

我在使用这个脚本时遇到了一些问题,我可能在这里遗漏了一些东西。

首先,菜单按钮只允许我打开和关闭一次菜单,然后每次点击它都会自动关闭,直到我刷新页面。

其次,如果我打开移动菜单并将窗口扩大到 1080 像素的媒体查询,导航菜单就会消失,html 标记会向左浮动 250 像素,从而在菜单所在的位置留下空隙。我可以在 jQuery 中输入一个命令,当屏幕宽度超过 1080 像素时,它会自动关闭菜单并将 html 标签滑回?

Javascript:

jQuery(document).ready(function($) {

$('img.menu.button').click(function() {
    $('html').animate({
    'right' : "250px"}); //moves left 

    $('nav.header-nav').animate({
    'right' : "0px"}); //moves left 


$('img.menu.button').click(function() {
    $('html').animate({
    'right' : "0px"}); //moves right 

    $('nav.header-nav').animate({
    'right' : "-250px" //moves right 



            });
        });
    });
});

CSS:

@media only screen 
and (min-width : 0px) 
and (max-width : 1080px) {

img.standard.logo {
height: 38px;
width: 342px;
}

/* RESPONSIVE NAVIGATION MENU */

img.menu.button {
position:relative; 
display:block;
width:25px;
height:25px; 
background-size: 100%;
}

nav.header-nav {
z-index:10;
position:fixed;
top:0px;
right:-250px;
width:250px;
height:100%;
float:right;
margin:0;
padding:0;

background-color:#1D1D1F;
list-style:none; 
box-shadow: 0 10px 20px rgba(0,0,0,0.05), 0 4px 6px rgba(0,0,0,0.1);
}

标题:

<header class="header">
    <!-- LOGOS -->
    <a href="#">
        <img class="standard logo" src="http://www.lucieaverillphotography.co.uk/wp-content/uploads/2015/12/Lucie_Averill_Photography_Logo-2.png">
        <img class="white logo" src="http://www.lucieaverillphotography.co.uk/wp-content/uploads/2016/01/Lucie_Averill_Photography_Logo_White.png"></a>
    <!-- LOGOS -->
    <img class="menu button" src="http://www.lucieaverillphotography.co.uk/wp-content/uploads/2016/01/Menu.png">
    <!-- HEADER NAVIGATION MENU -->
    <nav class="header-nav">
        <div class="menu-header-menu-container">
            <ul id="menu-header-menu" class="menu">
                <li id="menu-item-463">
                    <a href="#">WORK</a>
                    <ul class="sub-menu">
                        <li id="menu-item-584"><a href="#">LANDSCAPES</a></li>
                        <li id="menu-item-473"><a href="#">SEASCAPES</a></li>
                        <li id="menu-item-478"><a href="#">MACRO</a></li>
                        <li id="menu-item-477"><a href="#">CITIES</a></li>
                        <li id="menu-item-475"><a href="#">LONG EXPOSURE</a></li>
                        <li id="menu-item-480"><a href="#">MISCELLANEOUS</a></li>
                    </ul>
                </li>
                <li id="menu-item-10"><a href="#">ABOUT</a></li>
                <li id="menu-item-464"><a href="#">SHOP</a></li>
                <li id="menu-item-923">
                    <a href="#">SOCIAL</a>
                    <ul class="sub-menu">
                        <li id="menu-item-11"><a target="_blank" href="#">FACEBOOK</a></li>
                        <li id="menu-item-924"><a href="#">INSTAGRAM</a></li>
                        <li id="menu-item-15"><a target="_blank" href="#">FLICKR</a></li>
                    </ul>
                </li>
                <li id="menu-item-14"><a href="#">CONTACT</a></li>
            </ul>
        </div>
    </nav>
</header>

【问题讨论】:

  • 不确定 html 标签是什么意思?您能否添加屏幕抓取或其他可能有帮助的内容,不用担心我可以查看链接
  • 你似乎有两个事件处理程序在相同的元素上做相反的事情,相互抵消?
  • 嗨,西蒙,很抱歉不清楚 - 我的意思是 包含我网站中的所有 div。我已经设置了它,以便 javascript 将它与我的菜单一起推到左侧
  • @adeneo – 是的,似乎是这样。我添加这个的原因是我可以在打开菜单后关闭它。我希望能够再次单击该按钮以将其关闭。它有效,但只有一次。
  • 我不完全确定我理解你的第二个问题,但如果我的回答解决了问题,请告诉我

标签: jquery css responsive-design


【解决方案1】:

我会通过为打开的导航创建一个类来简化,以便在 jQuery 中切换。设置 width: 0 而不是为 right 使用负值(这应该解决您的第二个问题(如果我理解正确的话),并使用 CSS 过渡来为宽度设置动画。

全角看起来有点奇怪,但似乎超出了您的问题范围。您可以设置 CSS 规则,以通过媒体查询以您希望的方式显示它。另外,我建议不要在这种情况下使用 jQuery 来做任何响应式的事情,这似乎是不必要的。

我还在 .header-nav 元素上设置了white-space: nowrap,这样元素就不会在切换期间最终改变换行。

小提琴:https://jsfiddle.net/rplittle/bjfwf2o5/

jQuery(document).ready(function($) {
  $('img.menu.button').click(function() {
    $('nav.header-nav').toggleClass('open');
  });
});
@media only screen and (min-width: 0px) and (max-width: 1080px) {
  img.standard.logo {
    height: 38px;
    width: 342px;
  }
  /* RESPONSIVE NAVIGATION MENU */
  img.menu.button {
    position: relative;
    display: block;
    width: 25px;
    height: 25px;
    background-size: 100%;
  }
  nav.header-nav {
    /* added rules */
    transition: width .5s ease-in-out;
    white-space: nowrap;
    right: 0;
    z-index: 10;
    position: fixed;
    top: 0px;
    width: 0;
    height: 100%;
    float: right;
    margin: 0;
    padding: 0;
    background-color: #1D1D1F;
    list-style: none;
    box-shadow: 0 10px 20px rgba(0, 0, 0, 0.05), 0 4px 6px rgba(0, 0, 0, 0.1);
  }
  nav.header-nav.open {
    /* added */
    width: 250px;
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<header class="header">
  <!-- LOGOS -->
  <a href="#">
    <img class="standard logo" src="http://www.lucieaverillphotography.co.uk/wp-content/uploads/2015/12/Lucie_Averill_Photography_Logo-2.png">
    <img class="white logo" src="http://www.lucieaverillphotography.co.uk/wp-content/uploads/2016/01/Lucie_Averill_Photography_Logo_White.png">
  </a>
  <!-- LOGOS -->
  <img class="menu button" src="http://www.lucieaverillphotography.co.uk/wp-content/uploads/2016/01/Menu.png">
  <!-- HEADER NAVIGATION MENU -->
  <nav class="header-nav">
    <div class="menu-header-menu-container">
      <ul id="menu-header-menu" class="menu">
        <li id="menu-item-463">
          <a href="#">WORK</a>
          <ul class="sub-menu">
            <li id="menu-item-584"><a href="#">LANDSCAPES</a>
            </li>
            <li id="menu-item-473"><a href="#">SEASCAPES</a>
            </li>
            <li id="menu-item-478"><a href="#">MACRO</a>
            </li>
            <li id="menu-item-477"><a href="#">CITIES</a>
            </li>
            <li id="menu-item-475"><a href="#">LONG EXPOSURE</a>
            </li>
            <li id="menu-item-480"><a href="#">MISCELLANEOUS</a>
            </li>
          </ul>
        </li>
        <li id="menu-item-10"><a href="#">ABOUT</a>
        </li>
        <li id="menu-item-464"><a href="#">SHOP</a>
        </li>
        <li id="menu-item-923">
          <a href="#">SOCIAL</a>
          <ul class="sub-menu">
            <li id="menu-item-11"><a target="_blank" href="#">FACEBOOK</a>
            </li>
            <li id="menu-item-924"><a href="#">INSTAGRAM</a>
            </li>
            <li id="menu-item-15"><a target="_blank" href="#">FLICKR</a>
            </li>
          </ul>
        </li>
        <li id="menu-item-14"><a href="#">CONTACT</a>
        </li>
      </ul>
    </div>
  </nav>
</header>

【讨论】:

  • 嗨,Ryan,感谢您的回复——这看起来可行,但有没有办法让网站的其余部分随菜单移到左侧?我喜欢我的原始代码使它看起来好像菜单在打开时将其他所有内容推到屏幕左侧的方式。我遇到的问题是,如果菜单仍处于打开状态,当将屏幕尺寸更改为 1080 像素以上时,我无法让它向后移动。
  • 它可能不是您想要的,但希望它足以让您了解这个想法,您可以根据自己的喜好编辑 CSS
【解决方案2】:

我会将你的 pa css 类设置为使用 jQuery 切换类方法。首先我不会使用 html 部分,我会添加一个主容器 div 来控制网站等。

这是一个工作版本的更深入的链接:Click here

<div class="menu-wrapper">
  <a href="">link</a>
</div>

<div class="main-container">
  <header>Hello
    <button id="menu-btn">MENU</button>
  </header>
</div>

CSS

html, body {
padding:0; 
  margin:0;
}

.main-container {
  position: absolute;
  right:0;
  width: 100%;
  max-width:100%;
  height: auto;
  background: grey;
  transition: all 800ms;
}

header {
  margin: 0;
  padding: 10px 0px;
  width: 100%;
  max-width: 100%;
  postion: relative;
  height:40px;
 }
#menu-btn {
   padding: 5px 8px;;
  position: relative;
  right: 10px;
  top: 2px;
  float: right;
  border: 0;
  border-radius: 4px;
  height: 30px;
  cursor: pointer;
  transition: background 800ms, color 800ms;
}
#menu-btn:hover {
  background: white;
  color: black;
 }
.menu-wrapper {
  position: absolute;
  top: 0; 
  right: -250px;
  bottom: 0;
  width: 250px;
  background: red;
  z-index:2000;
  transition: all 800ms;
}
.main-container.open {
  right: 250px;
}
.menu-wrapper.open {
  right: 0;
}

JS

$('#menu-btn').on('click', function(evt){
   evt.preventDefault();
   $('.main-container,.menu-wrapper').toggleClass('open');
 })

//-- check for browser resize
$(window).resize(function() {
  var scrWidth = $(window).width();
  //-- lets remvoe class if screen goes beyond mobile with
  if(scrWidth > 1080) {
      $('.main-container,.menu-wrapper').removeClass('open');
  }

 });

【讨论】:

  • 嗨西蒙,我无法让它工作,但它没有在控制台中显示任何错误。我在页眉中的 之后和页脚中的 之前添加了主容器 div
  • 现在尝试不使用 min 容器,使用您目前所拥有的。您还向主容器 css 添加了内容。例如:位置:相对;
  • 我想我已经设法让它工作了——唯一的问题是过渡 CSS 似乎没有任何效果,所以导航菜单和容器 ()从右到左飞镖真的很快。你知道我该如何解决这个问题吗?
  • 看看添加过渡前缀,可能是浏览器的事情css3.bradshawenterprises.com/transitions
  • 谢谢,我可以问最后一个问题吗? javascript 中的 srcWidth 规则在您打开菜单并将浏览器拉出时起作用,但由于某种原因,当您将其拖回超过 1080 像素时,菜单会自动再次打开,而不是向您显示按钮。
猜你喜欢
  • 2015-06-21
  • 1970-01-01
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多