代码之家  ›  专栏  ›  技术社区  ›  Edmond Tamas

“材质组件”菜单的“setAbsolutePosition()”工作不正常?

  •  1
  • Edmond Tamas  · 技术社区  · 7 年前

    我正在尝试使用 menu.setAbsolutePosition(0, 100); 在中找到的方法 MDCMenu's docs ,将“mdc菜单”相对于顶部栏上的溢出按钮定位(下图),但无论我设置了什么值,它似乎都没有起到多大作用(实际上使元素卡在屏幕外)。

    我创建了一个片段来说明这个问题:

    <link rel="stylesheet" type="text/css" href="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.css">
    <script src="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.js"></script>
    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
    
    <header class="mdc-top-app-bar">
      <div class="mdc-top-app-bar__row">
        <section class="mdc-top-app-bar__section mdc-top-app-bar__section--align-start">
          <a href="#" class="material-icons mdc-top-app-bar__navigation-icon">menu</a>
          <span class="mdc-top-app-bar__title">Title</span>
        </section>
        <section class="mdc-top-app-bar__section mdc-top-app-bar__section--align-end" role="toolbar">
          <div id="demo-menu" class="mdc-menu-surface--anchor">
            <a href="#" class="material-icons mdc-top-app-bar__action-item" aria-label="More" alt="More">more_vert</a>
            <div class="mdc-menu mdc-menu-surface">
              <ul class="mdc-list" role="menu" aria-hidden="true" aria-orientation="vertical">
                <li class="mdc-list-item" role="menuitem">
                  <span class="mdc-list-item__text">A Menu Item</span>
                </li>
              </ul>
            </div>
          </div>
        </section>
      </div>
    </header>
    
    <script>
      var MDCMenu = mdc.menu.MDCMenu.attachTo(document.querySelector('.mdc-menu'));
      MDCMenu.open = true;
      // MDCMenu.hoistMenuToBody(); 
      MDCMenu.setAbsolutePosition(0, 100);
    </script>
    1 回复  |  直到 7 年前
        1
  •  0
  •   benvc    6 年前

    您正在覆盖 setAbsolutePosition 通过包装 MDC menu 在a中 mdc-menu-surface--anchor 。下面的示例删除锚元素,以便您可以使用 设置绝对位置

    const bar = mdc.topAppBar.MDCTopAppBar.attachTo(document.querySelector('.mdc-top-app-bar'));
    const menu = mdc.menu.MDCMenu.attachTo(document.querySelector('.mdc-menu'));
    menu.setAbsolutePosition(0, 100);
    menu.open = true;
    
    document.querySelector('#menu-button').addEventListener('click', () => {
      menu.open = !menu.open;
    });
    <head>
      <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
      <link rel="stylesheet" type="text/css" href="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.css">
      <script src="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.js"></script>
    </head>
    
    <body>
    
      <header class="mdc-top-app-bar">
        <div class="mdc-top-app-bar__row">
          <section class="mdc-top-app-bar__section mdc-top-app-bar__section--align-start">
            <button class="material-icons mdc-top-app-bar__navigation-icon mdc-icon-button" aria-label="Open navigation menu">menu</button>
            <span class="mdc-top-app-bar__title">Title</span>
          </section>
          <section class="mdc-top-app-bar__section mdc-top-app-bar__section--align-end" role="toolbar">
            <button id="menu-button" class="material-icons mdc-top-app-bar__action-item mdc-icon-button" aria-label="Open menu">more_vert</button>
          </section>
        </div>
      </header>
    
      <div class="mdc-menu mdc-menu-surface">
        <ul class="mdc-list" role="menu" aria-hidden="true" aria-orientation="vertical" tabindex="-1">
          <li class="mdc-list-item" role="menuitem">
            <span class="mdc-list-item__text">A Menu Item</span>
          </li>
        </ul>
      </div>
    
    </body>