js点击按钮实现水波纹效果代码(CSS3和Canves)

JS点击按钮实现水波纹效果是一种很炫酷的UI效果,可以为网站增加动态和交互的效果,本文将详细讲解实现这种效果的完整攻略。实现方法有两种,分别是使用CSS3和使用Canvas。

CSS3 实现 js 点击按钮水波纹效果

HTML 结构

首先需要在HTML文件中添加一个按钮,如下所示:

<button class="wave-button">Button</button>

CSS 样式

需要设置.wave-button按钮的样式。这里使用伪类:before:after为按钮添加水波纹效果。

.wave-button {
    background-color: blue;
    color: white;
    border: none;
    padding: 10px 20px;
    font-size: 16px;
    position: relative;
    overflow: hidden;
}

.wave-button:hover:before,
.wave-button:focus:before {
    content: "";
    display: block;
    position: absolute;
    z-index: 1;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 0;
    height: 0;
    border-radius: 100%;
    background-color: rgba(255, 255, 255, 0.5);
    animation: wave 0.8s linear;
}

@keyframes wave {
    from {
        width: 0;
        height: 0;
        opacity: 0.5;
    }

    to {
        width: 300px;
        height: 300px;
        opacity: 0;
    }
}

JS 代码

当按钮被点击时,调用以下JavaScript代码:

document.querySelector('.wave-button').addEventListener('click', function (event) {
    const button = event.target;
    const wave = button.querySelector('.wave');
    const buttonPos = button.getBoundingClientRect();

    if (wave) {
        wave.remove();
    }

    const posX = event.clientX - buttonPos.left;
    const posY = event.clientY - buttonPos.top;

    const ripple = document.createElement('span');
    ripple.classList.add('wave');
    ripple.style.top = `${posY}px`;
    ripple.style.left = `${posX}px`;

    button.appendChild(ripple);

    setTimeout(() => {
        ripple.remove();
    }, 800);
});

Canvas 实现 js 点击按钮水波纹效果

HTML 结构

与CSS3实现方式一样,需要在HTML文件中添加一个按钮,如下所示:

<button class="wave-button">Button</button>

JS 代码

先创建画布和配置:

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');

canvas.width = canvas.height = 100;
canvas.classList.add('wave-canvas');

document.querySelector('.wave-button').appendChild(canvas);

const circle = {
    x: 0,
    y: 0,
    width: 0,
    height: 0,
    lineWidth: 3,
    alpha: 0.5,
    strokeStyle: '#ffffff',
};

为按钮添加事件监听器,在事件触发时绘制水波纹:

document.querySelector('.wave-button').addEventListener('click', function (event) {
    const button = event.target;
    const buttonPos = button.getBoundingClientRect();

    circle.x = event.clientX - buttonPos.left - canvas.width / 2;
    circle.y = event.clientY - buttonPos.top - canvas.width / 2;

    // 绘制水波纹
    const wave = setInterval(() => {
        circle.width += 3;
        circle.height += 3;
        circle.alpha -= 0.02;
        circle.lineWidth -= 0.03;

        ctx.beginPath();
        ctx.arc(circle.x, circle.y, circle.width, 0, 2 * Math.PI);
        ctx.lineWidth = circle.lineWidth;
        ctx.globalAlpha = circle.alpha;
        ctx.strokeStyle = circle.strokeStyle;
        ctx.stroke();

        if (circle.alpha <= 0) {
            clearInterval(wave);
            waveEnd();
        }
    }, 30);
});

function waveEnd() {
    // 恢复初始值
    circle.width = 0;
    circle.height = 0;
    circle.alpha = 0.5;
    circle.lineWidth = 3;
    ctx.clearRect(0, 0, canvas.width, canvas.height);
}

两种实现方式都可以让按钮实现水波纹效果,选择使用哪种方法需要根据实际情况进行考虑。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js点击按钮实现水波纹效果代码(CSS3和Canves) - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • Nginx基础配置(main、events、http、server、location)

    下面是关于Nginx基础配置的完整攻略。 Nginx基础配置 1. main main是Nginx配置文件的最顶层。在main内可以进行一些全局的设置,包括工作进程数、pid文件路径等。下面是一个简单的示例: user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid …

    css 2023年6月9日
    00
  • 在IE8上JS实现combobox支持拼音检索功能

    实现在IE8上JS实现combobox支持拼音检索功能的完整攻略,需要遵循以下步骤: 引入pinyin.js pinyin.js是一个基于汉字转拼音的JavaScript库,可以通过引入该库为我们提供方便的汉字拼音转换功能。可以在中引入该js库: <head> <script src="path/to/pinyin.js&quot…

    css 2023年6月10日
    00
  • JS实现div内部的文字或图片自动循环滚动代码

    实现div内部的文字或图片自动循环滚动,可以使用JavaScript来实现。下面是实现的完整攻略: 1. 准备工作 首先需要一个包含滚动内容的div容器,例如: <div id="scroll-container"> <ul> <li><img src="img1.jpg" a…

    css 2023年6月10日
    00
  • 浅谈HTML文件引入外部CSS文件时路径的写法总结

    HTML文件引入外部CSS文件时路径的写法是一个常见的技术问题,很多人在刚开始学习前端开发时可能会遇到这个问题。下面将详细讲解HTML文件引入外部CSS文件的路径写法总结。 1. HTML文件引入外部CSS文件的基本语法 HTML文件引入外部CSS文件的基本语法如下: <head> <link href="css_file_pat…

    css 2023年6月9日
    00
  • 网页设计中常用的19个Web安全字体

    要讲解“网页设计中常用的19个Web安全字体”的攻略,首先需要了解以下几点内容: 1. 什么是Web安全字体 Web安全字体,也叫网页安全字体,是指在几乎所有操作系统和平台上都可以显示的字体,包括Arial、Verdana、Times New Roman等。它们都是Windows系统和MacOS系统自带的字体。 2. 为什么要使用Web安全字体 因为如果在网…

    css 2023年6月9日
    00
  • webpack拆分压缩css并以link导入的操作步骤

    下面是webpack拆分压缩css并以link导入的操作步骤的完整攻略。我会提供两个示例说明,以便更好地理解。 1. 安装必要的依赖 首先,我们需要安装必要的依赖项。这里需要安装三个依赖:css-loader, style-loader, mini-css-extract-plugin。其中,css-loader和style-loader用于处理css文件,…

    css 2023年6月10日
    00
  • jQuery编写设置和获取颜色的插件

    下面是关于“jQuery编写设置和获取颜色的插件”的完整攻略。 插件准备 在开始编写颜色插件之前,我们需要准备一些基本工具和必要设定。具体如下: 安装jQuery库 我们需要确保在网站中引入了jQuery库,可以通过CDN或下载方式引入,在代码中添加如下代码,确保jQuery库被成功加载: <script src="https://cdn.b…

    css 2023年6月9日
    00
  • css3media响应式布局实例

    下面是CSS3 Media响应式布局实例的完整攻略: 一、概述 由于不同设备的尺寸、屏幕大小、分辨率等因素的不同,为了满足不同用户的独特需求和使用体验,响应式布局已经成为了现代Web设计中不可或缺的重要部分。而CSS3 Media便是实现响应式布局的基础之一。 二、Media的基本语法 Media queries是一种CSS3技术,它允许我们基于不同设备的参…

    css 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部