欢迎访问宙启技术站
智能推送

使用纯css怎么实现Material Design中按钮的水滴动画效果

发布时间:2023-05-14 23:04:35

Material Design 的按钮水滴动画效果是指当按钮被点击时,会出现一个水滴状的扩散效果,让点击的按钮看起来更有活力。这个效果可以使用纯 CSS 实现,下面就来介绍一下如何实现。

首先,我们需要一个 HTML 页面和一个带有背景颜色的按钮。在按钮上添加一个伪元素,作为水滴扩散效果的容器。代码如下:

<button class="btn">点击按钮</button>

.btn {
  padding: 10px 20px;
  background-color: #673AB7;
  color: #fff;
  border: none;
  font-size: 18px;
  position: relative;
  overflow: hidden;
  cursor: pointer;
}

.btn::before {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 0;
  height: 0;
  border-radius: 50%;
  background-color: rgba(255, 255, 255, 0.3);
  transform: translate(-50%, -50%);
  transition: width 0.3s ease-out, height 0.3s ease-out;
}

在按钮的 .btn 样式中,我们用 position: relative 来创建一个相对定位的容器,然后使用 overflow: hidden 来隐藏超出容器范围的内容。同时,在按钮上添加一个 cursor: pointer 属性,使得鼠标指针在按钮上移动时会变成手形图标,让用户感知到按钮是可以点击的。

接下来,在伪元素 .btn::before 样式中,我们使用 position: absolute 来创建一个绝对定位的容器,将其置于按钮上方。然后,添加 topleft 属性使其位于按钮的中间位置,使用 widthheight 属性将其宽高设置为 0,这样它就不会在按钮上以任何形式显示。

接下来我们添加一些动画效果,使得当按钮被点击时,伪元素会以水滴状扩散出来。我们使用 border-radius: 50% 来创建一个圆形的容器,并将其颜色设置为半透明的白色 rgba(255, 255, 255, 0.3)

我们还要使用 transform: translate(-50%, -50%) 属性将容器居中,并使用 transition 属性添加过渡效果。我们将其作用于 widthheight 属性上,让它们的变化在 0.3 秒内缓慢地进行。

最后我们还需要在 JavaScript 中添加一个事件监听器,监测用户的点击事件,当用户点击按钮时,我们将伪元素的 widthheight 属性设置为与按钮最长边的长度之和,这样就可以实现水滴扩散效果了。

下面是完整的 CSS 和 JavaScript 代码:

.btn {
  padding: 10px 20px;
  background-color: #673AB7;
  color: #fff;
  border: none;
  font-size: 18px;
  position: relative;
  overflow: hidden;
  cursor: pointer;
}

.btn::before {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 0;
  height: 0;
  border-radius: 50%;
  background-color: rgba(255, 255, 255, 0.3);
  transform: translate(-50%, -50%);
  transition: width 0.3s ease-out, height 0.3s ease-out;
}

.btn:hover::before {
  background-color: rgba(255, 255, 255, 0.5);
}

.btn:active::before {
  width: 300px;
  height: 300px;
}

document.querySelector(".btn").addEventListener("click", function() {
  this.classList.add("active");
  setTimeout(function() {
    this.classList.remove("active");
  }.bind(this), 300);
});

这里使用了 :hover:active 伪类,分别表示用户鼠标指针在按钮上悬停和按钮被点击后的状态。在 :hover 伪类中,我们将水滴的颜色增加了一些透明度,这样用户在悬停在按钮上时能够看得更清晰。

:active 伪类中,我们将伪元素的宽度和高度设置为 300px,这样它就能够在按钮被点击时扩散出去。

最后,在 JavaScript 代码中,我们使用 addEventListener 方法来监听按钮的点击事件。当按钮被点击时,我们为按钮添加一个 active 类,然后再使用 setTimeout 方法来延迟 300 毫秒,等待水滴动画结束后再将 active 类移除。这样一来,每次点击按钮时,水滴动画效果就会一次又一次地展示出来。

总的来说,通过上面这些步骤,我们就能够轻松地使用纯 CSS 和 JavaScript 实现 Material Design 中按钮的水滴动画效果。