jQuery与CSS3结合实现网页背景花瓣随机飘落特效
本文介绍如何利用jQuery和CSS3技术实现网页背景花瓣随机飘落的视觉效果。通过动态创建DOM元素、随机选取图片、计算初始与结束坐标,并结合CSS3的旋转与透明度动画,最终在动画结束后移除元素,确保页面性能。
飘花效果实现概述
飘花效果的实现——效果图:

查看演示 源码下载
需求:
需要引入一个jQuery库,具体版本可根据项目需求选择。
此外,还需要使用jQuery Transit插件以支持更流畅的过渡动画。
该插件的GitHub地址为:http://github.com/rstacruz/jquery.transit
jQuery Transit是对jQuery效果功能的扩展,能简化CSS3动画的调用。
飘花效果相对复杂,需要编写一定数量的JavaScript代码,并通过JavaScript与CSS3组合来实现。观察右侧演示效果,可以将飘花的实现逻辑大致分解为以下几个部分。
飘花的层级需高于人物及其他内容元素;飘花的数量设置较多;飘花需具备特定的运动轨迹;飘花带有透明度渐变效果;飘花带有旋转效果;飘花落到地面后需消失。
本方案采用JavaScript与CSS3结合的方式实现。其中,CSS3主要负责处理旋转部分。从布局角度来看,飘花元素的层级必须高于所有内部元素,因此在HTML结构中,飘花容器需与页面中的li元素处于同一层级。
实现原理与流程
实现原理:
核心思路是通过定时器调用JavaScript代码,不断动态创建雪花(或花瓣)节点。程序会随机选择一张图片作为其背景,并赋予三个初始样式属性:top(垂直位置)、left(水平位置)和opacity(透明度)。随后,通过transition动画过渡的方式执行这三个属性的变化,从而完成动画。整个原理较为简单,主要涉及一些细节处理,例如元素的创建、图片的随机选取、初始left与opacity的随机值设定以及最终结束值的计算等。
执行的流程:
首先通过getImagesName函数随机获取6张图片,snowflakeURl变量定义了一组图片地址的范围。
接着,createSnowBox函数用于创建雪花元素的节点,并为其添加一个snowRoll样式类,该类定义了旋转的关键帧动画。
设置定时器,每200ms生成一个雪花对象。程序计算出三个属性的初始值,通过createSnowBox创建雪花元素并赋予初始值,然后执行transition动画赋予最终值,从而触发动画效果。
当动画执行结束后,执行$(this).remove()语句删除该DOM对象,以释放内存。
代码实现细节
以下是对代码的精简版本,仅保留实现飘花效果的核心逻辑。
<div id='content'>
<!-- 飘花 -->
<div id="snowflake"></div>
</div>
首先需要获取外部容器#content的宽高尺寸,以确定飘花的活动范围。
随后在#snowflake容器内部执行具体的飘花效果逻辑。
#content { width: 100%; height: 100%; top: 42px;
overflow: hidden; position: absolute; }
CSS样式代码如下,其中top设置为42px是为了适配导航栏的高度。
#snowflake { width: 100%; height: 100%; position: absolute; top: 0; left: 0; overflow: hidden; }
.snowRoll { position: absolute; opacity: 0; -webkit-animation-name: mysnow; -webkit-animation-duration: 20s; -moz-animation-name: mysnow; -moz-animation-duration: 20s; height: 80px; }
@-webkit-keyframes mysnow { 0% {
bottom: 100%;
}
50% {
-webkit-transform: rotate(1080deg);
}
100% {
-webkit-transform: rotate(0deg) translate3d(50px, 50px, 50px);
}
}
@-moz-keyframes mysnow { 0% {
bottom: 100%;
}
50% {
-moz-transform: rotate(1080deg);
}
100% {
-moz-transform: rotate(0deg) translate3d(50px, 50px, 50px);
}
}
以下是为飘花添加旋转等CSS3特效的关键代码。
<script type="text/javascript">
$(function() {
var snowflakeURl = [
'http://images.cnblogs.com/cnblogs_com/LoveOrHate/723567/o_1.png',
'http://images.cnblogs.com/cnblogs_com/LoveOrHate/723567/o_2.png',
'http://images.cnblogs.com/cnblogs_com/LoveOrHate/723567/o_3.png',
'http://images.cnblogs.com/cnblogs_com/LoveOrHate/723567/o_4.png',
'http://images.cnblogs.com/cnblogs_com/LoveOrHate/723567/o_5.png',
'http://images.cnblogs.com/cnblogs_com/LoveOrHate/723567/o_6.png'
] //js设置数组存储6张花瓣的图片
var container = $("#content");
visualWidth = container.width();
visualHeight = container.height();
//获取content的宽高
///////
//飘雪花 //
///////
function snowflake() {
// 雪花容器
var $flakeContainer = $('#snowflake');
// 随机六张图
function getImagesName() {
return snowflakeURl[[Math.floor(Math.random() * 6)]];
}
// 创建一个雪花元素
function createSnowBox() {
var url = getImagesName();
return $('<div class="snowbox" />').css({
'width': 41,
'height': 41,
'position': 'absolute',
'backgroundSize': 'cover',
'zIndex': 100000,
'top': '-41px',
'backgroundImage': 'url(' + url + ')'
}).addClass('snowRoll');
}
// 开始飘花
setInterval(function() {
// 运动的轨迹
var startPositionLeft = Math.random() * visualWidth - 100,
startOpacity = 1,
endPositionTop = visualHeight - 40,
endPositionLeft = startPositionLeft - 100 + Math.random() * 500,
duration = visualHeight * 10 + Math.random() * 5000;
// 随机透明度,不小于0.5
var randomStart = Math.random();
randomStart = randomStart < 0.5 ? startOpacity : randomStart;
// 创建一个雪花
var $flake = createSnowBox();
// 设计起点位置
$flake.css({
left: startPositionLeft,
opacity : randomStart
});
// 加入到容器
$flakeContainer.append($flake);
// 开始执行动画
$flake.transition({
top: endPositionTop,
left: endPositionLeft,
opacity: 0.7
}, duration, 'ease-out', function() {
$(this).remove() //结束后删除
});
}, 200);
}
snowflake()
//执行函数
})
</script>
以上代码即为本文使用jQuery实现网页背景花瓣随机飘落特效的完整示例,希望对大家有所帮助。
网页开发三者分工:HTML结构、CSS样式与JavaScript交互怎么协作
2026-11-05 12:51:22
JS解析URL参数时怎么处理中文乱码和特殊字符
2026-11-05 12:47:23
js-cookie 存储 JSON 对象:自动序列化与反序列化技巧
2026-11-05 12:36:26
marked.js 快速上手:安装与基础 Markdown 转 HTML 示例
2026-11-05 09:32:53
Phaser.js 与 PixiJS、Cocos Creator 的技术选型对比
2026-11-05 08:36:30
