【问题标题】:Material design web MDCTab:interacted event not emitting after activateTabMaterial design web MDCTab:在activateTab之后没有发出交互事件
【发布时间】:2023-03-31 19:45:02
【问题描述】:

我正在使用这个

https://material.io/develop/web/components/tabs/tab-bar/

制作标签栏

<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>

<div class="mdc-tab-bar" role="tablist">
    <div class="mdc-tab-scroller">
        <div class="mdc-tab-scroller__scroll-area">
            <div class="mdc-tab-scroller__scroll-content">

                <button class="mdc-tab mdc-tab--active" role="tab" aria-selected="true" tabindex="0">
                    <span class="mdc-tab__content">
                        <span class="mdc-tab__icon material-icons" aria-hidden="true">title</span>
                        <span class="mdc-tab__text-label">Name</span>
                    </span>
                    <span class="mdc-tab-indicator mdc-tab-indicator--active">
                        <span class="mdc-tab-indicator__content mdc-tab-indicator__content--underline"></span>
                    </span>
                    <span class="mdc-tab__ripple"></span>
                </button>
                <button class="mdc-tab" role="tab" aria-selected="true" tabindex="0">
                    <span class="mdc-tab__content">
                        <span class="mdc-tab__icon material-icons" aria-hidden="true">style</span>
                        <span class="mdc-tab__text-label">Tags</span>
                    </span>
                    <span class="mdc-tab-indicator">
                        <span class="mdc-tab-indicator__content mdc-tab-indicator__content--underline"></span>
                    </span>
                    <span class="mdc-tab__ripple"></span>
                </button>
                <button class="mdc-tab" role="tab" aria-selected="true" tabindex="0">
                    <span class="mdc-tab__content">
                        <span class="mdc-tab__icon material-icons" aria-hidden="true">favorite</span>
                        <span class="mdc-tab__text-label">Status</span>
                    </span>
                    <span class="mdc-tab-indicator">
                        <span class="mdc-tab-indicator__content mdc-tab-indicator__content--underline"></span>
                    </span>
                    <span class="mdc-tab__ripple"></span>
                </button>
                <button class="mdc-tab" role="tab" aria-selected="true" tabindex="0">
                    <span class="mdc-tab__content">
                        <span class="mdc-tab__icon material-icons" aria-hidden="true">warning</span>
                        <span class="mdc-tab__text-label">Restriction</span>
                    </span>
                    <span class="mdc-tab-indicator">
                        <span class="mdc-tab-indicator__content mdc-tab-indicator__content--underline"></span>
                    </span>
                    <span class="mdc-tab__ripple"></span>
                </button>
                <button class="mdc-tab" role="tab" aria-selected="true" tabindex="0">
                    <span class="mdc-tab__content">
                        <span class="mdc-tab__icon material-icons" aria-hidden="true">keyboard_arrow_right</span>
                        <span class="mdc-tab__text-label">Other</span>
                    </span>
                    <span class="mdc-tab-indicator">
                        <span class="mdc-tab-indicator__content mdc-tab-indicator__content--underline"></span>
                    </span>
                    <span class="mdc-tab__ripple"></span>
                </button>

            </div>
        </div>
    </div>
</div>

还有这个 JS

    const tabBar = mdc.tabBar.MDCTabBar.attachTo(document.querySelector('.mdc-tab-bar'));
    tabBar.listen('MDCTab:interacted', function (event) {
        alert(1);
    });
    document.querySelectorAll('.mdc-tab-bar button')[3].click();
    //tabBar.activateTab(3);

调用单击工作(通过代码或使用鼠标手动),并发出事件并警告“1”。不过我宁愿使用activateTab 函数,但它只会使选项卡处于活动状态,而不会发出事件。

有人知道这里出了什么问题吗?

【问题讨论】:

    标签: javascript html material-design material-components material-components-web


    【解决方案1】:

    MDCTab:interacted 事件在选项卡激活之前发出,这就是使用activateTab 方法时不会触发它的原因。 MDCTab:interacted 实际上被MDC tab bar 用来知道要激活哪个选项卡。根据您的最终目标,您可能能够通过使用 MDCTabBar:activated 事件来获得所需的内容,因为它将由 activateTab 方法触发并在事件详细信息数据中提供已激活选项卡的索引。

    const tabBar = mdc.tabBar.MDCTabBar.attachTo(document.querySelector('.mdc-tab-bar'));
    const tabs = document.querySelectorAll('.mdc-tab');
    tabBar.listen('MDCTabBar:activated', (event) => {
      const tab = tabs[event.detail.index];
      console.log(tab.children[0].children[1].textContent, 'tab activated');
    });
    
    tabBar.activateTab(3); // activate "Restriction" tab
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Material Tabs Example</title>
        <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700">
        <link href="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.css" rel="stylesheet">
        <script src="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.js"></script>
      </head>
      <body>
        <div class="mdc-tab-bar" role="tablist">
          <div class="mdc-tab-scroller">
            <div class="mdc-tab-scroller__scroll-area">
              <div class="mdc-tab-scroller__scroll-content">
                <button class="mdc-tab mdc-tab--active" role="tab" aria-selected="true" tabindex="0">
                  <span class="mdc-tab__content">
                    <span class="mdc-tab__icon material-icons" aria-hidden="true">title</span>
                    <span class="mdc-tab__text-label">Name</span>
                  </span>
                  <span class="mdc-tab-indicator mdc-tab-indicator--active">
                    <span class="mdc-tab-indicator__content mdc-tab-indicator__content--underline"></span>
                  </span>
                  <span class="mdc-tab__ripple"></span>
                </button>
                <button class="mdc-tab" role="tab" aria-selected="false" tabindex="0">
                  <span class="mdc-tab__content">
                    <span class="mdc-tab__icon material-icons" aria-hidden="true">style</span>
                    <span class="mdc-tab__text-label">Tags</span>
                  </span>
                  <span class="mdc-tab-indicator">
                    <span class="mdc-tab-indicator__content mdc-tab-indicator__content--underline"></span>
                  </span>
                  <span class="mdc-tab__ripple"></span>
                </button>
                <button class="mdc-tab" role="tab" aria-selected="false" tabindex="0">
                  <span class="mdc-tab__content">
                    <span class="mdc-tab__icon material-icons" aria-hidden="true">favorite</span>
                    <span class="mdc-tab__text-label">Status</span>
                  </span>
                  <span class="mdc-tab-indicator">
                    <span class="mdc-tab-indicator__content mdc-tab-indicator__content--underline"></span>
                  </span>
                  <span class="mdc-tab__ripple"></span>
                </button>
                <button class="mdc-tab" role="tab" aria-selected="false" tabindex="0">
                  <span class="mdc-tab__content">
                    <span class="mdc-tab__icon material-icons" aria-hidden="true">warning</span>
                    <span class="mdc-tab__text-label">Restriction</span>
                  </span>
                  <span class="mdc-tab-indicator">
                    <span class="mdc-tab-indicator__content mdc-tab-indicator__content--underline"></span>
                  </span>
                  <span class="mdc-tab__ripple"></span>
                </button>
                <button class="mdc-tab" role="tab" aria-selected="false" tabindex="0">
                  <span class="mdc-tab__content">
                    <span class="mdc-tab__icon material-icons" aria-hidden="true">keyboard_arrow_right</span>
                    <span class="mdc-tab__text-label">Other</span>
                  </span>
                  <span class="mdc-tab-indicator">
                    <span class="mdc-tab-indicator__content mdc-tab-indicator__content--underline"></span>
                  </span>
                  <span class="mdc-tab__ripple"></span>
                </button>
              </div>
            </div>
          </div>
        </div>
      </body>
    </html>

    【讨论】:

      猜你喜欢
      • 2016-10-04
      • 2016-07-09
      • 2011-12-05
      • 2021-12-26
      • 2019-03-12
      • 2018-04-24
      • 2021-09-16
      • 1970-01-01
      • 2010-10-10
      相关资源
      最近更新 更多