HTML5白云飘飘动态效果教程

HTML5白云飘飘动态效果教程

这里写目录标题

  • HTML5白云飘飘动态效果教程
    • 效果介绍
    • 实现步骤
      • 步骤一:创建HTML结构
      • 步骤二:设计CSS样式
      • 步骤三:添加JavaScript交互
    • 代码解析
      • HTML结构解析
      • CSS样式解析
      • JavaScript功能解析
    • 自定义调整
    • 总结

效果介绍

本教程将教你如何使用纯HTML5、CSS3和JavaScript创建一个优美的白云飘飘动态效果。最终效果包括:

  • 多朵白云从左向右飘动
  • 云朵大小、位置、速度和透明度各不相同
  • 动态生成随机云朵
  • 鼠标互动效果(移动鼠标时云朵会轻微跟随)
  • 在这里插入图片描述

实现步骤

步骤一:创建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="style.css">
</head>
<body><div class="sky"><div class="cloud cloud1"></div><div class="cloud cloud2"></div><div class="cloud cloud3"></div><div class="cloud cloud4"></div><div class="cloud cloud5"></div></div><script src="script.js"></script>
</body>
</html>

这里我们创建了一个名为sky的容器,内部放置了5个基础云朵元素。

步骤二:设计CSS样式

接下来,创建style.css文件,设计云朵的样式和动画效果:

* {margin: 0;padding: 0;box-sizing: border-box;
}body {overflow: hidden;background: linear-gradient(to bottom, #87CEEB, #E0F7FF);height: 100vh;width: 100%;
}.sky {width: 100%;height: 100%;position: relative;
}/* 云朵基本样式 */
.cloud {position: absolute;background: white;border-radius: 50px;filter: drop-shadow(3px 5px 5px rgba(0, 0, 0, 0.1));
}/* 使用伪元素创建云朵的圆形部分 */
.cloud:before, .cloud:after {content: '';position: absolute;background: white;border-radius: 50%;
}.cloud:before {width: 50px;height: 50px;top: -30px;left: 15px;
}.cloud:after {width: 70px;height: 70px;top: -35px;right: 15px;
}/* 各个云朵的特定样式 */
.cloud1 {width: 150px;height: 60px;top: 10%;left: -150px;opacity: 0.9;animation: moveCloud 35s linear infinite;
}.cloud2 {width: 120px;height: 50px;top: 25%;left: -120px;opacity: 0.85;animation: moveCloud 45s linear infinite;animation-delay: 5s;
}.cloud3 {width: 180px;height: 70px;top: 40%;left: -180px;opacity: 0.8;animation: moveCloud 40s linear infinite;animation-delay: 10s;
}.cloud4 {width: 100px;height: 40px;top: 60%;left: -100px;opacity: 0.75;animation: moveCloud 50s linear infinite;animation-delay: 15s;
}.cloud5 {width: 160px;height: 65px;top: 75%;left: -160px;opacity: 0.7;animation: moveCloud 38s linear infinite;animation-delay: 20s;
}/* 定义云朵移动动画 */
@keyframes moveCloud {from {left: -300px;}to {left: 100%;}
}

步骤三:添加JavaScript交互

最后,创建script.js文件,添加动态效果和交互功能:

document.addEventListener('DOMContentLoaded', function() {const sky = document.querySelector('.sky');// 随机创建更多云朵function createClouds() {const extraClouds = 10; // 额外创建的云朵数量for (let i = 0; i < extraClouds; i++) {const cloud = document.createElement('div');cloud.classList.add('cloud');// 随机大小const size = Math.random() * 100 + 80;cloud.style.width = `${size}px`;cloud.style.height = `${size / 3}px`;// 随机位置const top = Math.random() * 90; // 0-90% 的高度cloud.style.top = `${top}%`;// 随机透明度const opacity = Math.random() * 0.4 + 0.5; // 0.5-0.9cloud.style.opacity = opacity;// 随机速度const duration = Math.random() * 30 + 30; // 30-60秒cloud.style.animation = `moveCloud ${duration}s linear infinite`;// 随机延迟const delay = Math.random() * 30;cloud.style.animationDelay = `${delay}s`;// 随机初始位置const startPosition = Math.random() * 100;cloud.style.left = `${startPosition}%`;// 添加伪元素样式cloud.style.position = 'absolute';cloud.style.background = 'white';cloud.style.borderRadius = '50px';cloud.style.filter = 'drop-shadow(3px 5px 5px rgba(0, 0, 0, 0.1))';sky.appendChild(cloud);}}// 当页面加载完成后创建云朵createClouds();// 对云朵添加鼠标互动效果document.addEventListener('mousemove', function(e) {// 计算鼠标在页面上的相对位置(0-1)const mouseX = e.clientX / window.innerWidth;const mouseY = e.clientY / window.innerHeight;// 获取所有云朵const clouds = document.querySelectorAll('.cloud');// 为每个云朵添加轻微移动效果clouds.forEach(cloud => {const moveX = (mouseX - 0.5) * 10; // -5 到 5 像素的水平移动const moveY = (mouseY - 0.5) * 5;  // -2.5 到 2.5 像素的垂直移动// 应用变换cloud.style.transform = `translate(${moveX}px, ${moveY}px)`;});});
});

代码解析

HTML结构解析

  • <div class="sky"> 作为整个场景的容器
  • 内部包含5个基础云朵,每个云朵都有独特的类名(cloud1-cloud5)

CSS样式解析

  1. 云朵造型

    • 使用圆角矩形作为云朵的主体
    • 通过:before:after伪元素添加两个圆形,形成完整的云朵形状
    • 使用filter: drop-shadow添加轻微阴影,增强立体感
  2. 动画效果

    • 使用@keyframes moveCloud定义云朵从左到右的移动轨迹
    • 每个云朵设置不同的动画持续时间和延迟,使移动看起来更自然
    • 不同云朵设置不同的透明度,模拟远近感

JavaScript功能解析

  1. 动态生成云朵

    • createClouds()函数随机生成额外的云朵
    • 每个云朵的大小、位置、透明度、速度和延迟都是随机的
    • 这使得整个场景更加丰富和自然
  2. 鼠标交互

    • 监听mousemove事件,获取鼠标位置
    • 根据鼠标位置计算云朵的轻微位移
    • 使用transform: translate()应用位移效果

自定义调整

你可以根据需要调整以下参数来改变效果:

  1. 背景颜色

    body {background: linear-gradient(to bottom, #新颜色1, #新颜色2);
    }
    
  2. 云朵数量

    const extraClouds = 20; // 增加或减少云朵数量
    
  3. 云朵速度

    .cloud1 {animation: moveCloud 20s linear infinite; // 减小数值加快速度
    }
    
  4. 鼠标互动灵敏度

    const moveX = (mouseX - 0.5) * 20; // 增大数值增强互动效果
    const moveY = (mouseY - 0.5) * 10;
    

总结

通过这个教程,你学会了如何使用HTML5、CSS3和JavaScript创建一个白云飘飘的动态效果。这个效果可以应用于各种网页场景,如:

  • 网站背景
  • 登录页面
  • 天气相关应用
  • 儿童教育网站
  • 休闲游戏背景

希望这个教程对你有所帮助!你可以根据自己的需求进一步扩展和优化这个效果。

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

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

相关文章

tcp高难度问题

以下是针对这些问题&#xff0c;在面试场景下&#xff0c;既保证理论扎实、逻辑清晰&#xff0c;又具备交流延展性的回答思路与内容&#xff0c;可根据实际面试节奏和面试官反馈灵活调整展开&#xff1a; 1. 客户端端口号如何确定的&#xff1f; 面试官您好&#xff0c;客户端…

广东省省考备考(第二十八天6.13)—资料分析(第二节课)

基期与现期 官方定义&#xff1a;作为对比参照的是基期&#xff0c;而相对于基期比较的是现期 通俗说法&#xff1a;时间靠前的为基期&#xff0c;时间靠后的为现期 增长量与增长率 增长量用来表述基期量与现期量变化的绝对量&#xff1b; 增长率用来表述基期量与现期量变化…

pytorch 中前向传播和后向传播的自定义函数

系列文章目录 文章目录 系列文章目录一、torch.autograd.function代码实例 在开始正文之前&#xff0c;请各位姥爷动动手指&#xff0c;给小店增加一点访问量吧&#xff0c;点击小店&#xff0c;同时希望我的文章对你的学习有所帮助。本文也很简单&#xff0c;主要讲解pytorch的…

【项目实训#08】HarmonyOS知识图谱前端可视化实现

【项目实训#08】HarmonyOS知识图谱前端可视化实现 文章目录 【项目实训#08】HarmonyOS知识图谱前端可视化实现一、背景简介二、技术方案与架构设计2.1 技术选型2.2 组件架构设计 三、知识图谱可视化组件实现3.1 KGResultTab组件设计组件模板结构不同状态的处理用户交互控制节点…

【软件开发】什么是DSL

什么是DSL DSL&#xff08;Domain-Specific Language&#xff0c;领域特定语言&#xff09;是一种为特定领域或任务设计的编程语言&#xff0c;目的在于提高该领域中的表达能力与开发效率。 1 在脚本语言中的 DSL 是什么&#xff1f; 在脚本语言&#xff08;如 Python、Lua、…

JasperReport生成PDF/A类型文档

当JasperReport导出的文档为PDF/A模式时&#xff0c;该PDF为只读可以防止被修改。 设置导出参数 JRPdfExporter exporter new JRPdfExporter();exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrints));exporter.setExporterOutput(new SimpleOutputStre…

微信小程序使用画布实现飘落泡泡功能

微信小程序使用画布实现飘落泡泡功能&#xff1a;从组件封装到页面调用的完整实践 先看示例截图&#xff1a; 一、背景与技术选型 在微信小程序中实现类似于飘落的泡泡或者樱花飘落的功能&#xff0c;一般主要有 Canvas 和图片两种方案&#xff1a; &#xff08;1&#xff…

使用STM32设置GPIO中断

使用S™ 32设置GPIO中断 中断示例按键中断实例设计&#xff1a;EXTI0和EXTI9硬件连接分析STM32代码实现代码说明 中断示例 设计一个按键中断的实例。设置两个中断&#xff1a;EXTI0、EXTI9&#xff0c; 在EXTI9的中断服务之程序中实现LED灯的控制 按键中断实例设计&#xff…

解决在微信小程序中view组件下的text和images设置了样式display: flex; align-items: center;对不齐

原始代码的问题 <view style"display: flex; align-items: center;"><text style"line-height: 1;">全国</text><image src"/images/xia.png" style"height: 20rpx; width: 20rpx; display: block;"></im…

归并排序详解:优雅的分治艺术

什么&#xff1f;归并排序&#xff1f;这让博主想起了大学那会被《数据结构与算法》支配的恐惧… 哈哈言归正传&#xff0c;一直想对算法做一个专栏&#xff0c;因为其实工作中很少很少有机会用到算法&#xff0c;倒是很多工具方法底层会使用&#xff0c;工作被各种需求业务“折…

新零售视域下实体与虚拟店融合的技术逻辑与商业模式创新——基于开源AI智能名片与链动2+1模式的S2B2C生态构建

摘要&#xff1a;新零售的核心在于打破线上线下边界&#xff0c;构建“人、货、场”的全场景融合生态。本文提出&#xff0c;实体线下店与虚拟店的协同发展是新零售的重要演进方向&#xff0c;其底层逻辑在于满足消费者作为“现实人”的体验需求与“虚拟人”的效率需求。通过引…

可视化图解算法51:寻找第K大(数组中的第K个最大的元素)

牛客网 面试笔试 TOP101 | LeetCode 215. 数组中的第K个最大元素 1. 题目 描述 有一个整数数组&#xff0c;请你找出数组中第 k 大的数。 给定一个整数数组 a ,同时给定它的大小n和要找的 k &#xff0c;请返回第 k 大的数(包括重复的元素&#xff0c;不用去重)&…

DataWhale-零基础网络爬虫技术(一)

课程链接先给各位 ↓↓↓ &#xff08;点击即可食用.QAQ Datawhale-学用 AI,从此开始 一、引言 还是在笔记的开始&#xff0c;唠唠一些自己的故事 十年前第一次接触网络&#xff0c;也可以说是第一次接触计算机的时候&#xff0c;那时候还是在中学阶段&#xff0c;那时候大…

Linux02

目录 linux常用命令 用户和权限 压缩和解压缩 其他相关命令 Linux中安装常用软件 1.1. jdk的安装 1.1.1. 卸载linux中自带的open-jdk 1.1.2. 把安装包上传到 linux上 1.1.3. 解压安装包 1.1.4. 配置环境变量 1.1.5 验证环境变量 1.3 安装mysql 1.3.1. 检查依赖 1.…

JavaSE超详细笔记-网络编程篇-基于黑马

1. 什么是网络编程【理解】 1.1 概念 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输。 应用场景: 即时通信、网游对战、金融证券、国际贸易、邮件、等等。 不管是什么场景&#xff0c;都是计算机跟计算机之间通过网络进行数据传输Java中可以使…

时序数据库Influxdb3 core安装

本文介绍时序数据库Influxdb3 core(开源版本)的安装和简单使用以及调优参数的介绍。 预期&#xff1a; 安装时序数据库Influxdb3 core 创建数据库mydb 写入数据&#xff1b; 使用influxdb3-cli 和 grafana2种方式查询写入的数据 前期准备&#xff1a; linux服务器(本文服…

区间合并:区间合并问题

区间合并&#xff1a;区间合并问题 区间合并 www.acwing.com/problem/content/805/ 按区间的左端点排序 扫描整个区间&#xff0c;在这过程中把可能有交点的区间合并 全包含&#xff1a;不做改动相交&#xff1a;right 后移相离&#xff1a;更新至下一个维护区间 import j…

中国古代数学符号的演进 | 算筹 / 符号 / 算法

注&#xff1a;本文为“中国古代数学符号”相关合辑。 图片清晰度受引文原图所限。 略作重排&#xff0c;未整理去重。 如有内容异常&#xff0c;请看原文。 这个中国古代的数学瑰宝&#xff0c;到底厉害在哪&#xff1f; 原创 朱一文 科普中国 2024 年 07 月 31 日 15:30 北…

XMLDecoder、LDAP 注入与修复

问题&#xff1a;XMLDecoder注入 针对 xml 解码器的注入攻击 反序列化用户控制的 XML &#xff0c;程序没有进行验证&#xff0c; 会让攻击者有机会在服务器上执行恶意代 码。 例&#xff1a;下面代码片段中&#xff0c; XMLDecoder 处理不可信的输入。 ... XMLDecode…

Unity 对象层级处理小结

一.第一优先级Camera Culling Mask属性指定Camera显示的Layer,可以多选 Depth:Depth大的Camera显示的Layer显示在前面 二.避免使用PositionZ调整遮挡关系 在 2D 游戏中,虽然可以通过 Z 轴来调整显示顺序,但这与 2D 游戏的设计理念不符。在可以控制显示层级的多个要素或方…