HTML/CSS 魔法第二弹:会逃跑的调皮按钮(悬停自动闪避)

引言

在网页设计中,交互性是吸引用户的关键因素之一。普通的按钮在用户悬停时可能只是颜色或样式发生改变,但今天我们要创造一个 “调皮” 的按钮,当用户鼠标悬停在上面时,它会自动闪避,仿佛在和用户玩游戏。本文将详细介绍如何使用 HTML 和 CSS 实现这个有趣的效果。

实现思路

要实现会逃跑的调皮按钮,我们的核心思路是利用 CSS 的 position 属性和 transform 属性,结合 JavaScript 监听鼠标事件。当鼠标悬停在按钮上时,通过 JavaScript 动态改变按钮的位置,从而实现按钮的闪避效果。

代码实现步骤

1. HTML 结构搭建

首先,我们需要创建一个基本的 HTML 结构,包含一个按钮元素。

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>会逃跑的调皮按钮</title><link rel="stylesheet" href="styles.css">
</head><body><button id="naughty-button">来抓我呀!</button><script src="script.js"></script>
</body></html>

在这段 HTML 代码中:

  • <!DOCTYPE html> 声明文档类型为 HTML5。
  • <meta> 标签设置字符编码和视口,确保页面在不同设备上正确显示。
  • <title> 标签设置页面标题。
  • <link> 标签引入外部的 CSS 文件 styles.css,用于样式设置。
  • <button> 标签创建了一个按钮,其 id 为 naughty-button,方便后续在 CSS 和 JavaScript 中引用。
  • <script> 标签引入外部的 JavaScript 文件 script.js,用于实现按钮的闪避逻辑。

2. CSS 样式设计

接下来,我们使用 CSS 为按钮设置基本样式,并将其定位在页面中心。

body {display: flex;justify-content: center;align-items: center;min-height: 100vh;margin: 0;background-color: #f0f0f0;
}#naughty-button {padding: 10px 20px;font-size: 18px;border: none;border-radius: 5px;background-color: #007BFF;color: white;cursor: pointer;position: relative;transition: transform 0.3s ease;
}

在这段 CSS 代码中:

  • body 元素使用 Flexbox 布局,将内容在水平和垂直方向上居中显示,同时设置背景颜色。
  • #naughty-button 选择器针对按钮进行样式设置:
    • padding 设置按钮内边距。
    • font-size 设置字体大小。
    • border 去除边框。
    • border-radius 设置圆角。
    • background-color 和 color 设置背景色和文字颜色。
    • cursor 设置鼠标指针样式为手型。
    • position: relative 使按钮可以相对于其正常位置进行定位。
    • transition 为按钮的 transform 属性添加过渡效果,使按钮移动更加平滑。

3. JavaScript 实现闪避逻辑

最后,我们使用 JavaScript 监听鼠标悬停事件,并在鼠标悬停时随机改变按钮的位置。

const naughtyButton = document.getElementById('naughty-button');naughtyButton.addEventListener('mouseover', () => {const maxX = window.innerWidth - naughtyButton.offsetWidth;const maxY = window.innerHeight - naughtyButton.offsetHeight;const randomX = Math.random() * maxX;const randomY = Math.random() * maxY;naughtyButton.style.transform = `translate(${randomX}px, ${randomY}px)`;
});

在这段 JavaScript 代码中:

  • const naughtyButton = document.getElementById('naughty-button'); 获取按钮元素。
  • naughtyButton.addEventListener('mouseover', () => { ... }); 监听按钮的鼠标悬停事件。
  • 在事件处理函数中,计算按钮在页面内可移动的最大 X 和 Y 坐标。
  • Math.random() 生成随机数,结合最大坐标,得到随机的 X 和 Y 位置。
  • naughtyButton.style.transform = translate(${randomX}px, ${randomY}px); 使用 transform 属性将按钮移动到随机位置。

完整代码

HTML 代码(index.html)

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>会逃跑的调皮按钮</title><link rel="stylesheet" href="styles.css">
</head><body><button id="naughty-button">来抓我呀!</button><script src="script.js"></script>
</body></html>

CSS 代码(styles.css)

body {display: flex;justify-content: center;align-items: center;min-height: 100vh;margin: 0;background-color: #f0f0f0;
}#naughty-button {padding: 10px 20px;font-size: 18px;border: none;border-radius: 5px;background-color: #007BFF;color: white;cursor: pointer;position: relative;transition: transform 0.3s ease;
}

JavaScript 代码(script.js)

const naughtyButton = document.getElementById('naughty-button');naughtyButton.addEventListener('mouseover', () => {const maxX = window.innerWidth - naughtyButton.offsetWidth;const maxY = window.innerHeight - naughtyButton.offsetHeight;const randomX = Math.random() * maxX;const randomY = Math.random() * maxY;naughtyButton.style.transform = `translate(${randomX}px, ${randomY}px)`;
});

总结

通过结合 HTML、CSS 和 JavaScript,我们成功实现了一个会逃跑的调皮按钮。这个项目不仅展示了如何利用基本的前端技术实现有趣的交互效果,还能激发我们在网页设计中发挥更多创意。你可以根据自己的需求对按钮的样式和闪避逻辑进行进一步的修改和扩展,创造出更加独特的交互体验。

将上述代码分别保存为 index.htmlstyles.css 和 script.js 文件,确保它们在同一目录下,然后在浏览器中打开 index.html 文件,就可以看到调皮按钮的闪避效果啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

**Java面试:技术大比拼**

互联网大厂Java面试&#xff1a;一场严肃与搞笑交织的技术拷问 场景&#xff1a;互联网大厂面试间 面试官&#xff08;严肃&#xff09;&#xff1a;请坐。马小帅&#xff0c;我们今天主要考察一下你在Java技术栈上的掌握程度&#xff0c;以及如何将这些技术应用于实际业务场景…

25考频高的前端面试题

请求失败会弹出一个toast&#xff0c;如何保证批量请求失败&#xff0c;只弹出一个toast 设置全局标志位&#xff0c;定义一个全局变量&#xff08;如isToastShown)来表示是否已经弹出过toast。在请求失败的处理逻辑中&#xff0c;首先检查该标志位。如果尚未弹出toast&#xf…

命令模式(Command Pattern)详解

文章目录 1. 什么是命令模式?2. 为什么需要命令模式?3. 命令模式的核心概念4. 命令模式的结构5. 命令模式的基本实现5.1 简单的灯光控制示例5.2 家电控制示例6. 带有撤销功能的命令模式6.1 修改命令接口6.2 实现可撤销的灯光命令6.3 实现可撤销的风扇命令6.4 修改调用者,支持…

《Vue3学习手记8》

vue3中的一些API shallowRef ( ) 和shallowReactive ( ) shallowRef (浅层响应式) 1.作用:创建一个响应式数据&#xff0c;但只对顶层属性进行响应式处理。 2.用法: const originalref(...) const original2shallowRef(original) 3.特点:只跟踪引用值的变化&#xff0c;不关心…

双列集合——map集合和三种遍历方式

双列集合的特点 键和值一一对应&#xff0c;每个键只能对应自己的值 一个键和值整体称为键值对或键值对对象&#xff0c;java中叫做entry对象。 map常见的api map接口中定义了双列集合所有的共性方法&#xff0c;下面三个实现类就没有什么额外新的方法要学习了。 map接口…

Linux安装部署Postgresql数据库

联网安装方案 Linux能在线安装依赖组件的前提下&#xff0c;可以快速安装部署PG数据库&#xff0c;安装过程使用root管理员帐号&#xff1a; 首先&#xff0c;使用如下命令自动下载Postgresql组件&#xff1a; # 在openEuler、Fedora或CentOS 8上&#xff0c;你可能会使用&a…

供应链算法整理(二)--- 智能补货

供应链业务的目标价值是&#xff1a;优化货品的供给、销售提供支撑&#xff0c;以降低成本&#xff0c;提高时效、收益&#xff0c;最终提升用户体验。基于目标价值&#xff0c;整体的算法模块分为&#xff1a;智能选品、智能预测、品仓铺货、智能补货、智能调拨、仓网路由、快…

vscode 个性化

vscode 个性化 设置 吸顶效果 使用前使用后 设置方法 VS Code 的粘性滚动预览 - 类似于 Excel 的冻结首行 插件 代码片段分享 - CodeSnap 使用方式 CtrlShiftP输入CodeSnap 唤起插件选择代码 行内报错提示 - Error Lens 使用前使用后 VSCode Error Lens插件介绍&…

Rockermq的部署与使用(0-1)

​RocketMQ​ 是阿里巴巴开源的一款 ​分布式消息中间件&#xff0c;具有高吞吐、低延迟、高可用等特点&#xff0c;广泛应用于多个领域&#xff0c;包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物…

软件测试报告机构如何保障软件质量并维护其安全性?

软件测试报告机构在软件开发流程里起着十分关键的作用&#xff0c;它可以保障软件的质量&#xff0c;它还能够维护软件的安全性。下面&#xff0c;我们就来深入了解一下这类机构。 机构作用 软件测试报告机构是软件质量的“把关者”&#xff0c;能对软件进行全面评估&#xf…

4个纯CSS自定义的简单而优雅的滚动条样式

今天发现 uni-app 项目的滚动条不显示&#xff0c;查了下原来是设置了 ::-webkit-scrollbar {display: none; } 那么怎么用 css 设置滚动条样式呢&#xff1f; 定义滚动条整体样式‌ ::-webkit-scrollbar 定义滚动条滑块样式 ::-webkit-scrollbar-thumb 定义滚动条轨道样式‌…

ES6入门---第二单元 模块五:模块化

js不支持模块化 注意&#xff1a; 需要放到服务器环境 1、如何定义模块&#xff1f; export 东西 例&#xff1a;1.js文件中 console.log(1模块加载了);//显示是否加载了 export const a 12; export const b 5; export let c 101; const a12; const b5; const c101;ex…

14.Excel:排序和筛选

一 位置 两个位置。 二 排序&#xff1a;如何使用 1.常规使用 补充&#xff1a;不弹出排序提醒排序。 选中要排序列中的任意一个单元格&#xff0c;然后排序。 2.根据要求进行排序 1.根据姓名笔画进行降序排序 要勾选上数据包含标题&#xff0c;默认是勾选了。 2.根据运营部、…

嵌入式系统基础知识

目录 一、冯诺依曼结构与哈佛结构 &#xff08;一&#xff09;冯诺依曼结构 &#xff08;二&#xff09;哈佛架构 二、ARM存储模式 &#xff08;一&#xff09;大端模式 &#xff08;二&#xff09;小端模式 &#xff08;三&#xff09;混合模式 三、CISC 与 RISC &am…

CSS 预处理器 Sass

目录 Sass 一、Sass 是什么&#xff1f; 二、核心功能详解 1. 变量&#xff08;Variables&#xff09; 2. 嵌套&#xff08;Nesting&#xff09; 3. 混合宏&#xff08;Mixins&#xff09; 4. 继承&#xff08;Inheritance&#xff09; 5. 运算&#xff08;Operations&…

信息收集新利器:SSearch Chrome 插件来了

SSearch 下载地址 SSearch &#x1f623;用途 每次谷歌语法搜索时还得自己写&#xff0c;我想省事一点&#xff0c;弄了一个插件&#xff0c;先加了几个常用的语法&#xff0c;点击后会跳转到对应搜索页面&#xff0c;也可以直接在搜索框微调 后续也会加些其他语法 &#…

Docker搭建SFTP

在这个教程中&#xff0c;我们将通过一个简单的例子来展示如何使用 Docker 和 atmoz/sftp 镜像设置一个基本的 SFTP 服务。这个服务将允许用户通过 SFTP 安全地访问和管理文件。我们将配置一个名为 ops 的用户&#xff0c;其密码为 123456&#xff0c;并限定用户只能访问特定的…

正态分布习题集 · 答案与解析篇

正态分布习题集 答案与解析篇 与题目篇编号一致,如有其他解题思路,欢迎在评论区交流。 1. 基础定义与性质 1.1 密度函数 X ∼ N ( μ , σ 2 ) X \sim N(\mu,\sigma^2) X∼N(μ,σ2) 的 PDF: [ f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left(-\frac{(x-\mu)2}{2\sigma2}\…

Java学习手册:SQL 优化技巧

一、SQL 查询优化 选择合适的索引列 &#xff1a;索引可以显著提高查询速度&#xff0c;但需要选择合适的列来创建索引。通常&#xff0c;对于频繁作为查询条件的列、连接操作的列以及排序或分组操作的列&#xff0c;应该考虑创建索引。例如&#xff0c;在一个订单表中&#xf…

(02)Redis 的订阅发布Pub/Sub

我们为了自己实现一个MQ功能&#xff0c;就要深入底层挖掘现有开源产品的实现过程。 Redis 发布订阅底层结构解析 Redis 不存储消息&#xff0c;仅作为“实时中转”&#xff1b;只有订阅者在线时才能收到消息&#xff1b;消息是广播给所有订阅此频道的客户端。 1. 核心数据结…