HTML实现飘动广告效果

devtools/2024/10/22 9:47:00/

上述HTML代码创建了一个简单的网页,其中包含一个可以在页面内自动移动的小方块(div元素),并且当鼠标悬停在该方块上时,动画会暂停;当鼠标移开时,动画会继续。以下是代码的详细分析:

HTML结构

  • <head>部分设置了文档的字符编码为UTF-8,视口宽度适应设备宽度,并定义了一些基本的样式和一个标题。
  • <body>部分包含一个div元素,其ID为notice,内部包含一个链接(<a>标签),虽然链接地址设置为#(代表无实际跳转),但可以在后续通过JavaScript或手动更改为有效的URL。

CSS样式

  • body的背景色被设置为浅灰色(#e9e9e9)。
  • #notice的样式定义包括:
    • 绝对定位(position: absolute;),这意味着它的位置将相对于最近的已定位祖先元素(如果没有,则是<html>)。
    • 宽度和高度均为120px。
    • 背景色为鲜红色(rgb(233, 21, 21))。
    • 文本水平和垂直居中(通过line-heighttext-align)。

JavaScript功能

  1. 变量初始化
    • notice:获取ID为noticediv元素。
    • xSpeedySpeed:设置方块在x轴和y轴上的移动速度。
    • animationFrameId:用于存储动画帧的ID,以便可以暂停和继续动画。
    • widthheight:计算浏览器视口的宽度和高度,确保方块不会移出可视区域。
  2. 动画函数run()
    • 使用getBoundingClientRect()获取方块当前的位置。
    • 计算方块下一帧的位置(newXnewY)。
    • 检查是否达到视口的边界,如果是,则反转移动方向。
    • 更新方块的lefttop样式以移动方块。
    • 使用requestAnimationFrame(run)递归调用run(),以创建连续的动画效果。
  3. 鼠标事件监听
    • mouseenter事件:当鼠标悬停在方块上时,调用cancelAnimationFrame(animationFrameId)来暂停动画。
    • mouseleave事件:当鼠标从方块上移开时,重新调用run()来继续动画。

功能总结

  • 页面加载后,一个红色的小方块会在浏览器窗口内自动移动,碰到边界时会反弹。
  • 当用户将鼠标悬停在方块上时,动画会暂停;移开鼠标后,动画会继续。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><style>body {background-color: #e9e9e9;}#notice {position: absolute;width: 120px;height: 120px;background-color: rgb(233, 21, 21);line-height: 120px;text-align: center;}</style><title>Auto Text Effect</title>
</head><body><div id="notice"> <!-- 修正了这里的空格字符 --><a href="#" target="_blank">红包!速点!</a> <!-- 修正了链接中的空格字符,并添加了一个实际的链接地址 # --></div><script>let notice = document.getElementById('notice');let xSpeed = 4; // x轴方向移动的速度  let ySpeed = 2.4; // y轴方向移动的速度(类似于向量)  let animationFrameId;// 兼容性的浏览器视口高度和宽度  let width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;let height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;// 动画运行函数  function run() {let rect = notice.getBoundingClientRect(); // 返回盒子的位置对象信息  // 下一瞬/帧 要修改盒子的left或top的值,等于当前位置加速度  let newX = rect.left + xSpeed;let newY = rect.top + ySpeed;// 位置判断,到达边界,碰撞更改  if (newX + notice.offsetWidth >= width) {console.log('到达右边界');newX = width - notice.offsetWidth; // 右边界位置是视口宽度去除自身宽度  xSpeed = -xSpeed; // 移动方向颠倒过来  } else if (newX <= 0) {console.log('到达左边界');newX = 0; // 左边界位置是起始位置是0  xSpeed = -xSpeed; // 移动方向颠倒过来  }// Y轴同理不赘述  if (newY + notice.offsetHeight >= height) {console.log('到达下边界');newY = height - notice.offsetHeight;ySpeed = -ySpeed;} else if (newY <= 0) {console.log('到达上边界');newY = 0;ySpeed = -ySpeed;}// 更改位置即为移动dom元素  notice.style.left = `${newX}px`;notice.style.top = `${newY}px`;// 再次run  animationFrameId = requestAnimationFrame(run);}// 开始动画  run();/**  * 添加事件监听器,使用mouseenter和mouseleave  * 即为鼠标hover效果  * */notice.addEventListener('mouseenter', () => {console.log('移入暂停');cancelAnimationFrame(animationFrameId); // 取消动画帧  });notice.addEventListener('mouseleave', () => {console.log('移出继续');run();});  </script>
</body></html>


http://www.ppmy.cn/devtools/125757.html

相关文章

智能EDA小白从0开始 —— DAY10 Yosys

Yosys 概述 工作原理 Yosys的工作原理深入来讲&#xff0c;是一个复杂但有序的硬件设计自动化流程&#xff0c;其核心在于将高级硬件描述语言&#xff08;HDL&#xff09;如Verilog或VHDL编写的代码&#xff0c;通过一系列精细的步骤转换为门级网表。这一流程首先涉及对HDL代…

uniapp-小程序开发0-1笔记大全

uniapp官网&#xff1a; https://uniapp.dcloud.net.cn/tutorial/syntax-js.html uniapp插件市场&#xff1a; https://ext.dcloud.net.cn/ uviewui类库&#xff1a; https://www.uviewui.com/ 柱状、扇形、仪表盘库&#xff1a; https://www.ucharts.cn/v2/#/ CSS样式&…

跟踪用户状态,http协议无状态 Cookie HttpSession,Session和Cookie的关系

1.概念分析 跟踪用户状态指的是web应用能够分辨请求属于哪个用户&#xff0c;进而记录用户的状态&#xff0c;从而为用户提供连续的针对性的服务。比如有多个客户在同一个购物网站上购物&#xff0c;每一个用户都会有一个虚拟的购物车。当某个客户发送请求将商品添加到购物车时…

图解Redis 04 | Set数据类型的原理及应用场景

介绍 Redis 的 Set 类型是一个不允许重复元素的集合&#xff0c;元素存储的顺序不按照插入的顺序&#xff0c;因此属于无序集合。一个 Set 最多可以存储 2^32 - 1 个元素&#xff0c;这与数学中的集合概念类似。Set 类型不仅支持增、删、改、查等操作&#xff0c;还支持多个Se…

闲说视频清晰度和各种格式、编码技术的发展历史

文章目录 引子清晰度视频格式&#xff1a;MP4、AVI 、MKV、MOV、WMV、FLV 、RMVB等等什么是视频格式MP4AVIMKVMOVWMVFLVRM / RMVB其他 编码技术&#xff1a;MPEG-1、MPEG-2、MPEG-4、RealVideo、DivX、XviD、H.264&#xff08;AVC&#xff09;、H.265&#xff08;HEVC&#xff…

pnpm报错 cannot find package xxx,有的电脑正常运行,只有这个的电脑报错

pnpm build报错 cannot find package xxx&#xff0c;有的电脑正常运行&#xff0c;只有这一个报错 在网上查找各种资料发现是项目在电脑里的目录层级比较深导致的。 问题&#xff1a;在 Windows 系统上&#xff0c;文件路径过长&#xff08;超过 260 个字符&#xff09;可能…

工程需要用到物资管理吗?

建筑工程在日常作业中离不开钢筋、混凝土等物资&#xff0c;这些物资在工程项目中占据着至关重要的地位&#xff0c;能够直接影响到工程项目的成本、质量和进度。 项目想要提高效率就避不开使用物资管理系统&#xff0c;那么物资管理包括哪些管理呢&#xff1f; 工程物资管理…

VSCode运行QT界面

VSCode用久了,感觉Qt Creator的写起代码来还是不如VSCode得心应手,虽然目前还是存在一些问题,先把目前实现的状况做个记录,后续有机会再进一步优化。 当前方式 通过QtCreator创建一个CMake项目,然后使用CMake的方式在VSCode中进行编译。 claude给出的建议 左上角的名字会…