JavaScript 水波纹效果

JavaScript 水波纹效果

在JavaScript中,水波纹效果方法可以在用户与UI元素进行交互时提供即时的变化或视觉效果,以引起用户的注意。这种视觉效果的变化或任何与UI的交互都是为了让用户感知到。

当我们构建UI并希望与用户进行一些交互时,水波纹效果是非常有用的。借助水波纹效果,我们可以实现这一点。

水波纹效果的特点:

  • 与UI的交互
  • 在动作上产生视觉变化
  • 为用户提供强大而吸引人的UI

让我们看一些示例以更好地理解它:

示例1: 在按钮上悬停时触发水波纹效果。

  • index.html 创建一个容器div和按钮布局。

HTML

<!DOCTYPE html> 
<html lang="en"> 
  
<head> 
    <meta charset="UTF-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" 
          content="width=device-width, initial-scale=1.0"> 
    <title>Ripple Effect</title> 
    <link rel="stylesheet" href="./index.css"> 
    <script src="./index.js"></script> 
</head> 
  
<body> 
    <div class="display"> 
        <a class="HOVER"> 
            <span></span> 
            <text>Hover Me!</text> 
        </a> 
    </div> 
</body> 
  
</html>
  • index.css: 添加一些CSS用于设计和视觉效果

CSS

/* Write CSS Here */
@keyframes shake { 
    25% { 
        transform:  
          rotate(calc(var(--angle) * -1)); 
    } 
  
    50% { 
        transform: rotate(var(--angle)); 
    } 
  
    100% { 
        transform: rotate(0deg); 
    } 
} 
  
body { 
    font: 100 1.3em sans-serif; 
    display: flex; 
    flex-direction: column; 
    align-content: center; 
    padding: 0 5rem; 
} 
  
h1 { 
    font-weight: 100; 
} 
  
.display { 
    display: grid; 
    grid-template-columns: 50% 50%; 
    gap: 0.1em; 
} 
  
.HOVER { 
    --width: 100%; 
    --time: 0.7s; 
  
    position: relative; 
    display: inline-block; 
    height: 1em; 
    padding: 1em; 
  
    color: white; 
    background: #222; 
    overflow: hidden; 
} 
  
.HOVER text { 
    position: relative; 
    z-index: 5; 
  
    transition: color var(--time); 
} 
  
.HOVER:hover text { 
    color: #222; 
} 
  
.HOVER span { 
    position: absolute; 
    display: block; 
    content: ""; 
    z-index: 0; 
    width: 0; 
    height: 0; 
  
    border-radius: 100%; 
    background: #fff; 
  
    transform: translate(-50%, -50%); 
    transition: width var(--time),  
                  padding-top var(--time); 
} 
  
.HOVER:hover span { 
    width: calc(var(--width) * 2.25); 
    padding-top: calc(var(--width) * 2.25); 
} 
  • index.js: 此JavaScript文件在鼠标悬停在按钮布局区域时调用动画。它在鼠标悬停时调用事件,并添加CSS的动画类,当鼠标离开布局区域时移除该类。

Javascript

const ANIMATEDCLASSNAME = "animated"; 
const ELEMENTS = document.querySelectorAll(".HOVER"); 
const ELEMENTS_SPAN = []; 
  
ELEMENTS.forEach((element, index) => { 
    let addAnimation = false; 
  
  
    if (!ELEMENTS_SPAN[index]) 
        ELEMENTS_SPAN[index] = 
            element.querySelector("span"); 
  
    element.addEventListener("mouseover", e => { 
        ELEMENTS_SPAN[index].style.left = 
            e.pageX - element.offsetLeft + "px"; 
        ELEMENTS_SPAN[index].style.top = 
            e.pageY - element.offsetTop + "px"; 
  
        // Add an animation-class to animate via CSS. 
        if (addAnimation)  
            element.classList.add(ANIMATEDCLASSNAME); 
    }); 
  
    element.addEventListener("mouseout", e => { 
        ELEMENTS_SPAN[index].style.left = 
            e.pageX - element.offsetLeft + "px"; 
        ELEMENTS_SPAN[index].style.top = 
            e.pageY - element.offsetTop + "px"; 
    }); 
}); 

输出: 当我们在浏览器中打开index.html文件或使用实时服务器打开它时,输出如下。

JavaScript 水波纹效果

示例2: Material UI类似按钮的水波纹效果。

  • index.html: 创建一个包含按钮的容器div

HTML

<!DOCTYPE html> 
<html lang="en"> 
  
<head> 
    <meta charset="UTF-8"> 
    <meta http-equiv="X-UA-Compatible" 
          content="IE=edge"> 
    <meta name="viewport" 
          content="width=device-width, initial-scale=1.0"> 
    <title>Ripple Effect</title> 
    <link rel="stylesheet" href="./index.css"> 
    <script src="./index.js"></script> 
</head> 
  
<body> 
    <div class="display"> 
        <button class="ripple">Button</button> 
    </div> 
</body> 
  
</html>
  • index.css: 为容器和涟漪效果添加了样式。

CSS

/* Write CSS Here */
  
body { 
    font: 100 1.3em sans-serif; 
    display: flex; 
    flex-direction: column; 
    align-content: center; 
    padding: 0 5rem; 
    min-height: 100vh; 
} 
  
.display { 
    display: flex; 
    flex-direction: column; 
    align-content: center; 
    justify-content: center; 
    margin: 0 auto; 
    height: 100vh; 
    max-width: 500px; 
} 
.ripple { 
    background-position: center; 
    transition: background 0.8s; 
} 
.ripple:hover { 
    background: #47a7f5 radial-gradient(circle,  
          transparent 1%, #47a7f5 1%) 
        center/15000%; 
} 
.ripple:active { 
    background-color: #6eb9f7; 
    background-size: 100%; 
    transition: background 0s; 
} 
  
/* Button style */
button { 
    border: none; 
    border-radius: 2px; 
    padding: 12px 18px; 
    font-size: 16px; 
    text-transform: uppercase; 
    cursor: pointer; 
    color: white; 
    background-color: #2196f3; 
    box-shadow: 0 0 4px #999; 
    outline: none; 
} 
  • index.js: 在这个例子中,不需要添加JavaScript,所以我们将跳过。

输出: 当我们在浏览器中打开index.html文件或使用live Server打开时,输出如下。

JavaScript 水波纹效果

在这里,我们可以观察到与用户界面交互时的材料设计类型的波纹效果。

这就是波纹效果,它在与用户交互或提供特定操作时非常有用。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程