20231106-前端学习加载和视频球特效

news2025/1/21 15:43:04

加载效果

加载效果

代码

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>加载效果</title>
  <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
  <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"
    integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
  <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
  <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"
    integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd"
    crossorigin="anonymous"></script>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    body {
      background: #2980b9;
    }

    .loading {
      height: 40px;
      position: absolute;
      /* 使用绝对定位,相对于其最近的已定位祖先元素进行定位 */
      top: 50%;
      /* 将加载动画容器的顶部位置设为屏幕垂直中心 */
      left: 50%;
      /* 将加载动画容器的左侧位置设为屏幕水平中心 */
      display: flex;
      /* 使用弹性盒子布局 */
      transform: translate(-50%, -50%);
      /* 使用平移变换将加载动画容器水平和垂直居中 */
      align-items: center;
      /* 在交叉轴上居中对齐(垂直居中) */
    }

    .object {
      width: 6px;
      height: 40px;
      background: white;
      margin: 0 3px;
      border-radius: 10px;
      animation: loading 0.8s infinite;
      /* 使用名为 "loading" 的动画,持续时间为 0.8 秒,无限循环播放 */
      animation-play-state: paused;
      /* 初始状态为暂停 */
    }

    .xyBtn {
      position: absolute;
      top: 60%;
      left: 50%;
      transform: translate(-40%, -50%);
    }

    .object:nth-child(2) {
      animation-delay: 0.1s;
      /* 延迟 0.1 秒开始播放动画 */
    }

    .object:nth-child(3) {
      animation-delay: 0.2s;
    }

    .object:nth-child(4) {
      animation-delay: 0.3s;
    }

    .object:nth-child(5) {
      animation-delay: 0.4s;
    }

    .object:nth-child(6) {
      animation-delay: 0.5s;
    }

    .object:nth-child(7) {
      animation-delay: 0.6s;
    }

    .object:nth-child(8) {
      animation-delay: 0.7s;
    }


    @keyframes loading {
      0% {
        height: 0;
      }

      50% {
        height: 40px;
      }

      100% {
        height: 0;
      }
    }

    .animate {
      animation-play-state: running;
      /* 设置动画状态为运行中 */
    }

    .paused {
      animation-play-state: paused;
      /* 设置动画状态为暂停 */
    }
  </style>
</head>

<body>
  <div class="loading">
    <div class="object"></div>
    <div class="object"></div>
    <div class="object"></div>
    <div class="object"></div>
    <div class="object"></div>
    <div class="object"></div>
    <div class="object"></div>
    <div class="object"></div>
  </div>
  <button type="button" class="btn btn-info xyBtn" id="toggleButton">开始动画</button>

  <script>
    var toggleButton = document.getElementById("toggleButton");
    var objectElements = document.getElementsByClassName("object");
    var animationState = false;

    // 添加按钮点击事件处理程序
    toggleButton.addEventListener("click", function () {
      animationState = !animationState;

      if (animationState) {
        for (var i = 0; i < objectElements.length; i++) {
          objectElements[i].classList.add("animate");/* 添加 "animate" 类,开始播放动画 */
          objectElements[i].classList.remove("paused");/* 移除 "paused" 类,确保动画处于运行状态 */
        }
        toggleButton.textContent = "暂停动画";// 更新按钮文本为"暂停动画"
      } else {
        for (var i = 0; i < objectElements.length; i++) {
          objectElements[i].classList.add("paused");
          objectElements[i].classList.remove("animate");
        }
        toggleButton.textContent = "开始动画";// 更新按钮文本为"开始动画"
      }
    });
  </script>
</body>

</html>

创意视频球特效

 创意视频球特效

代码

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>创意视频球特效</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    body {
      overflow: hidden;
      /* 隐藏页面的滚动条 */
    }

    section {
      position: absolute;
      /* 绝对定位 */
      top: -100px;
      left: -100px;
      right: -100px;
      bottom: -100px;
      display: flex;
      /* 使用弹性布局 */
      justify-content: center;
      /* 水平居中对齐 */
      align-items: center;
      /* 垂直居中对齐 */
    }

    section video {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      object-fit: cover;
      /* 使用 cover 填充视频 */
      filter: blur(35px);
      /* 添加模糊效果 */
    }

    section .sphere {
      position: relative;
      /* 相对定位 */
      width: 600px;
      height: 600px;
      border-radius: 50%;
      z-index: 10;
    }

    section .sphere::before {
      content: "";
      /* 伪元素内容为空 */
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      z-index: 100;
      border-radius: 50%;
      box-shadow: inset 0 100px 100px rgba(255, 255, 255, 0.5),
        /* 内阴影效果 */
        inset 0 -100px 100px rgba(0, 0, 0, 1),
        inset 0 0 100px rgba(0, 0, 0, 1);
    }

    section .sphere::after {
      content: "";
      position: absolute;
      top: 550px;
      left: -50px;
      width: 700px;
      height: 100px;
      z-index: -1;
      border-radius: 50%;
      background: black;
      background: radial-gradient(black, transparent, transparent);
      /* 底部渐变效果 */
    }

    section .sphere video {
      width: 100%;
      height: 100%;
      position: absolute;
      top: 0;
      left: 0;
      object-fit: cover;
      border-radius: 50%;
      filter: blur(0);
      /* 取消模糊效果 */
    }

    section .controls {
      /* background-color: aqua; */
      position: absolute;
      bottom: 100px;
      left: 50%;
      transform: translateX(-50%);
      display: flex;
      align-items: center;
    }

    section .controls button {
      background: none;
      border: none;
      outline: none;
      cursor: pointer;
      color: white;
      font-size: 20px;
      margin-right: 10px;
      font-family: 'Times New Roman', Times, serif;
    }

    section .controls input[type="range"] {
      width: 800px;
      margin-right: 10px;
    }

    section .controls span {
      color: white;
      font-size: 18px;
      font-family: 'Times New Roman', Times, serif;
    }
  </style>
</head>

<body>
  <section>
    <video id="backgroundVideo" src="../Videos/1-“挑 战 B 站 画 质 上 限”-4K 超清-AVC.mp4"></video>
    <div class="sphere">
      <video id="sphereVideo" src="../Videos/1-“挑 战 B 站 画 质 上 限”-4K 超清-AVC.mp4"></video>
    </div>
    <div class="controls">
      <button id="playPauseButton">播放</button>
      <input type="range" id="progressBar" min="0" step="0.001">
      <span id="currentTime">00:00</span>&nbsp;
      <span>/</span>&nbsp;
      <span id="duration">00:00</span>
    </div>
  </section>

  <script>
    // 等待文档加载完成后执行
    document.addEventListener("DOMContentLoaded", function () {
      // 获取视频元素和控制按钮
      var backgroundVideo = document.getElementById("backgroundVideo"); // 背景视频元素
      var sphereVideo = document.getElementById("sphereVideo"); // 球形视频元素
      var playPauseButton = document.getElementById("playPauseButton"); // 播放/暂停按钮
      var progressBar = document.getElementById("progressBar"); // 进度条
      var currentTime = document.getElementById("currentTime"); // 当前时间
      var duration = document.getElementById("duration"); // 视频总时长

      // 初始状态下暂停视频
      backgroundVideo.pause();
      sphereVideo.pause();

      // 设置进度条初始值为0
      progressBar.value = 0;

      // // 在视频加载完成后获取最后一帧的画面并显示在视频元素上
      // backgroundVideo.addEventListener("loadeddata", function () {
      //   backgroundVideo.currentTime = backgroundVideo.duration; // 将视频播放位置设置为最后一帧
      //   backgroundVideo.pause(); // 暂停视频
      //   sphereVideo.currentTime = backgroundVideo.duration; // 将球形视频播放位置设置为最后一帧
      //   sphereVideo.pause(); // 暂停球形视频
      // });

      // 播放/暂停按钮点击事件
      playPauseButton.addEventListener("click", function () {
        if (backgroundVideo.paused) {
          // 如果背景视频暂停,则播放背景视频和球形视频
          backgroundVideo.play();
          sphereVideo.play();
          playPauseButton.textContent = "暂停"; // 更新按钮文本为"暂停"
        } else {
          // 如果背景视频正在播放,则暂停背景视频和球形视频
          backgroundVideo.pause();
          sphereVideo.pause();
          playPauseButton.textContent = "播放"; // 更新按钮文本为"播放"
        }
      });

      // 更新进度条和当前时间
      backgroundVideo.addEventListener("timeupdate", function () {
        // 计算视频播放进度(百分比)
        var progress = (backgroundVideo.currentTime / backgroundVideo.duration) * 100;
        progressBar.value = progress; // 更新进度条的值
        currentTime.textContent = formatTime(backgroundVideo.currentTime); // 更新当前时间显示
      });

      // 改变视频播放位置
      progressBar.addEventListener("input", function () {
        // 计算进度条对应的视频播放时间
        var progressTime = (progressBar.value / 100) * backgroundVideo.duration;
        // 设置背景视频和球形视频的当前播放时间
        backgroundVideo.currentTime = progressTime;
        sphereVideo.currentTime = progressTime;
        currentTime.textContent = formatTime(progressTime); // 更新当前时间显示
      });

      // 将时间格式化为 mm:ss 格式
      function formatTime(time) {
        var minutes = Math.floor(time / 60); // 计算分钟数
        var seconds = Math.floor(time % 60); // 计算秒数
        // 格式化为 mm:ss 格式,并在分钟数或秒数小于10时添加前导零
        return (minutes < 10 ? "0" : "") + minutes + ":" + (seconds < 10 ? "0" : "") + seconds;
      }

      // 更新视频总时长
      backgroundVideo.addEventListener("loadedmetadata", function () {
        duration.textContent = formatTime(backgroundVideo.duration); // 更新视频总时长显示
      });

      // 监听视频播放完毕事件
      backgroundVideo.addEventListener("ended", function () {
        // 在视频播放完毕后执行的操作
        playPauseButton.textContent = "播放"; // 更新按钮文本为"播放"
        progressBar.value = 0; // 重置进度条的值
        currentTime.textContent = "00:00"; // 重置当前时间显示
      });
    });
  </script>
</body>

</html>

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

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

相关文章

mysql的备份和

备份&#xff1a;完全备份 增量备份 完全备份&#xff1a;将整个数据库完整的进行备份 增量备份&#xff1a;在完全备份的基础之上&#xff0c;对后续新增的内容进行备份 备份的需求 1、在生产环境中&#xff0c;数据的安全至关重要&#xff0c;任何数据的都可能产生非常严重…

网络溯源-PSEXEC-简单

题干&#xff1a; 我们的入侵检测系统&#xff08;IDS&#xff09;已发出警报&#xff0c;指示涉及使用PsExec的可疑横向移动活动。为了有效响应此事件&#xff0c;您作为 SOC 分析师的角色是分析存储在 PCAP 文件中的捕获网络流量。 攻击者首次攻击成功的计算机源网络IP地址…

『亚马逊云科技产品测评』活动征文|如何搭建低成本亚马逊aws云服务器

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 0. 环境 win10 火狐浏览器 1. 登录 https://aws.amazon.com/cn/ ->…

SAP ABAP BDC录屏 保姆级教程

ME47修改报价请求中项目的信息记录更新这个字段. 1.输入TCODE: SHDB 2.点击创建记录 3.输入记录(也就是一个名称)和事务码(就是你想录的那个tcode的事务码),最后点击开始,之后就会跳到该事务码的初始屏幕上去了,然后就按照正常去操作,尽量一步到位不要有多余的操作!! 4.我…

PackageManagerService 深入理解Android 卷2 学习笔记

PackageManagerService是Android核心服务之一&#xff0c;负责系统中Package的管理&#xff0c;应用程序的安装、卸载、信息查询等。 1、初识PMS PMS由SystemServer创建&#xff1a; SystemServer的run函数调用startBootstrapServices&#xff0c;startBootstrapServices调用…

开发抖音群控软件的费用在什么范围内?

随着抖音等社交媒体的普及&#xff0c;越来越多的企业和个人开始注重在社交媒体平台上的营销和推广&#xff0c;而开发一款抖音群控软件&#xff0c;可以帮助用户更好地管理和运营其在抖音平台上的账号&#xff0c;提高账号的曝光率和关注度&#xff0c;那么&#xff0c;开发一…

速卖通发布公告,屏蔽对欧洲资质和标签不合规商品——站斧浏览器

近日全球速卖通发布关于公告&#xff0c;根据欧盟法规要求&#xff0c;商品卖向欧盟和英国市场需要满足欧盟商品资质合规的要求。对于资质和标签不满足合规要求的商品&#xff0c;平台已经陆续开始执行屏蔽管控&#xff0c;卖家为了保障欧盟市场的正常售卖&#xff0c;需要尽快…

【计算机网络】数据链路层-MAC和ARP协议

文章目录 1. 认识以太网2. MAC协议MAC帧的格式MAC地址和IP地址的区别MTU 3. 局域网通信原理碰撞检测和避免 4. ARP协议ARP数据报的格式ARP缓存 1. 认识以太网 网络层解决的是跨网络点到点传输的问题&#xff0c;数据链路层解决的是同一网络中的通信。 数据链路层负责在同一局域…

Power Apps-1.1通过函数修改组件属性

修改字体颜色 1.点击想要根据条件变化的文本组件&#xff0c;出现右侧边栏后&#xff0c;点击下方的“颜色”标题 2.修改函数设置 If(判断条件,判断结果为true时执行的颜色,判断结果为false时执行的颜色) 颜色代码可参考&#xff1a; Power Apps 中的颜色和边框属性 - Power…

单点登录与OAuth2.0 的区别

前言&#xff1a;SSO是Single Sign On(单点登录)的缩写&#xff0c;OAuth是Open Authority&#xff08;开放授权&#xff09;&#xff0c;这两者都是使用令牌的方式来代替用户密码访问应用。流程上来说他们非常相似&#xff0c;但概念上又十分不同。很多人会将其混为一谈&#…

操作系统·操作系统引论

1.1 操作系统的目标和作用 1.目前常见操作系统&#xff1a; 微软&#xff1a;Windows系列&#xff08;以前MS-DOS&#xff09; UNIX&#xff1a;Solaris, AIX, HP UX, SVR4, BSD, ULTRIX 自由软件&#xff1a;Linux, freeBSD, Minix IBM: AIX, zOS(OS/390), OS/2, OS/400, PC…

JAVA客户端使用账号密码调用influxdb2报错:{“code“:“unauthorized“,“message“:“Unauthorized“}

问题&#xff1a;JAVA客户端访问influxdb2报错 说明&#xff1a;当前influxdb版本&#xff1a;2.6.1 使用依赖&#xff1a; <dependency><groupId>org.influxdb</groupId><artifactId>influxdb-java</artifactId><version>2.10</vers…

提升企业知名度必备!媒体发稿的5个关键要点

近年来&#xff0c;媒体发稿成为企业提升知名度和品牌形象的重要手段。无论是大型企业还是中小企业&#xff0c;都倾向于选择媒体发稿来扩大影响力。然而&#xff0c;很多企业在发稿后并没有如预期般获得良好效果。这可能是因为他们没有掌握正确的技巧。那么&#xff0c;在媒体…

带你一文搞懂 Linux 网络 Phy 驱动

概述 上图来自 瑞昱半导体 (RealTek) 的 RTL8201F 系列网卡 PHY 芯片手册。按OSI 7层网络模型划分&#xff0c;网卡PHY 芯片(图中的RTL8201F)位于物理层&#xff0c;对应的软件层就是本文讨论的 PHY 驱动层&#xff1b;而 MAC 位于 数据链路层&#xff0c;也是通常软件上所说的…

【黑马程序员】Git 的概述

文章目录 前言一、概述1. 开发中的实际场景2. 版本控制器的方式3. SVN4. Git5. Git 工作流程图 总结 前言 跟着B站的黑马程序员学习 Git&#xff0c;语言为java&#xff0c;目前是第一个内容 课程传送门&#xff1a;Git 的概述 一、概述 1. 开发中的实际场景 场景一&#xf…

高效解决香港服务器负载过高的方法

​  当我们在使用香港服务器时&#xff0c;有时会遇到服务器负载过高的问题。这会导致网站加载速度变慢甚至无法正常使用。为了解决这个问题&#xff0c;我们需要采取一些高效的方法来提升服务器的负载能力。 1.考虑对服务器进行升级维护。通过增加硬件资源&#xff0c;如CPU…

综合布线可视化管理系统价值分析

传统综合布线管理&#xff0c;全部依靠手工登记&#xff0c;利用标签标示线缆&#xff0c;利用文档资料记录链路的连接和变更&#xff0c;高度依赖网络管理员的管理能力&#xff0c;维护效率低下。同时&#xff0c;网络接入故障和非法接入难以及时发现。在以往的文章中小编一直…

灵活调整宣传策略,媒体发稿和新闻发布的优势所在

企业在当今信息爆炸的时代&#xff0c;要想在市场竞争中脱颖而出&#xff0c;提高公信力是至关重要的。而媒体发稿和新闻发布是提升企业公信力的重要手段之一。下面将从门户网站的权威展示、搜索引擎排名的提升、内容的持续稳定有效性、内容的可改性以及协助增加网站流量等方面…

深度剖析.locked1勒索病毒的威胁:如何保护您的数据

导言&#xff1a; .locked1勒索病毒是当今数字时代中最神秘的网络威胁之一。这种恶意软件以其毫不留情的数据加密技术而著称&#xff0c;常通过欺诈邮件附件、恶意链接或漏洞利用等方式传播。本文91数据恢复将深入探讨.locked1勒索病毒的运作方式&#xff0c;提供数据恢复的方…

北京陪诊小程序|陪诊系统开发|陪诊小程序未来发展不可小觑

近几年随着互联网快速发展&#xff0c;各行业领域都比较注重线上服务系统&#xff0c;通过陪诊小程序开发可以满足更多用户使用需求&#xff0c;同时还能提高用户使用体验。现在陪诊类的软件应用得到全面推广&#xff0c;在医疗行业当中陪诊小程序更贴近用户生活&#xff0c;可…