前端例程20220728:点击涟漪效果按钮

2023-11-18

演示

在这里插入图片描述

原理

  • 监听按钮点击事件;
  • 点击事件中获取点击位置;
  • 在点击位置生成一个元素作为水波;
  • 水波生成后通过扩散同时变透明;
  • 水波根据动画时间变透明后销毁;

代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <title>点击涟漪效果按钮</title>

    <style>
        * {
            padding: 0;
            margin: 0;
            user-select: none;
        }

        html,
        body {
            height: 100vh;
        }
    </style>

    <style>
        body {
            display: flex;
            background-color: #222222;
            align-items: center;
            justify-content: center;
        }

        button {
            width: 200px;
            height: 80px;
            margin: 20px;
            border-radius: 40px;
            border: none;
            font-size: 30px;
            color: rgba(255, 255, 255, 0.5);
        }

        button:focus {
            outline: none;
        }

        button:nth-child(1) {
            background: linear-gradient(to right, #0365CA, #4FDEF8);
        }

        button:nth-child(2) {
            background: linear-gradient(to right, #DD72AB, #F0B6DA);
        }
    </style>

    <style>
        /* button position=relative / span position=absolute 结合使用 */
        button {
            position: relative;
            /* 隐藏button中超出button边界的元素 */
            overflow: hidden;
        }

        /* 使用span元素作为水波 */
        /* 点击按钮时会在点击位置生产水波 */
        /* 水波生成后从小到大扩散 */
        button span {
            position: absolute;
            background: white;
            pointer-events: none;
            border-radius: 50%;
            /* 使水波中心点位置保持不变 */
            transform: translate(-50%, -50%);
            animation: animate 1s linear;
        }

        /* 尺寸和透明度动画效果 */
        @keyframes animate {
            0% {
                width: 0px;
                height: 0px;
                opacity: 0.5;
            }

            100% {
                width: 400px;
                height: 400px;
                opacity: 0;
            }
        }
    </style>

    <script>
        window.onload = () => {
            const buttons = document.querySelectorAll('button');
            buttons.forEach(btn => {
                btn.addEventListener('click', function (e) {
                    // 计算点击位置
                    // 结合button position=relative / span position=absolute,这里得到的位置为相对button的位置
                    let x = e.offsetX;
                    let y = e.offsetY;

                    // 创建水波元素
                    let ripple = document.createElement('span');
                    ripple.style.left = `${x}px`;
                    ripple.style.top = `${y}px`;
                    this.appendChild(ripple);

                    // 水波扩散一定时间后删除
                    setTimeout(() => {
                        ripple.remove();
                    }, 1000)
                })
            })
        };
    </script>
</head>

<body>
    <button>BUTTON</button>
    <button>BUTTON</button>
</body>

</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端例程20220728:点击涟漪效果按钮 的相关文章

  • Ajax文件上传

    我想使用 Ajax 和 php 上传文件 我有一个表格
  • 如何从 JavaScript 中的字符串中删除空白字符?

    如何从 JavaScript 中的字符串中删除空白字符 修剪很容易 但我不知道如何将它们从inside字符串 例如 222 334 gt 222334 您可以使用正则表达式 如下所示来替换所有空格 var oldString 222 334
  • 我可以动态创建/销毁 Vue 组件吗?

    因此 我正在创建一个相当复杂的 Vue 应用程序 它从后端 API 获取数据并将其显示在前端 具体取决于用户选择的过滤器 它的默认设置是立即显示所有内容 然后一旦用户选择过滤器 它就会拉出不具有这些属性的 卡片 组件 直到今天 一切都很顺利
  • 如何将 Django 中的数组传递给模板并在 JavaScript 中使用它

    我想将数组传递给模板 然后通过 JavaScript 使用它 In my views py I have arry1 Str 500 20 return render to response test html array1 arry1 在
  • React Native:不透明视图内的透明视图

    我想用不透明框架和透明中心显示相机的视图 就像图片中的一样 黑色部分是相机的视图 我正在寻找具有纯反应本机组件的解决方案 没有额外的库 例如https github com gilbox react native masked view h
  • 如何使用 JavaScript 选择预节点/块中的文本?

    我了解不允许 JS 将任意文本复制到剪贴板背后的安全原因 但是是否有一种方法可以通过单击按钮来选择预节点中的文本 类似于 select 函数在输入中的工作方式 我不是在寻找复制到剪贴板的 jQuery 插件 我只想突出显示预块中的文本 以便
  • 如何强制折断不可折断的字符串?

    我有一个根据数据库中包含的数据生成的 HTML 页面 数据库有时包含浏览器无法分解的长字符串 因为这些字符串不包含可分解的字符 空格 点 逗号等 有没有办法使用 html css 甚至 javascript 来解决这个问题 看到这个link
  • Javascript 在另一个函数中检测“Shift”键按下

    我正在从 Flash 影片 使用外部接口 调用我的 html 页面中的 Javascript 函数 并且我想知道调用该函数时用户是否按下了 Shift 键 例如 如果我通过鼠标单击调用该函数 这似乎很简单 因为我可以传递事件并检查 if e
  • 在多个动态添加的表单上初始化 jQuery validate() 函数

    有人建议最好初始化一个 form validate 在页面加载而不是点击事件上运行 jquery form validate 插件仅允许在输入更改时提交 https stackoverflow com questions 10984196
  • 在动态创建的元素上添加事件监听器[重复]

    这个问题在这里已经有答案了 是否可以向所有动态生成的元素添加事件侦听器 Javascript 我不是页面的所有者 因此我无法以静态方式添加侦听器 对于页面加载时创建的所有元素 我使用 doc body addEventListener cl
  • html canvas动画卡顿

    谁能解释为什么提供的画布动画断断续续 我创建了一个测试存根来演示该问题 我在桌面上的 FF Chrome IE 以及 Android 上的 FF 和 Chrome 中看到了卡顿现象 口吃是由于垃圾收集造成的吗 似乎 raf 在每次调用时都会
  • 为什么我们使用 SpreadsheetApp.flush()?

    我的理解是 flush https developers google com apps script reference spreadsheet spreadsheet app flush有助于在功能发生时执行这些功能 而无需将它们捆绑在
  • 如何循环遍历对象数组并生成键值对?

    我有一个像这样的对象数组 let someObj items id 12 value true id 34 value true id 56 value false 我想将其添加到现有对象中 其中 id 是该对象的键 如下所示 let ob
  • @aspnet/signalr 与 @microsoft/signalr javascript 库

    aspnet signalr 与 microsoft signalr javascript 库有什么区别 两者似乎都对 DotNetCore SignalR 有效 两者似乎都很活跃 在一些教程中 我找到 aspnet signalr 在Do
  • 有没有办法伪造同步 XHR 请求?

    我正在使用 Emscripten 系统将一堆 C 代码移植到 Javascript C 代码有很多调用fopen这是一个同步 IO 调用 在 Emscripten 中 我们使用对本地资源的 XHR 请求来模拟这一点however 在 Fir
  • 是否可以将请求标头添加到 CORS 预检请求中?

    我有一个从外部服务器 不是服务器 访问 API 的网站 为网站提供服务 通过简单的XmlHttpRequest 见下文 那个API 需要将用于访问服务的 API 密钥添加为请求标头 然而 正如这些CORS https developer m
  • 弹出窗口的动态高度取决于内容,可能吗?

    是否有可能获得一个宽度始终为 400px 的弹出窗口 但根据弹出窗口中的内容动态高度 我已经看到了这个 但不知道如何将其应用到弹出窗口 调整 iframe 的宽度高度以适应其中的内容 https stackoverflow com ques
  • 使用 AJAX 和 JQuery 按设定的时间间隔刷新 Rails 部分

    I have a page in my rails application that looks like 现在 我有另一个用 python 编码的人工智能应用程序 它处理视频 显示在 Rails 应用程序页面的左侧 并使用捕获的车辆及其相
  • 具有固定顶部菜单的语义 UI 侧边栏

    Semantic UI 对其进行预警侧边栏页面 http semantic ui com modules sidebar html usage 当侧边栏出现时 固定位置内容可能会出现改变其位置的问题 然后它提供了该问题的两种可能的解决方案
  • 如何获得 JavaScript 阶乘程序的循环来显示所使用的工作?

    你好 我面临着用 JavaScript 编写一个程序的挑战 尽管我对它不太了解 但它要求用户输入一个数字 然后计算该数字的阶乘 我使用了已经提出的问题并设法使计算正常工作 但无法获得所需的输出 我必须在以下输出中获取它 而不使用任何花哨的库

随机推荐

  • K8S 使用 SideCar 模式部署 Filebeat 收集容器日志

    对于 K8S 内的容器日志收集 一般有两种常用的方式 1 使用 DaemonSet 在每台 Node 上部署一个日志收集容器 用于收集当前 Node 上所有容器挂载到宿主机目录下的日志 2 使用 SideCar 模式将日志收集容器与业务容器
  • python基础运用

    列表有索引 下标 字符串有 格式化字符串 str1 xxx 0 sss 1 format 哈哈 100 print str1 print xxx sss d 哈哈 100 name 张三 age 18 hobby 唱 跳 rap 篮球 张三
  • 计算机世界规整_20211110_周三

    计算机世界规整 20211110 周三 扫我查看
  • Android 4.4.2引入的超炫动画库

    酷炫 作者博客 http rkhcy github io 源码地址 https github com Rkhcy TransitionNote Google Demo https github com android platform fr
  • 在vue3中使用百度地图

    1 在vue项目public文件夹下的index html中引入script 在需要使用百度地图的地方直接使用 代码如下
  • 移动开发之我见--“Android开发生涯”

    纵观这几年的发展 移动手机的发展真是翻天覆地 前两年诺基亚一统天下 苹果颠覆了整个手机市场 安卓也分得了一杯羹 WindowPhone手机也纯纯欲动 Bada也抓紧推出自己的系统 360也要推出自己的手机系统 百度 腾讯纷拥而至 未来世界是
  • numpy 更新版本后 more than 1 DLL from .libs警告

    问题 解析 由于卸载或者更新旧版本时 未能删掉对应的 dll文件导致 解决 根据警告路径 找到对应的dll文件 根据时间 删掉之前的版本 保留近期版本 直接删除并不会影响新版本
  • VsCode的 code . 失效了?如何解决

    已经安装了vscode 为什么没有 code 命令呢 是因为你下载vscode的时候 是直接拷贝的文件 或者下载失误的问题 从而导致code环境变量没有配置 配置环境变量 path 找到我的电脑 右键 属性 2 选择高级系统设置 单机即可
  • 栅压自举采样电路(bootstrap技术)

    栅压自举采样电路 bootstrap技术 参考 CMOS模 数转换器设计与仿真 编著 张锋 陈铖颖 范军 文章目录 栅压自举采样电路 bootstrap技术 一 电路结构 二 工作原理 一 电路结构 二 工作原理
  • 【C++初阶】右值引用

    一 什么是左值右值 一般来说能取地址的 也就是等号左边的值 比如创建的int变量是左值 而右值就是与他相反 在等号右边 并且不能被取地址 比如说数字10 一般的普通引用只能引用左值 引用和const组合在一起使用的话既可以引用左值也可以引用
  • Python求三位水仙花数

    Python求三位水仙花数 简介 水仙花数 是指一个三位整数 其各位数字的3次方和等于该数本身 例如 ABC是一个 3位水仙花数 则 A的3次方 B的3次方 C的3次方 ABC 基础掌握 Python str 函数 https www ru
  • C++/C++11中头文件iterator的使用

  • 总结c++笔试题目

    若有以下说明和语句 请选出哪个是对c数组元素的正确引用 int c 4 5 cp 5 cp c A cp 1 B cp 3 C cp 1 3 D cp 2 正确答案 D 解析 cp c 这个语句是将数组第0行的地址赋给了cp cp 1使指针
  • Kendo UI开发教程(6): Kendo DataSource 概述

    Kendo 的数据源支持本地数据源 JavaScript 对象数组 或者远程数据源 XML JSON JSONP 支持CRUD操作 创建 读取 更新和删除操作 并支持排序 分页 过滤 分组和集合等 准备开始 下面创建一个本地数据源 1 va
  • insert into select 和 insert into values区别

    INSERT INTO SELECT语句 从一个表复制数据 然后把数据插入到一个已存在的表中 将一个table1的数据的部分字段复制到table2中 或者将整个table1复制到table2中 这时候我们就要使用SELECT INTO 和
  • RS232 Android获取串口数据

    串口 串行接口简称串口 也称串行通信接口或串行通讯接口 通常指COM接口 是采用串行通信方式的扩展接口 串行接口 Serial Interface 是指数据一位一位地顺序传送 其特点是通信线路简单 只要一对传输线就可以实现双向通信 可以直接
  • STM32 printf函数无法使用

    要想STM32使用printf函数打印 需要三个条件 条件1 魔术棒配置 条件2 有以下函数 重定向c库函数printf到串口DEBUG USART 重定向后可使用printf函数 int fputc int ch FILE f 发送一个字
  • Java 8:让你的代码更简洁、高效和灵活的新特性

    Java 8 企业中使用最普遍的版本 那么了解它的新特性是非常有必要的 目录 一 函数式接口 二 Lamdba表达式 三 方法引用 四 Stream API 3 1 创建 方法一 通过集合 方法二 通过数组 方法三 通过Stream的of
  • 零知识证明

    一 概念 证明者能够在不向验证者提供任何有用的信息的情况下 使验证者相信某个论断是正确的 零知识证明 Zero Knowledge Proof 起源于最小泄露证明 设P表示掌握某些信息 并希望证实这一事实的实体 设V是证明这一事实的实体 假
  • 前端例程20220728:点击涟漪效果按钮

    演示 原理 监听按钮点击事件 点击事件中获取点击位置 在点击位置生成一个元素作为水波 水波生成后通过扩散同时变透明 水波根据动画时间变透明后销毁 代码