jquery+css3实现网页背景花瓣随机飘落特效


Posted in Javascript onAugust 17, 2015

飘花效果的实现——效果图:

jquery+css3实现网页背景花瓣随机飘落特效

查看演示  源码下载

需求:

一个jquery,,,这个看标题么就知道了

jQuery Transit还有这个东西

 http://github.com/rstacruz/jquery.transit

jquery对一些效果的扩展

飘花的效果稍微复杂一点,有一定量的JavaScript代码,通过JS+CSS3的组合实现的。观察右边效果,可以大致分解飘花的实现

      飘花比人物的层级都高
      飘花数量非常多
      飘花会有一定的轨迹运动
      飘花带有渐变的效果
      飘花带有旋转的效果
      飘花落到地面会消失

这里采用的JS+CSS3的结合实现,CSS3实现旋转部分,首先从布局上来说,飘花是要比所有内部元素层级都要高,所以布局上是要与页面li平级才可以

实现原理:

通过定时器调用JS代码不断的动态创建雪花节点,随机选择一个图片作为其背景,赋予三个初始的样式属性top,left与opacity,通过transition动画过度的方式执行这3个属性的动画变化。整个原理其实也是很简单的,主要涉及了一些细节的问题:例如元素的创建、图片的随机、开始的left与opacity的随机处理、最终值的计算等等

执行的流程:

getImagesName随机6张图片,snowflakeURl定义一个地址的范围

createSnowBox创建雪花元素的节点,并且增加一个snowRoll的样式,也就是旋转的关键帧实现

定时器设置200ms不断的生成雪花对象,计算出3个属性的初始值,通过createSnowBox创建雪花元素,并且附上初始值,然后执行transition附上最终值,执行动画

动画结束后执行$(this).remove()  删除这个对象

然后精简一下代码,因为我只要飘花效果

<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实现网页背景花瓣随机飘落特效,希望大家喜欢。

Javascript 相关文章推荐
用javascript实现的激活输入框后隐藏初始内容
Jun 29 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
Apr 02 Javascript
怎么清空javascript数组
May 11 Javascript
jquery实现点击消失的代码
Mar 03 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
Apr 07 Javascript
JavaScript数组的定义及数字操作技巧
Jun 06 Javascript
Bootstrap学习笔记之css样式设计(2)
Jun 07 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
Nov 02 Javascript
js循环map 获取所有的key和value的实现代码(json)
May 09 Javascript
JavaScript JSON数据处理全集(小结)
Aug 15 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
Nov 01 Javascript
Java无向树分析 实现最小高度树
Apr 09 Javascript
js简单实现Select互换数据的方法
Aug 17 #Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
Aug 17 #Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
Aug 17 #Javascript
D3.js中data(), enter() 和 exit()的问题详解
Aug 17 #Javascript
关于js里的this关键字的理解
Aug 17 #Javascript
Nginx上传文件全部缓存解决方案
Aug 17 #Javascript
jQuery幻灯片带缩略图轮播效果代码分享
Aug 17 #Javascript
You might like
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
PHP的APC模块实现上传进度条
2015/10/27 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
提高网站信任度的技巧
2008/10/17 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
JQuery在循环中绑定事件的问题详解
2016/06/02 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
[19:24]DOTA2客户端使用指南 一分钟快速设置轻松超神
2013/09/24 DOTA
在Pandas中给多层索引降级的方法
2018/11/16 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
python中怎么表示空值
2020/06/19 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
如何在Canvas中添加事件的方法示例
2019/05/21 HTML / CSS
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
意大利男装网店:Vrients
2019/05/02 全球购物
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
运行时异常与一般异常有何异同?
2014/01/05 面试题
教育实习生的自我评价分享
2013/11/21 职场文书
《商鞅南门立木》教学反思
2014/02/16 职场文书
中学生清明节演讲稿
2015/03/18 职场文书
Vue3 Composition API的使用简介
2021/03/29 Vue.js
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android