JS实现漂浮广告案例

news2024/9/23 13:27:42
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>漂浮广告</title>
    <style>
      #link {
        display: block;
        width: 200px;
        height: 100px;
        padding: 0;
        margin: 0;
        position: fixed;
        left: 0;
        top: 0;
        background-color: pink;
        cursor: pointer;
      }
      h2:first-child {
        color: red;
      }
    </style>
    <script>
      window.onload = function () {
        let link = document.getElementById("link");
        let w = document.documentElement.clientWidth;
        let h = document.documentElement.clientHeight;
        let gox = 1; //控制是否反向
        let goy = 1;
        let speed = 1; // Adjust the speed here
        let animationFrameId; // Used to store the requestAnimationFrame id

        /*
          这个move()函数是用来实现link元素的动画移动的。

          1.let x = link.offsetLeft; 和 let y = link.offsetTop;:这两行代码获取了
          link元素相对于其包含元素的左侧和顶部的偏移量。

          2.if (x > w - 200 || x < 0) gox = -gox; 和 if (y > h - 100 || y < 0) goy = -goy;
          这两行代码检查 link 元素是否到达了视口的边界。如果 link 的左侧超过视口宽度减去200像素
          (假设 link 的宽度是200像素),或者左侧偏移小于0,那么水平方向的移动方向将反转。
          同样的,如果 link 的顶部超过视口高度减去100像素(假设 link 的高度是100像素),
          或者顶部偏移小于0,那么垂直方向的移动方向将反转。

          3.link.style.left = x + speed * gox + "px"; 和 link.style.top = y + speed * goy + "px";
          这两行代码更新了 link 元素的 left 和 top 样式属性,通过将原始偏移量与速度和运动方向相乘来实现动画效果。
          在水平方向上,speed * gox 控制了 link 元素的水平速度和方向;在垂直方向上,speed * goy 控制了 link 
          元素的垂直速度和方向。

          4.animationFrameId = requestAnimationFrame(move);:这一行代码使用 requestAnimationFrame() 
          方法来调度下一次动画帧,并将 move() 函数作为回调函数。这样可以创建一个平滑的动画效果,浏览器会在下一次
          重绘之前执行该回调函数,以确保动画效果的流畅性。animationFrameId 变量用于存储 requestAnimationFrame() 
          返回的请求 ID,以便稍后可以使用 cancelAnimationFrame() 方法取消动画帧的请求。

          link.style.left = x + speed * gox + "px"; 
          实际上是将计算后的结果赋给了 link 元素的 style.left 属性,这会导致元素的位置发生改变。
          因此,每次调用时 x + speed * gox + "px" 的值都会被重新计算,并且赋给了 link.style.left,
          这会使元素的位置随之改变。所以每次调用时 console.log(x + speed * gox + "px"); 输出的值都会不同。
        */
        function move() {
          let x = link.offsetLeft;
          let y = link.offsetTop;
          if (x > w - 200 || x < 0) gox = -gox;
          link.style.left = x + speed * gox + "px";
          if (y > h - 100 || y < 0) goy = -goy;
          link.style.top = y + speed * goy + "px";
          animationFrameId = requestAnimationFrame(move);
        }

        link.onmouseenter = function () {
          cancelAnimationFrame(animationFrameId); // Stop the animation
        };

        link.onmouseleave = function () {
          move(); // Resume animation loop
        };

        move(); // Start the animation loop
      };
    </script>
  </head>
  <body>
    <a id="link" href="https://www.baidu.com" target="_blank"></a>
    <div>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
      <h2>这是文字</h2>
    </div>
  </body>
</html>

在这里插入图片描述

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

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

相关文章

每日一练:LeeCode-209、长度最小的子数组【滑动窗口+双指针】

每日一练&#xff1a;LeeCode-209、长度最小的子数组【滑动窗口双指针】 思路暴⼒解法滑动窗口 本文是力扣 每日一练&#xff1a;LeeCode-209、长度最小的子数组【滑动窗口双指针】 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐 L…

css超出部分显示省略号

目录 前言 一、CSS单行实现 二、CSS多行实现&#xff08;CSS3出的&#xff0c;兼容性需要注意&#xff09; 三、微信小程序超过2行出现省略号实现 四、JavaScript脚本实现 前言 CSS文本溢出就显示省略号&#xff0c;就是在样式中指定了盒子的宽度与高度,有可能出现某些内…

BUGKU-WEB shell

题目描述 题目截图如下&#xff1a; 描述&#xff1a; $poc "a#s#s#e#r#t";$poc_1 explode("#", $poc);$poc_2 $poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5];$poc_2($_GET[s])进入场景看看&#xff1a;是一个空白的界面 解题思路 …

基于51单片机的智能浇花系统的设计与实现

项目介绍 本设计是基于51系列单片机而设计的智能浇花系统&#xff0c;本系统结合单片机编程技术、传感器技术以及GSM通信技术实现系统基本功能&#xff0c;使系统根据不一样的土壤湿度&#xff0c;能够相应的改变浇水要求。本系统主要由湿度显示模块、湿度设置模块、湿度采集模…

第六届上海国际垃圾焚烧发电展将于12月11-13日上海举办

第六届上海国际垃圾焚烧发电暨固废处理技术展览会 2024年12月11-13日 上海新国际博览中心 主办单位&#xff1a;中华环保联合会 废弃物发电专委会 支持单位&#xff1a;垃圾焚烧技术与装备国家工程实验室 承办单位&#xff1a;上海怡涵展览服务有限公司 展会介绍&#xff1a…

男人圣经 7

男人圣经 7 高逼格长期目标的行动飞轮1. 品牌价值和声誉2. 人脉网络和关系3. 企业文化和价值观4. 专有技术和知识产权5. 管理经验和专业知识 为什么只追求高经济、高科技&#xff1f;为什么说道德仁义是表面&#xff0c;而利益才是一切背后的真相&#xff1f; 高逼格长期目标的…

【微服务学习笔记(一)】Nacos、Feign、Gateway基础使用

【微服务学习笔记&#xff08;一&#xff09;】Nacos、Feign、Gateway基础使用 总览Nacos安装配置Nacos注册中心服务多级存储模型负载均衡规则环境隔离 配置管理配置拉取配置热更新多服务共享配置 Feign远程调用配置性能优化Fegin使用 统一网关Gateway搭建网关路由断言工厂&…

部署快捷、使用简单、推理高效!大模型部署和推理框架 Xinference 来了!

今天为大家介绍一款大语言模型&#xff08;LLM&#xff09;部署和推理工具——Xinference[1]&#xff0c;其特点是部署快捷、使用简单、推理高效&#xff0c;并且支持多种形式的开源模型&#xff0c;还提供了 WebGUI 界面和 API 接口&#xff0c;方便用户进行模型部署和推理。 …

LORA_ LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

paper: https://arxiv.org/pdf/2106.09685.pdf code: https://github.com/microsoft/LoRA 摘要 作者提出了低秩自适应&#xff0c;或称LoRA&#xff0c;它冻结了预先训练的模型权值&#xff0c;并将可训练的秩分解矩阵注入变压器架构的每一层&#xff0c;大大减少了下游任务的…

金山办公内推

作为金山办公刚刚校招等待入职的一员&#xff0c;我诚挚地邀请您加入我的内推计划&#xff0c;与我一起共同打造卓越的工作环境和未来。 我能帮你 &#xff08;与直接填我的内推码不同&#xff0c;我直接通过内部问卷帮你投&#xff09; 1&#xff0c;直接通过校招群里的连接…

提交数据加快百度搜索引擎收录

百度站长工具做了更新&#xff0c;百度收录的地址分享如下&#xff0c;新站点提交后&#xff0c;可以加快百度收录。 普通收录_加快网站内容抓取&#xff0c;快速提交数据工具_站长工具_网站支持_百度搜索资源平台普通收录工具可实时向百度推送数据&#xff0c;创建并提交site…

Android应用Java开发规范

常规编程 魔法值与魔法数字 1.【强制】不允许任何魔法值&#xff08;即未经预先定义的常量&#xff09;直接出现在代码中。 反例&#xff1a; // 开发者 A 定义了缓存的 key。 String key "Id#taobao_" tradeId; cache.put(key, value); // 开发者 B 使用缓…

香港优才计划子女读书内地高考政策解读,3个黄金年龄段不要错过!

香港优才计划子女读书内地高考政策解读&#xff0c;3个黄金年龄段不要错过&#xff01; 孩子年龄多大&#xff0c;适合办理香港身份&#xff1f; 关注子女教育的家长们&#xff0c;应该对于“孩子有了香港身份&#xff0c;400分轻松上名校”的说法都有耳闻&#xff0c;但很少有…

altgraph的安装和用途说明

前言 altgraph 是 graphlib 的一个分支&#xff1a;一个图&#xff08;网络&#xff09;包&#xff0c;用于构建图、BFS 和 DFS 遍历、拓扑排序、最短路径等&#xff0c;带有 graphviz 输出。 安装 pip install altgraph 函数和用例 生物链 from altgraph import Graph# 定…

Python爬虫实战入门:豆瓣电影Top250(保你会,不会来打我)

文章目录 需求所需第三方库requests模块lxml模块了解 lxml模块和xpath语法xpath语法-基础节点选择语法 实战教程完整代码 需求 目标网站: https://movie.douban.com/top250 需求: 爬取电影中文名、英文名、电影详情页链接、导演、主演、上映年份、国籍、类型、评分、评分人数, …

伪装目标检测论文BGNet:Boundary-Guided Camouflaged Object Detection

论文地址:link 代码地址&#xff1a;link 这篇论文是22年的CVPR收录的一篇关于伪装目标检测的文章&#xff0c;作者主要是用了一些通道注意力和Atrous卷积来实现边缘引导的伪装目标检测&#xff0c;模型并不复杂&#xff0c;看了两天的论文和代码&#xff0c;为了加深印象在这里…

【鸿蒙 HarmonyOS 4.0】通知

一、介绍 通知旨在让用户以合适的方式及时获得有用的新消息&#xff0c;帮助用户高效地处理任务。应用可以通过通知接口发送通知消息&#xff0c;用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用&#xff0c;通知主要有以下使用场景&#xff1a; 显示接…

vscode 导入前端项目

vscode 导入前端项目 导入安装依赖 运行 参考vscode 下载 导入 安装依赖 运行 在前端项目的终端中输入npm run serve

洛谷 P5018 对称二叉树

题目背景 NOIP2018 普及组 T4 题目描述 一棵有点权的有根树如果满足以下条件&#xff0c;则被轩轩称为对称二叉树&#xff1a; 二叉树&#xff1b;将这棵树所有节点的左右子树交换&#xff0c;新树和原树对应位置的结构相同且点权相等。 下图中节点内的数字为权值&#xf…

ES6(一):let和const、模板字符串、函数默认值、剩余参数、扩展运算符、箭头函数

一、let和const声明变量 1.let没有变量提升&#xff0c;把let放下面打印不出来&#xff0c;放上面可以 <script>console.log(a);let a1;</script> 2.let是一个块级作用域,花括号里面声明的变量外面找不到 <script>console.log(b);if(true){let b1;}//und…