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日

相关文章

  • 值得分享的轻量级Bootstrap Table表格插件

    当谈及Bootstrap表格插件时,Bootstrap Table通常是前端开发者们的首选。Bootstrap Table是一款高度可定制性和轻量级的Bootstrap表格插件。本文将提供关于如何使用Bootstrap Table插件的完整攻略,介绍如何配置和使用Bootstrap表格,如何添加分页器和搜索器,以及如何处理表单提交。 安装和使用Bootstr…

    css 2023年6月10日
    00
  • 系统之外的字体引用及过渡效果

    系统之外的字体引用及过渡效果是前端开发中的一个重要内容。下面是详细的攻略。 导入外部字体 在网页中使用系统之外的字体,需要先将字体文件引入网页中。通过@font-face属性,我们可以将字体文件导入到网页中。 @font-face { font-family: ‘Open Sans’; src: url(‘OpenSans-Regular.ttf’) for…

    css 2023年6月9日
    00
  • JS模拟并美化的表单控件完整实例

    下面是JS模拟并美化的表单控件完整实例的攻略: 1. 了解需求 在开始编码之前,我们需要了解实现的需求,明确要完成以下任务: 模拟select、radio、checkbox等常见的表单控件,实现其基本功能 所有表单控件需要有美观的样式效果 2. 分析思路 在了解需求之后,我们需要进一步分析如何实现。 对于select控件的模拟,我们可以利用HTML的原生se…

    css 2023年6月10日
    00
  • 原生JS实现旋转木马式图片轮播插件

    下面是“原生JS实现旋转木马式图片轮播插件”的完整攻略: 概述 通过原生JS实现旋转木马式图片轮播插件,需要掌握以下知识点: 利用 JavaScript 操作 DOM 元素。 利用 CSS 完成动画效果。 利用 JavaScript 实现定时器。 利用事件处理函数实现用户交互。 实现步骤 下面逐一介绍实现旋转木马式图片轮播插件的步骤: 创建 HTML 结构。…

    css 2023年6月10日
    00
  • CSS 新的图像替换方法

    CSS 新的图像替换方法指的是使用CSS技术将文字换成图片,而且不需要使用img元素来显示图片。这种技术可以提升网站的性能,同时还可以增加网站的可访问性。 下面是使用CSS新的图像替换方法的完整攻略: 1.设置隐藏的文本 第一步是要为图片设置一个隐藏的文本,当图片无法加载或者被屏幕阅读器读取时,这段文本会起到提示作用。我们可以使用display:none来隐…

    css 2023年6月10日
    00
  • css 背景图片定位在菜单效果中的应用实例

    下面我将为你详细讲解“css 背景图片定位在菜单效果中的应用实例”的完整攻略。 什么是 CSS 背景图片定位? CSS 背景图片定位是指通过 CSS 的 background 属性对背景图片进行定位,从而实现不同的布局效果。 在 CSS 中,background 属性有多个子属性,包括 background-image、background-position…

    css 2023年6月9日
    00
  • 浅谈CSS 多栏布局(Multi-Columns Layout)

    浅谈CSS 多栏布局(Multi-Columns Layout) 什么是多栏布局? 多栏布局是指将一个区域分成多个栏目,每个栏目可以独立显示内容,从而提高网页的内容展示效果和阅读体验。多栏布局可以使用 CSS 的 columns 属性来实现。 如何使用 CSS 的 columns 属性? 使用 CSS 的 columns 属性可以实现多栏布局,具体的写法和使…

    css 2023年6月11日
    00
  • 详解PNG图片

    详解PNG图片 什么是PNG图片 PNG (Portable Network Graphics) 是可移植网络图形格式,是一种无损压缩的图像格式,专为在网络上使用而设计。它支持透明和半透明效果,以及更广泛的色彩范围和更高的精度。在Web开发中,PNG图片通常用于图标、徽标等需要透明效果的场合。 PNG图片的优点和缺点 优点 无损压缩,保证图像质量 支持透明和…

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