【问题标题】:window resize function not working窗口调整大小功能不起作用
【发布时间】:2016-10-23 01:58:21
【问题描述】:

我有一个菜单,我希望当窗口宽度 >= 767 像素时可以通过悬停访问它的下拉菜单,并且当窗口宽度为

只有当我刷新页面时它才起作用,否则只有悬停事件起作用。

JQUERY

(function ($) {

    'use strict';

    function getWindowWidth() {
        var windowWidth = 0;
        if (typeof(window.innerWidth) === 'number') {
            windowWidth = window.innerWidth;
        }
        else {
            if (document.documentElement && document.documentElement.clientWidth) {
                windowWidth = document.documentElement.clientWidth;
            }
            else {
                if (document.body && document.body.clientWidth) {
                    windowWidth = document.body.clientWidth;
                }
            }
        }
        console.log(windowWidth);
        return windowWidth;
    }

    function widthStatement() {
        if (getWindowWidth() >= 767) {
            $('.menu > ul > li').on({
                mouseenter: function () {
                    $(this).children('ul').stop(true, false).show();
                },
                mouseleave: function () {
                    $(this).children('ul').stop(true, false).hide();
                }
            });
        } else if (getWindowWidth() < 767) {
            $('.menu > ul > li').click(function () {
                $(this).children('ul').stop(true, false).toggle();
            });
        }
    }

    $(document).ready(getWindowWidth, widthStatement);
    $(window).on('resize', widthStatement);

}($));

CSS

.menu {
    margin: 0 auto;
    width: 80%;
    background: #e9e9e9;
}

.menu:before, .menu:after {
    display: table;
    content: ' ';
}

.menu:after {
    clear: both;
}

.menu ul {
    position: relative;
    margin: 0;
    padding: 0;
    list-style: none;
}

.menu ul > li {
    float: left;
    margin: 0;
    padding: 0;
}

.menu ul > li:hover {
    background: #f0f0f0;
}

.menu ul > li > a {
    display: block;
    padding: 1.5em 2.5em;
    color: #444;
}

.menu ul > li > ul {
    position: absolute;
    left: 0;
    display: none;
    width: 100%;
    background: #f0f0f0;
}

.menu ul > li > ul > li {
    padding: 1.5em;
    width: 25%;
}

.menu ul > li > ul > li > a {
    padding: 0;
    border-bottom: 1px solid #ccc;
    color: #444;
}

.menu ul > li > ul > li > ul {
    position: relative;
    display: block;
    padding-top: 1em;
}

.menu ul > li > ul > li > ul > li {
    padding: 0;
    width: 100%;
}

.menu ul > li > ul > li > ul > li > a {
    padding: .5em 0;
    border: 0;
    font-size: .9em;
}

HTML

<div class="menu">
    <ul>
      <li><a href="#">Home</a></li>
      <li><a href="#">About</a>
        <ul>
          <li><a href="#">School</a>
            <ul>
              <li><a href="#">Lidership</a></li>
              <li><a href="#">History</a></li>
              <li><a href="#">Locations</a></li>
              <li><a href="#">Careers</a></li>
            </ul>
          </li>
          <li><a href="#">Study</a>
            <ul>
              <li><a href="#">Undergraduate</a></li>
              <li><a href="#">Masters</a></li>
              <li><a href="#">International</a></li>
              <li><a href="#">Online</a></li>
            </ul>
          </li>
          <li><a href="#">Research</a>
            <ul>
              <li><a href="#">Undergraduate research</a></li>
              <li><a href="#">Masters research</a></li>
              <li><a href="#">Funding</a></li>
            </ul>
          </li>
          <li><a href="#">Something</a>
            <ul>
              <li><a href="#">Sub something</a></li>
              <li><a href="#">Sub something</a></li>
              <li><a href="#">Sub something</a></li>
              <li><a href="#">Sub something</a></li>
            </ul>
          </li>
        </ul>
      </li>
      <li><a href="#">News</a>
        <ul>
          <li><a href="#">Today</a></li>
          <li><a href="#">Calendar</a></li>
          <li><a href="#">Sport</a></li>
        </ul>
      </li>
      <li><a href="#">Contact</a>
        <ul>
          <li><a href="#">School</a>
            <ul>
              <li><a href="#">Lidership</a></li>
              <li><a href="#">History</a></li>
              <li><a href="#">Locations</a></li>
              <li><a href="#">Careers</a></li>
            </ul>
          </li>
          <li><a href="#">Study</a>
            <ul>
              <li><a href="#">Undergraduate</a></li>
              <li><a href="#">Masters</a></li>
              <li><a href="#">International</a></li>
              <li><a href="#">Online</a></li>
            </ul>
          </li>
          <li><a href="#">Study</a>
            <ul>
              <li><a href="#">Undergraduate</a></li>
              <li><a href="#">Masters</a></li>
              <li><a href="#">International</a></li>
              <li><a href="#">Online</a></li>
            </ul>
          </li>
          <li><a href="#">Empty sub</a></li>
        </ul>
      </li>
    </ul>
  </div>

演示:http://codepen.io/riogrande/pen/yJVNMq

【问题讨论】:

  • 为什么不使用 css 媒体查询来定位两个不同宽度的目标?
  • 在我看来,您需要在 .on 之前使用 .off() ,以便删除先前附加的事件处理程序。我认为这会让你走上正确的道路,但你仍然有一个问题,当你点击一个链接的菜单项时,你会转到该链接,所以菜单上的“点击”事件可能并不理想。
  • $('.menu > ul > li').off().on({ mouseenter: function () { $(this).children('ul').stop(true, false ).show(); }, mouseleave: function () { $(this).children('ul').stop(true, false).hide(); } });
  • 你必须对两个附加的事件处理程序都这样做。
  • 您将多个事件处理程序附加到同一个项目。这只是清理了之前的内容,并允许您在任何给定时间仅附加一个事件处理程序。这解决了您的问题,但我会阅读它,因为可能有更好的方法来做到这一点。感谢您的赞赏。

标签: javascript jquery html css


【解决方案1】:

这是您使用 .ready() 的方式的问题。无论如何,当文档准备好时,您不需要调用 getWindowWidth(),因为您的 widthStatement() 会为您完成。只需删除它,你就走了:

$(document).ready(widthStatement);

http://codepen.io/anon/pen/YWpXOp

【讨论】:

  • 这正在工作。所以超过 767px 的下拉菜单会悬停在它下面,然后点击。您的解决方案只会在 767 下方悬停而不是点击
  • 好的,所以现在我正在查看其余代码,很明显您的逻辑不太正确。基本上,您需要在元素绑定中包含逻辑运算符。如果您需要更多帮助来解决这个问题,我建议您发布一个新问题,因为它现在超出了您原来的范围。你可以使用这样的东西作为你的起点:stackoverflow.com/questions/4325790/…
  • 感谢您所做的一切,我希望这个逻辑能够正常工作并修复它,您可以查看我的问题的 cmets 有什么问题:)
  • 不客气 - 正如@orangeh0g 所提到的,他建议的代码有效,但不一定是“正确”的做事方式。
  • 将逻辑运算符放入绑定中:codepen.io/anon/pen/WxoQxL。使用此方法,您还可以删除每次调整窗口大小时调用该函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多