【问题标题】:How do I use MDCSlider in JavaScript?如何在 JavaScript 中使用 MDCSlider?
【发布时间】:2021-03-01 17:04:04
【问题描述】:

我为 MDC 滑块 (https://material.io/develop/web/components/sliders) 创建了一个 DOM 元素。

看起来不错(除了颜色)。它可以工作,但我真的不知道如何初始化它。

我从 CDN 导入 MDC。我无法从文档中了解如何进行初始化。这是一个有效的版本:

setTimeout(() => { slider = new mdc.slider.MDCSlider(eltSlider) });

没有setTimeout,它不起作用。

我已经尝试使用 Promise 来代替,请稍等。那是行不通的。

甚至可能更糟:如果我在 setTimeout 之后使用 Promise 等待它不再起作用。

发生了什么事,我应该怎么做?

我不使用 ts。而且我不使用任何包处理程序。只是普通的 JavaScript。 (如果文档首先介绍了这个用例,我会很高兴。)

(这里似乎只有一个关于 MDCSlider 的问题。它不包括我的问题:actual use of foundation and adapter class of mdc-components


编辑:“从 CDN 导入”是指此处提到的设置:https://material.io/develop/web/docs/getting-started

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

没有 JavaScript 错误。只是屏幕上的滑块不起作用。 (看起来还可以,但是不行。)

我认为这是 MDC 和 DOM 状态的问题。上面链接中的示例表明 DOM 已准备好,但它并没有这么说。并且它没有解释在使用 JavaScript 操作 DOM 时如何检查这一点。

【问题讨论】:

  • 必须等到依赖加载完毕。
  • @canbax 谢谢。我怎么做?我怎么知道?
  • 您说“我从 CDN 导入 MDC”。不知道你是怎么导入的。但是你应该等到你的依赖项被加载。
  • @canbax 我编辑了问题以使其更清楚。感谢您的建议,但不是那种问题。
  • 最好是最小可重复的样本。

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


【解决方案1】:

似乎 unpkg 上的 latest 版本最近从 8.0.0 更改为 9.0.0 修复 this issue

<script src="https://unpkg.com/material-components-web@9.0.0/dist/material-components-web.js"></script>
<link href="https://unpkg.com/material-components-web@9.0.0/dist/material-components-web.css" rel="stylesheet">

<div class="mdc-slider">
  <input class="mdc-slider__input" type="range" min="0" max="100" value="50" name="volume" aria-label="Continuous slider demo">
  <div class="mdc-slider__track">
    <div class="mdc-slider__track--inactive"></div>
    <div class="mdc-slider__track--active">
      <div class="mdc-slider__track--active_fill"></div>
    </div>
  </div>
  <div class="mdc-slider__thumb">
    <div class="mdc-slider__thumb-knob"></div>
  </div>
</div>

<script>
        sldr = new mdc.slider.MDCSlider(document.querySelector('.mdc-slider'));
        sldr.root.addEventListener('MDCSlider:change', (e)=>console.log(e));
</script>

现在可以正常工作https://stackblitz.com/edit/js-4ycwx5?file=index.html

【讨论】:

    【解决方案2】:

    这里是一些关于在纯 JavaScript 中使用 MDC Web 的文档 - https://material.io/develop/web/docs/importing-js,“全球/CDN”部分。

    1. 确保在加载滑块 HTML 后调用 JavaScript。通常我在结束 body 标记之前插入它。
    2. 以下是 JavaScript 滑块初始化代码示例:
    const MDCSlider = mdc.slider.MDCSlider;
    const slider = new MDCSlider(document.querySelector('.mdc-slider'));
    

    这是 MDCSlider 的最小工作示例 - https://jsfiddle.net/klyakh/oky0zf7e/1/

    【讨论】:

    • 谢谢,但这是我已经做过的。它并没有像我预期的那样工作。
    • @Leo 你能详细说明什么不符合预期吗?
    • 请看问题。我已经提到了setTimeoutPromise
    猜你喜欢
    • 2019-08-15
    • 2016-12-26
    • 2012-09-21
    • 2021-05-12
    • 2015-10-10
    • 2017-03-20
    • 2018-09-28
    • 2014-09-14
    • 2013-07-19
    相关资源
    最近更新 更多