下雪了 javascript实现雪花飞舞


Posted in Javascript onAugust 02, 2020

本文实例为大家分享了雪花飞舞效果javascript实现,供大家参考,具体内容如下

原理:

1、js动态创建DIV,指定CLASS类设置不同的背景图样式显示不同的雪花效果。

2、js获取创建的DIV并改变其top属性值,当下落的高度大于屏幕高后删除该移动div

3、好像不够完善勿喷

效果预览:http://wjf444128852.github.io/demo02/snow/index.html

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>雪花飞舞</title>
 <link rel="stylesheet" href="css/index.css">
 <script src="js/move.js"></script>
</head>
<body>
 <div class="snow_parent" id="js_sonw">
 
 </div>
</body>
</html>

CSS代码

*{
 margin:0;
 padding:0;
 list-style: none;
 border: none;
}
body{
 width: 100%;
 height:600px;
 background:#000;
}
.snow_parent{
 position: relative;
 width: 100%;
 height:100%;
 overflow: hidden;
 margin: 0 auto;
}
.snow_parent div.parent{
 background-image: url(../img/snow.png);
 float: left;
 -webkit-transform: scale(.1);
 -moz-transform: scale(.1);
 -o-transform: scale(.1);
 -ms-transform: scale(.1);
 transform: scale(.1);
 position: absolute;
}
.snow_one{
 width: 180px;
 height: 180px;
 background-position:0 0;
 background-repeat: no-repeat;
 left:-70px;
 top: -95px;
}
.snow_two{
 width: 140px;
 height: 140px;
 background-position:-220px -18px;
 left:-30px;
 top: -75px;
}
.snow_three{
 width:150px;
 height: 150px;
 background-position:-400px -15px;
 left:-20px;
 top: -80px;
}
.snow_four{
 width: 160px;
 height: 160px;
 background-position:-10px -206px; 
}
.snow_four{
 left:-10px;
 top: -85px;
}

JS代码:

/*
 creatBy jiucheng 2016-4-24
*/ 
window.onload=function(){
 init();
}
// 创建DIV
function creatDiv(){
 // 创建DIV并追加到父元素
 var snowDiv=document.createElement("div");
 document.getElementById("js_sonw").appendChild(snowDiv);
 // 让创建DIV的class为随机,显示不同的雪花
 var whatName=["snow_one parent","snow_two parent","snow_three parent","snow_four parent"];
 var index=Math.floor(Math.random()*whatName.length);
 snowDiv.className=whatName[index];
 // 获取该DIV的left属性值(随机的)并赋值给创建的DIV
 var whatLeft=getLeft()+'px';
 snowDiv.style.left=whatLeft;
 return snowDiv;
}
// 获取随机left属性值
function getLeft(){
 // 获取该DIV的最大left属性值即父元素的宽度
 var eleParent=document.getElementById("js_sonw");
 // 获取父元素的所有style样式
 var style=window.getComputedStyle(eleParent);
 // CSS中的left是负数这里得减去下
 var maxWidth=parseInt(style.width)+70;
 // 让创建的DIV的left为随机值
 var randomLeft=Math.floor(Math.random()*maxWidth);
 return randomLeft;
}
// 让其向下移动
function moveDown(){
 // 获取移动对象
 var moveElem=creatDiv();
 // 获取移动对象的所有style属性值
 var eleStyle=window.getComputedStyle(moveElem);
 // 获取它的top属性值
 var eleTop=parseInt(eleStyle.top);
 // 设置定时器动态改变移动对象的top属性值
 var t=setInterval(function(){
 eleTop++;
 // 把新的top值付给移动对象
 moveElem.style.top=eleTop+"px";
 // 当下落到屏幕的高度后停止定时器并把该移动对象从父元素删除
 if(eleTop>=window.innerHeight){ 
  clearInterval(t);
  document.getElementById("js_sonw").removeChild(moveElem);
 } 
 },10);//下落速度没10毫秒下落1px
}
function init(){
 // 动态获取并设置body的高度
 document.body.style.height=window.innerHeight+"px";
 // 每500毫秒创建一个移动对象并执行移动函数
 var t=setInterval(function(){
 moveDown();
 },100);
}

以上就是本文的全部内容,希望对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
Aug 16 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
Aug 14 Javascript
jQuery使用之处理页面元素用法实例
Jan 19 Javascript
JQuery fileupload插件实现文件上传功能
Mar 18 Javascript
JS获取地址栏参数的两种方法(简单实用)
Jun 14 Javascript
Bootstrap源码解读排版(1)
Dec 23 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
Jun 20 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
Jul 14 Javascript
jQuery获取随机颜色的实例代码
May 21 jQuery
Vue项目pdf(base64)转图片遇到的问题及解决方法
Oct 19 Javascript
微信小程序全局变量的设置、使用、修改过程解析
Sep 24 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
Feb 17 Javascript
基于node实现websocket协议
Apr 25 #Javascript
Bootstrap每天必学之导航组件
Apr 25 #Javascript
JavaScript常用字符串与数组扩展函数小结
Apr 24 #Javascript
javascript断点调试心得分享
Apr 23 #Javascript
基于 Node.js 实现前后端分离
Apr 23 #Javascript
javascript学习指南之回调问题
Apr 23 #Javascript
探寻JavaScript中this指针指向
Apr 23 #Javascript
You might like
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
php猴子选大王问题解决方法
2015/05/12 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
JS 继承实例分析
2008/11/04 Javascript
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
Javascript将数字转化成为货币格式字符串
2016/06/22 Javascript
VUE 3D轮播图封装实现方法
2018/07/03 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
2019/04/26 Javascript
vue滚动插件better-scroll使用详解
2019/10/18 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
使用TensorFlow实现二分类的方法示例
2019/02/05 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
python 实现return返回多个值
2019/11/19 Python
python 读取.nii格式图像实例
2020/07/01 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
百度吧主申请感言
2014/01/12 职场文书
学生检讨书范文
2014/10/30 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android