1. 程式人生 > >H5+原生js 雪花特效

H5+原生js 雪花特效

 概述

   隨著前端技術的發展,越來越多的H5技術被應用到實際開發中,本次實現的是螢幕實現雪花飄落特效。

2 效果圖如下:

3 主要功能

實現雪花飄落。

。。。後續功能可以自己酌情新增

4實現方式

  首先 ,我們需要一個容器,在這裡只需要一個div就可以了,通過divid就可以識別該容器並通過css

對其設定樣式,程式碼如下 概述
隨著前端技術的發展,越來越多的H5技術被應用到實際開發中,本次實現的是螢幕實現雪花飄落特效。
2 效果圖如下:


3 主要功能
實現雪花飄落。
。。。後續功能可以自己酌情新增

4實現方式
首先 ,我們需要一個容器,在這裡只需要一個div就可以了,通過div的id就可以識別該容器並通過css對其設定樣式,程式碼如下:

<div class="container"  id="container" ></div>
<style>
        *{
            margin: 0;
            padding: 0;
        }
        html,body{
            height: 100%;
        }
        .container{
            background-color: black;
            height: 100%;
            color: white;
            position: relative;
            overflow: hidden;
        }
    </style>

然後我們開始寫js。首先開始時,我們先通過id獲取外層容器div

,然後定義一個定時器,用於設定雪花下落的時間。

 div=document.getElementById("container");   

接著就是在定時器裡設定產生雪花,此時,將雪花圖片放入容器中,而且我們會產生的雪花,因此需要定義一個數組用於承放雪花。並在此處對雪花設定樣式:雪花的大小要設定隨機大小、雪花產生的位置、結束的位置、下落時旋轉的角度。程式碼如下:

setInterval(function(){
        var img=document.createElement("img");
        img.src="x.png";
        div.appendChild(img);
        array.push(img);
        img.style.position="absolute";
        img.style.top="-50px";
        img.style.webkitTransition="all 5s";

        //隨機雪花大小
        var imgWidth=parseInt(Math.random()*10000000)%14+12;
        img.width=imgWidth;

        //隨機雪花位置
 var left=parseInt(Math.random()*10000000)%(screen.availWidth-imgWidth);
        img.style.left=left+"px";
        //隨機雪花結束位置
var leftDown=parseInt(Math.random()*10000000)%(screen.availWidth-imgWidth);
 
var topDown=screen.availHeight+parseInt(Math.random()*10000000)%(100);
        //隨機雪花角度
        var deg=parseInt(Math.random()*10000000)%360+360;

        //自定義兩個屬性 用來儲存隨機的結束位置
        img.setAttribute("leftDown",leftDown);
        img.setAttribute("topDown",topDown);
        img.setAttribute("deg",deg);
    },50);

下面我們需要對雪花進行下落的動畫特效開始封裝方法了。建立方法downAnimation(),在方法中我們需要迴圈所有的雪花,改變每個雪花的落地位置。程式碼如下:

 for(var i=0;i<array.length;i++){
                var snow=array[i];
                //將處理完的刪除
                array.splice(i,1);
                //校驗是否已經設定完終點狀態了
                if(parseInt(snow.style.top)>0){
                    continue;
                }

                //獲取雪花與生俱來的終止狀態
                var leftDown=snow.getAttribute("leftDown");
                var topDown=snow.getAttribute("topDown");
                var deg=snow.getAttribute("deg");

 				  //重新改變left和top
                snow.style.left=leftDown+"px";
                snow.style.top=topDown+"px";


 				 //重新改變雪花的角度
                snow.style.transform="rotate("+deg+"deg)";


                //當雪花下落到最低位置時,改變透明度
                snow.style.opacity=1;

最後我們將downAnimation()方法放置到新建立的定時器中,設定下落時間。程式碼如下:

setInterval(function(){
                setTimeout(function(){
                    downAnimation();
                },1);
            },50)


========================================================================================

程式完整程式碼如下:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>

    <style>
        *{
            margin: 0;
            padding: 0;
        }
        html,body{
            height: 100%;
        }
        .container{
            background-color: black;
            height: 100%;
            color: white;
            position: relative;
            overflow: hidden;
        }
    </style>
    
    <script>
        var div;
        var array=[];
        window.onload=function(){
            //獲取最外層容器
            div=document.getElementById("container");

            //開啟定時器,產生雪花
            setInterval(function(){
                var img=document.createElement("img");
                img.src="x.png";
                div.appendChild(img);
                array.push(img);

                img.style.position="absolute";
                img.style.top="-50px";
                img.style.webkitTransition="all 5s";

                //隨機雪花大小
                var imgWidth=parseInt(Math.random()*10000000)%14+12;
                img.width=imgWidth;

                //隨機雪花位置
                var left=parseInt(Math.random()*10000000)%(screen.availWidth-imgWidth);
                img.style.left=left+"px";
                //隨機雪花結束位置
                var leftDown=parseInt(Math.random()*10000000)%(screen.availWidth-imgWidth);
                var topDown=screen.availHeight+parseInt(Math.random()*10000000)%(100);
                //隨機雪花角度
                var deg=parseInt(Math.random()*10000000)%360+360;

                //自定義兩個屬性 用來儲存隨機的結束位置
                img.setAttribute("leftDown",leftDown);
                img.setAttribute("topDown",topDown);
                img.setAttribute("deg",deg);
            },50);

            setInterval(function(){
                setTimeout(function(){
                    downAnimation();
                },1);
            },50)
        }


        /***
         * 雪花下落動畫特效
         */
        function downAnimation(){

            //迴圈所有的雪花,改變每個雪花的落地位置
            for(var i=0;i<array.length;i++){
                var snow=array[i];
                //將處理完的刪除
                array.splice(i,1);
                //校驗是否已經設定完終點狀態了
                if(parseInt(snow.style.top)>0){
                    continue;
                }

                //獲取雪花與生俱來的終止狀態
                var leftDown=snow.getAttribute("leftDown");
                var topDown=snow.getAttribute("topDown");
                var deg=snow.getAttribute("deg");

                //重新改變left和top
                snow.style.left=leftDown+"px";
                snow.style.top=topDown+"px";

                //重新改變雪花的角度
                snow.style.transform="rotate("+deg+"deg)";

                //改變透明度
                snow.style.opacity=1;


            }
          //  console.log(array.length+"=============");

        }

    </script>
</head>
<body>

<div class="container"  id="container" >
</div>

</body>
</html>


相關推薦

H5+原生js 雪花特效

 概述    隨著前端技術的發展,越來越多的H5技術被應用到實際開發中,本次實現的是螢幕實現雪花飄落特效。 2 效果圖如下: 3 主要功能 實現雪花飄落。 。。。後續功能可以自己酌情新增 4實現方式   首先 ,我們需要一個容器,在這裡只需要一個div就可以

h5原生js實現輪播圖

list sla head log startx creat ase hit eve 預覽地址:http://s.xnimg.cn/a90529/wap/wechatLive/test/slide.html <!DOCTYPE html> <html l

原生JS投票特效

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JS+CSS實現投票效果 - 何問起</title> <link rel="s

js雪花特效_跟隨頁面滾動的下雪特效

這星期寧波有些地方已經開始下雪了,氣溫一下子降了很多,又快過年了。冬天最喜歡的就是下雪了,我想沒有幾個人不喜歡的,所以就從網路上到處收集有關雪花的特效,今天就來分享第一個JS雪花特效。這是個從淘寶網上拿下來的下雪特效,雪花從頁面的頂部一直往下飄落,當你向下滾動頁面時雪花又從

原生js 放大鏡特效

最近在做ecshop的二次開發,遇到一些jquery外掛與ecshop的衝突, 調整衝突的需要修改的地方又太多,修改起來得不償失, 故做了一個原生的js實現商品詳情頁面的放大鏡效果,以避免衝突! 下面介紹一下程式碼及實現過程: 首先,建立fangda.html檔案 在檔案頭

小圖形下落,類似雪花飄落,原生js

gin charset push resize select div ram 函數 edge <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta

原生JS實現的h5小遊戲-植物大戰僵屍

完成後 資源 life css lan posit 獲得 抽象 dom 代碼地址如下:http://www.demodashi.com/demo/12755.html 項目介紹 本項目是利用原生js實現的h5小遊戲-植物大戰僵屍,主要結合了一下自己對於h5小遊戲的理解,

原生js實現返回頂部特效

程序 mar document timer margin con lse hid 監聽 index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&

原生js寫的雪花效果,使用畫布

<!doctype html> <html> <head> <meta charset="utf-8"> <title>雪花效果,使用畫布</title> <script src="http://libs.baidu.co

原生js仿網易雲輪播特效

原理:運用兩張圖片切換 可視區域向左走或向右走 要跳轉的圖片定位在可視區域的左邊或右邊 然後用緩動動畫實現切換 重點:緩動動畫 js實現步驟:1、獲取所需元素 2、建立指示器 3.讓第一個選中 4.新增事件 5、切換索引 6、自動輪播 1、獲取所需元素 var slider=$(

webview中巢狀html實現精準定位(百度地圖、高德地圖、騰訊地圖、H5原生定位)js對比

最近在實現一個功能,就是在安卓手機和蘋果手機嵌入html程式碼,實現精準定位,我為此對比幾種定位的方法。我要的是精準定位,就是誤差在100米左右的功能,類似與外賣app那種定位精確度 1. 首先是原生h5定位 if(browser.versions.an

原生JS實現各種經典網頁特效——Banner圖滾動、選項卡切換、廣告彈窗等

         在製作網頁過程中,我們可能會遇到各種常用的經典網頁特效,比如Banner圖片滾動、選項卡迴圈播放、右下角廣告彈窗、評論提交展示、選項動態增刪、剪刀石頭布小遊戲等等等。。。是不是感覺都見到過這些場景、那些這些場景都是如何實現的呢?今天,小瑞老師就一口氣把所有經典網頁特效效果送給大家!!!   

原生js可愛糖果數字時間特效

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="vi

JS打字特效 JS 原生程式碼

<html> <head> <title>打字效果的帶連結的新聞標題</title> <meta http-equiv="Content-Type

有趣的Javascript:只需一個JS讓萬惡的IE5、IE6、IE7、IE8全都支援H5原生Canvas繪圖(有演示demo)

該demo支援IE5以上任意核心的瀏覽器補充:chats.js和echarts等圖表庫也可以使用本方法相容IE6以上瀏覽器1、引入excanvas.js只需要引入一個js即可讓IE5+支援Canvas繪圖API<!--[if lte IE 8]><scrip

原生js實現拖動滑塊驗證

cnblogs tcc mvt wms 網站 hnu 按鈕 itl rip 拖動滑塊驗證是現在的網站隨處可見的,各式各樣的拖動法都有。 下面實現的是某寶的拖動滑塊驗證: <!DOCTYPE html> <html lang="en"> <he

0510日重點:原生js修改豆瓣電影api 在angularjs裏運用出現的bug

http ava move var cti tps 上下 console date 用$http.jsonp調用豆瓣電影api,會出現返回數據格式錯誤的bug。在控制器裏加上下面的代碼,才能正常獲取到數據。 function jsonp(url, ca

原生JS的HTTP請求

font sch 原生 office 請求 ref html sof nbsp ar xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if(

基於原生JS+node.js+mysql打造的簡易前後端分離用戶登錄系統

power 3.2 80端口 文檔 type ima 原生 倉庫 json 一、登錄頁面 這個沒什麽說的,就放兩張圖 二、服務器端 用express(文檔)搭建服務器,數據褲用mysql(基礎語句),新建一個users,再新建一張users表,我們用這張表。 服務器主要是

使用原生JS封裝Tap事件,解決移動端300ms延遲

itl dia can 開發 閉包 tcl type 移動端 com 為了防止誤操作,移動端iOS操作系統針對原生click事件做了300ms的延遲,這在一定程度上影響了我們的使用體驗。 GitHub項目地址:https://github.com/Simon