JS实现下雪效果

简介: JS实现下雪效果

原理:

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深拷贝和浅拷贝以及实现方法(推荐)
600 0
javascript深拷贝和浅拷贝以及实现方法(推荐)
|
JavaScript 算法 前端开发
【前端算法】JS实现数字千分位格式化
JS实现数字千分位格式化的几种思路,以及它们之间的性能比较
343 1
|
存储 前端开发 算法
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
162 0
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
|
存储 机器学习/深度学习 JavaScript
JS 你最少用几行代码实现深拷贝?
JS 你最少用几行代码实现深拷贝?
JS 你最少用几行代码实现深拷贝?
|
JavaScript 前端开发 算法
JavaScript实现一段时间之后关闭广告
简介:通过JavaScript实现在一段时间之后,广告消失。
130 0
JavaScript实现一段时间之后关闭广告
|
JavaScript 前端开发 算法
JS实现鼠标悬停变色
本文实现的是利用JS实现当鼠标悬停在表格上的时候,表格发生变色。 CSS渲染 JS逻辑 `
219 0
JS实现鼠标悬停变色
|
JavaScript 前端开发 数据安全/隐私保护
JS实现关闭图片窗口
通过事件的绑定来实现,关闭二维码的效果。
159 0
JS实现关闭图片窗口
|
前端开发 JavaScript Windows
js实现body背景图自动扩缩 光靠css几乎无法实现这样的效果
js实现body背景图自动扩缩 光靠css几乎无法实现这样的效果
196 0
js实现body背景图自动扩缩 光靠css几乎无法实现这样的效果
|
存储 JavaScript
js实现多选、全选、反选、取消选择(篇一)
js实现多选、全选、反选、取消选择(篇一)
389 0
js实现多选、全选、反选、取消选择(篇一)
|
JavaScript 前端开发
利用JavaScript实现二级联动
利用JavaScript实现二级联动 要实现JavaScript二级联动效果,首先要确定需要哪些技术: 二维数组 for in循环 new Option(text,value,true,true) add(option,null) onchange() 表单事件 HTML代码: &lt;!-- &lt;input type=&quot;text&quot; id=&quot;text&quot;&gt; --&gt; 请选择省份: &lt;select name=&quot;&quot; id=&quot;provinces&quot;&gt; &lt;!-- &lt;option value=&quot;江苏省&quot;&gt;江苏省&lt;/option&gt;