实战:如何使用 Material Design 风格的 TextInputLayout

Material Design 是由 Google 推出的一种现代化的视觉设计语言,在移动端和 Web 端都非常受欢迎。其中之一的特色是 TextInputLayout 组件,可以让输入框变得更加美观和易用。

本文将介绍如何在前端开发中使用 Material Design 风格的 TextInputLayout,包括如何添加样式和使用 JavaScript 实现交互功能。同时,本文也会提供一些实用的指导意义和示例代码,帮助读者快速上手。

添加 TextInputLayout 样式

要使用 TextInputLayout,首先需要在 HTML 中引入相关的 CSS 文件。在本文中,我们使用 Materialize 这个流行的前端框架来实现。

在页面头部添加以下代码:

<!-- Materialize CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">

接着,在 HTML 中添加 TextInputLayout 组件,可以使用以下代码:

<div class="input-field">
  <input id="username" type="text">
  <label for="username">Username</label>
</div>

这里,input-field 是 Materialize 的 CSS 类,用于包含输入框和标签。input 是输入框,label 是标签。for 属性需要和 inputid 属性对应,用于实现标签的关联效果。

这时候,TextInputLayout 组件已经能够正常显示,但还没有 Material Design 的样式。为了添加样式,可以在 JavaScript 中初始化 Materialize。在页面底部添加以下代码:

<!-- Materialize JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<script>
  // 初始化 Materialize
  M.AutoInit();
</script>

通过这个初始化函数,所有的 Materialize 组件都会被自动初始化。

现在,我们成功地使用了 Material Design 风格的 TextInputLayout。

实现交互功能

除了样式,TextInputLayout 还提供了一些交互功能,例如提示文字、错误提示和字符数统计等。

提示文字

提示文字可以在输入框上方显示,用于提示用户应该输入什么内容。

在 HTML 中,可以这样设置:

<div class="input-field">
  <input id="username" type="text">
  <label for="username" data-error="Wrong format" data-success="Good format">Username</label>
</div>

这里,data-error 属性和 data-success 属性用来设置提示文字的内容。当用户输入正确格式的数据时,会显示 Good format,否则会显示 Wrong format

错误提示

当用户输入错误的数据时,可以通过 JavaScript 显示错误提示。在 HTML 中添加 TextInputLayout 组件时,可以增加一个额外的 span 元素,用于显示错误提示。示例代码如下:

<div class="input-field">
  <input id="email" type="email">
  <label for="email" data-error="Wrong email format" data-success="Good email format">Email</label>
  <span class="helper-text" data-error="Please enter a valid email address"></span>
</div>

注意,span 元素需要有一个名为 helper-text 的 CSS 类,并设置 data-error 属性来显示错误提示的内容。

在 JavaScript 中,可以这样实现:

// 获取 TextInputLayout 组件
var emailInput = document.querySelector('#email');

// 监听输入框失去焦点事件
emailInput.addEventListener('blur', function() {
  // 验证邮箱格式是否正确
  if (emailInput.validity.patternMismatch) {
    // 显示错误提示
    emailInput.parentNode.querySelector('.helper-text').setAttribute('data-error', 'Please enter a valid email address');
    emailInput.parentNode.classList.add('invalid');
  } else {
    // 隐藏错误提示
    emailInput.parentNode.querySelector('.helper-text').removeAttribute('data-error');
    emailInput.parentNode.classList.remove('invalid');
  }
});

这里,blur 事件监听输入框失去焦点事件,然后验证邮箱格式是否正确。如果不正确,就显示错误提示,否则隐藏错误提示。

字符数统计

在一些场景中,需要统计输入框中已经输入的字符数量。可以通过 JavaScript 实现这个功能。

在 HTML 中,可以添加一个 span 元素,用于显示字符数统计。示例代码如下:

<div class="input-field">
  <input id="password" type="password">
  <label for="password">Password</label>
  <span class="helper-text" data-length="8"></span>
</div>

这里,span 元素需要有一个名为 helper-text 的 CSS 类,还需要设置 data-length 属性来表示最多可以输入多少个字符。

在 JavaScript 中,可以这样实现:

// 获取 TextInputLayout 组件
var passwordInput = document.querySelector('#password');

// 监听输入框输入事件
passwordInput.addEventListener('input', function() {
  // 获取当前已经输入的字符数量
  var count = passwordInput.value.length;
  
  // 获取最大可输入的字符数量
  var maxCount = parseInt(passwordInput.parentNode.querySelector('.helper-text').getAttribute('data-length'));

  // 更新字符数统计
  passwordInput.parentNode.querySelector('.helper-text').innerHTML = count + '/' + maxCount;

  // 如果超过最大可输入的字符数量,显示错误提示
  if (count > maxCount) {
    passwordInput.parentNode.classList.add('invalid');
  } else {
    passwordInput.parentNode.classList.remove('invalid');
  }
});

这里,input 事件监听输入框输入事件,然后更新字符数统计。如果超过最大可输入的字符数量,就显示错误提示。

总结

本文介绍了如何使用 Material Design 风格的 TextInputLayout,在前端开发中实现美观和易用的输入框。除了样式之外,还介绍了一些实用的交互功能,例如提示文字、错误提示和字符数统计。

通过本文的介绍和示例代码,读者可以快速上手 Material Design 风格的 TextInputLayout,为自己的前端项目提供更好的用户体验。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b84a55add4f0e0ff0d04a7