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 相关文章推荐
jquery实现的超出屏幕时把固定层变为定位层的代码
Feb 23 Javascript
javascript 获取函数形参个数
Jul 31 Javascript
AngularJS基础知识
Dec 21 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
Apr 07 Javascript
JS打印组合功能
Aug 04 Javascript
使用微信小程序开发前端【快速入门】
Dec 05 Javascript
如何使用Bootstrap创建表单
Mar 29 Javascript
JS实现图片预加载之无序预加载功能代码
May 12 Javascript
AngularJS日程表案例详解
Aug 15 Javascript
详解angular2 控制视图的封装模式
Dec 27 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
Apr 29 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
Sep 16 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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
php获取系统变量方法小结
2015/05/29 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
图解Javascript——作用域、作用域链、闭包
2017/03/21 Javascript
nodejs 搭建简易服务器的图文教程(推荐)
2017/07/18 NodeJs
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
初探js和简单隐藏效果的实例
2017/11/23 Javascript
理解 JavaScript EventEmitter
2018/03/29 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
Python探索之pLSA实现代码
2017/10/25 Python
超简单的Python HTTP服务
2019/07/22 Python
python中的global关键字的使用方法
2019/08/20 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
经济管理毕业生求职信
2014/03/15 职场文书
人事行政经理岗位职责
2014/06/18 职场文书
学校捐书倡议书
2015/04/27 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书