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

yizhihongxing

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日

相关文章

  • CSS 设置滚动条样式的实例代码

    当我们在网页上使用滚动条时,通常会发现浏览器默认的滚动条不够美观,这时我们可以使用 CSS 来设置滚动条的样式。 CSS 设置滚动条样式的实例代码 1. 设置滚动条的样式 可以使用 CSS 的 ::-webkit-scrollbar 伪类来设置滚动条的样式。在这里,我们将通过代码示例来演示如何设置滚动条的背景色、滑块颜色和宽度等属性。 /* 设置滚动条的背景…

    css 2023年6月9日
    00
  • 深入解析CSS中的自定义属性

    深入解析CSS中的自定义属性,以下是完整攻略: 什么是自定义属性 自定义属性(Custom Properties),又称变量(Variables)。它是CSS新增的一项功能,用于保存一个值,然后可以在整个文档中随时调用它。解析时会替换为具体的值。 自定义属性可以使用–开头的名称声明,如: :root{ –main-color: #333; } 这个样式表…

    css 2023年6月9日
    00
  • jQuery实现的上拉刷新功能组件示例

    下面我来详细讲解一下如何实现“jQuery实现的上拉刷新功能组件示例”。 jQuery实现的上拉刷新功能组件示例 一、背景介绍 上拉刷新是移动端开发中常用的一种交互方式,它可以让用户在页面下拉到指定位置时进行数据加载,从而提高用户体验。本示例将使用jQuery来实现上拉刷新功能。 二、示例代码分析 示例代码中主要分为两个部分:HTML部分和JavaScrip…

    css 2023年6月10日
    00
  • vue实现动态列表尾部添加数据执行动画

    让我来详细讲解一下“vue实现动态列表尾部添加数据执行动画”的完整攻略。 1. 实现思路 动态列表尾部添加数据执行动画的实现思路大致如下: 首先,需要在data中定义一个数组,用于存储列表数据。接下来,在页面上使用v-for指令,循环渲染数组中的数据,展示列表内容。 接着,我们可以使用vue的过渡动画功能,对新添加的数据进行动画处理。当有新数据添加时,可以通…

    css 2023年6月10日
    00
  • js实现点击链接后窗口缩小并居中的方法

    实现点击链接后窗口缩小并居中的方法可以通过以下几个步骤来完成。 给链接添加点击事件:在HTML代码中,我们需要为链接添加一个点击事件。具体做法是在链接元素中添加 onclick 属性,并为其设置一个JavaScript函数。如下所示: <a href="#" onclick="resizeAndCenterWindow()…

    css 2023年6月10日
    00
  • css filter和getUserMedia的联合使用

    CSS filter 是一种很常用的前端技术,通过调整不同的滤镜参数,可以让图片、视频等多媒体元素变得更加生动、丰富。getUserMedia则是一个 JavaScript API,可以用来访问电脑或移动设备上的摄像头和麦克风,让网页可以进行实时的视频/音频播放、录制、推流等操作。css filter和getUserMedia的联合使用则让开发者可以更加灵活…

    css 2023年6月11日
    00
  • 举例详解CSS中的字体尺寸设置

    下面是“举例详解CSS中的字体尺寸设置”的完整攻略。 一、字体大小相关单位 在CSS中,用于设置字体大小的单位有多种,常见的有以下几种: px:像素,是CSS中最基本的单位,1px等于屏幕上的一个物理像素; em:相对于父元素字体大小的倍数,例如一个元素设置了字体大小为2em,它的字体大小就会是父元素字体大小的2倍; rem:相对于根元素字体大小的倍数,例如…

    css 2023年6月9日
    00
  • thinkphp jquery实现图片上传和预览效果

    下面是详细的攻略。首先,我们需要明确一下需要具备的技能和环境: 技能要求:- 熟悉thinkphp的基本操作和使用- 掌握jquery的基本操作和使用- 能够使用HTML5的FormData和FileReader对象实现文件上传和预览功能 环境要求:- PHP环境- 浏览器支持HTML5- 支持jquery的Web开发环境 接下来,我们将分步骤引导您完成整个…

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