javascript實現下雪效果

来源:http://www.cnblogs.com/-walker/archive/2016/04/24/5427641.html
-Advertisement-
Play Games

原理: 1、js動態創建DIV,指定CLASS類設置不同的背景圖樣式顯示不同的雪花效果。 2、js獲取創建的DIV並改變其top屬性值,當下落的高度大於屏幕高後刪除該移動div 3、好像不夠完善勿噴 效果預覽:http://wjf444128852.github.io/demo02/snow/ind ...


原理:

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);
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習要點: 1.HTML5 文檔結構 2.文檔結構解析 3.元素標簽探討 主講教師:李炎恢 本章主要先從 HTML5 的文檔結構談起。 這些基礎元素確定了 HTML 文檔的輪廓以及瀏覽器的初始環境。幾乎所有頁面都必須首先鍵入這些元素。 一.HTML5 文檔結構 1.第一步:打開 Sublime Te ...
  • 我們來個例子,一個HTML里包含一段文本和一個無序的列表。 上面例子里,我們使用getElementById DOM方法來訪問p段落,在SCRIPT里添加如下代碼: 變數introParagraph現在已經引用到該DOM節點上了,我們可以對該節點做很多事情,比如查詢內容和屬性,或者其它任何操作,甚至 ...
  • DOM
    DOM對象**1.屬性** docment.title 返回當前文檔的標題docment.URL 返迴文檔完整的URLdocument.bgColor 背景色document.fgColor 前景色 **2.方法** 2.1 document.getElementById(“elementID”); ...
  • 學習要點: 1.HTML5 的歷史 2.HTML5 的功能 3.HTML5 的特點 4.課程學習問題 主講教師:李炎恢 HTML5 是繼 HTML4.01 和 XHTML1.0 之後的超文本標記語言的最新版本。 它是由一群自由思想者組成的團隊設計出來,並最終實現多媒體支持、交互性、更加智能的表單,以 ...
  • 在bootstrap框架中將導航獨立出來成為一個導航組件,根據不同的版本,可以找到相應的源碼: LESS: navs.less SASS: _navs.scss 標簽形導航,也稱選項卡導航 標簽形導航是通過.nav-tabs樣式來實現的,在製作標簽形導航時需要在原導航類名為.nav的容器上追加類名. ...
  • 一、寫在最前面 最近都忙一些雜七雜八的事情,複習軟考、研讀經典...好像都好久沒寫過博客了。。。 我自己寫過三個圖片輪播,一個是簡單的原生JS實現的,沒有什麼動畫效果的,一個是結合JQuery實現的,淡入淡出切換的。現在想做一個酷一點的放在博客或者個人網站,到時候可以展示自己的作品。逛了一下慕課網, ...
  • 按鈕下拉菜單 按鈕下拉菜單僅從外觀上看和下拉菜單效果基本上是一樣的。它們唯一的不同是外部容器div.dropdown換成了div.btn-group bootstrap.css文件 按鈕的向下向上三角形 按鈕的向下三角形,是通過在button標簽中添加span標簽元素,且類名為.caret 這個三角 ...
  • 層疊樣式表中最基本的一個方面可能就是層疊——衝突的聲明要通過這個層疊過程排序,並由此確定最終的文檔表示。這個過程的核心是選擇器及其相關聲明的特殊性,以及繼承機制。 特殊性 對於每個規則,用戶代理會計算選擇器的特殊性,並將這個特殊性附加到規則中的各個聲明。如果一個元素有兩個或多個衝突的屬性聲明,那麼有 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...