首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从屏幕上滑出时用jQuery改变子菜单的位置

问从屏幕上滑出时用jQuery改变子菜单的位置
EN

Stack Overflow用户
提问于 2013-11-04 15:26:51
回答 1查看 375关注 0票数 0

我在CSS3中创建了一个3层下拉菜单,其中子菜单垂直下降。一切都很好,唯一的问题是当菜单(.main-menu > li ->,见下面的代码)太靠近屏幕的右边时,它的子菜单的某些部分随着它从屏幕上“滑出”而消失,变得不可见。

我想通过改变当前子菜单的浮动方向来改进jQuery菜单,如果它太靠近屏幕的一侧。我是jQuery的新手,你能帮我一下吗?

HTML的主要结构是:

代码语言:javascript
复制
<nav>
  <ul class="main-menu">
    <li><a href="#">Menu Point 1</a>
      <ul>
        <li><a href="#">Menu Point 1.1</a>
          <ul> 
            <li><a href="#">Menu Point 1.1.1</a></li>
            <li><a href="#">Menu Point 1.1.2</a></li>
            ....
          </ul>
        </li>
        <li><a href="#">Menu Point 1.2</a></li>
        ....
      </ul>
    </li>
    <li><a href="#">Menu Point 2</a>
      <ul>
        <li><a href="#">Menu Point 2.1</a>
          <ul>
            <li><a href="#">Menu Point 2.1.1</a></li>
            <li><a href="#">Menu Point 2.1.2</a></li>
            ....
          </ul>
        </li>
        <li><a href="#">Menu Point 2.2</a></li>
        ....
      </ul>
    </li>
    .....
  </ul>
</nav>

据我所知,jQuery应该这样做:

  1. 测量一级子菜单+二级子菜单(x)的宽度。
  2. 测量.main-menu > li的左侧位置与屏幕右侧位置(y)之间的距离。
  3. if (y-x)<0 { float the submenus to the left (by default they float to the right); }

你有什么建议我该怎么开始?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-04 22:27:35

因此,我自己找到了解决方案,如果有人感兴趣,下面是代码:

代码语言:javascript
复制
$(".main-menu > li > ul > li").addClass("submenu-1");
$(".main-menu > li > ul > li > ul > li").addClass("submenu-2");

$(".main-menu > li").on("mouseover", function() {

    if($(this).find(".submenu-1").length > 0 ) {
      var clientWidth = document.body.clientWidth;
      var menuDist1 = $(this).find(".submenu-1").offset().left;
      var menuWidth = $(this).width();
      var menuWidth1 = $(this).find(".submenu-1").width();
      var menuWidth2 = $(this).find(".submenu-2").width();

      var menuPosition = menuDist1 + menuWidth1 + menuWidth2;

      if (menuPosition > clientWidth) {
        var newPosition1 = menuWidth - menuWidth1;
        var newPosition2 = -menuWidth1;

        $(this).find(".submenu-1").parent("ul").css("left", newPosition1);
        $(this).find(".submenu-2").parent("ul").css("left", newPosition2);
      }
   }    
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19771065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档