玉淵潭賞櫻花有感:從無到有寫一個Jquery開源插件

来源:http://www.cnblogs.com/toutou/archive/2016/04/04/jqueryos.html
-Advertisement-
Play Games

“玉淵潭公園櫻花節”是每年櫻花綻放時,都會在玉淵潭公園櫻舉辦櫻花節,游客前往玉淵潭公園,可以欣賞到20個品種2000株櫻花。2016玉淵潭櫻花節時間:3月中旬-4月中旬觀賞最佳,2016年3月23日開幕(具體開幕時間不詳- -)6:00─20:30(21:30靜園)。櫻花的花期極短,從開花到凋謝只不 ...


“玉淵潭公園櫻花節”是每年櫻花綻放時,都會在玉淵潭公園櫻舉辦櫻花節,游客前往玉淵潭公園,可以欣賞到20個品種2000株櫻花。2016玉淵潭櫻花節時間:3月中旬-4月中旬觀賞最佳,2016年3月23日開幕(具體開幕時間不詳- -)6:00─20:30(21:30靜園)。櫻花的花期極短,從開花到凋謝只不過七日之期,而整棵櫻樹從開花到全謝也只有兩個禮拜左右。

在北京好幾年了,一直沒有去看過櫻花,主要是對那玩樣不感冒。這次在好友的再三邀請下,終於來到了玉淵潭公園賞櫻花,故事就這樣開始了...

請叫我頭頭哥 web前端特效 華麗的分割線

v1.0故事發展

女:來給我拍照給我拍照

男:已經拍了很多了

女:來,給我看看拍的怎麼樣

女:這張不錯,櫻花飄落的這種感覺好好哦,可惜櫻花在照片上不動,不然會更美。

男:你用美圖秀秀不就行了嘛。

女:美圖秀秀?咦,對了,你不是做網站開發的嗎,你幫我把這圖片用網站做成花一直在那飄的效果唄?

... 男陷入了沉默,似乎明白了剛纔不該提那個建議

華麗的分割線

對,故事中的男就是我,我就是我 是顏色不一樣的煙火。哈哈~~~請叫我頭頭哥 web前端特效

作為一名"資深"工程師(ps:其實就一屌絲),生活中像這種狗血劇情還有很多,好像在外人看來,因為你是程式員,so,跟電腦相關的你就得全會。

因為是程式員,發生類似的狗血劇情(皆為親身經歷)

  • 修電腦 or 裝系統(相信這個應該每個程式員都經歷過,不然就只能說明你的圈子裡有硬體高手,不用你來做這些事情)
  • 代買火車票/飛機票/訂酒店(你在網上幫我訂下票吧,你們對這個比較熟)
  • 弄QQ空間(表哥,你是做網站開發的嗎?那你幫我弄一下QQ空間咯。)
  • ...

以上劇情如果有中槍的,請自覺右下舉爪點贊,或者分享更多狗血劇情的,請跳到最下麵評論!

v2.0正文開始

好了,趕緊開始正文吧,不然分割線都不夠用了,再割就割沒了。

這裡是技術博客,咱只聊技術。既然答應了別人,就得開乾。

v3.0技術剖析

 

需要櫻花動的效果那就需要用到定位position,那麼多花瓣就需要用到js克隆clone(),花瓣是動態的就需要用到定時器setInterval。

v4.0代碼開始

好像差不多了吧? 這麼一個效果其實並不難。如果再剖析下去的話,估計會有人說"作"了。請叫我頭頭哥 web前端特效

     html部分

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>花兒朵朵</title>
    <style>
        html, body {
            font-family: Helvetica, Arial, sans-serif;
            font-size: 12px;
            line-height: 16px;
            padding: 0;
            margin: 0;
            color: pink;
        }

        #flake {
            color: #fff;
            position: absolute;
            font-size: 25px;
            top: -50px;
        }
    </style>
    <script src="http://toutouge.github.io/Demo/carousel/jquery-1.10.2.js"></script>
    <script src="jquery.nagareboshi.js"></script>
    <script>
        $(function () {
            $.fn.nagareboshi({ minSize: 5, maxSize: 50, newOn: 1000, flakeColor: '#0099FF', flakeChar: '' });
        })
    </script>
</head>
<body style="background-color:black;">

</body>
</html>

html部分比較簡單,沒什麼特別需要說明的地方。非要說兩句的話,那就... 且行且珍惜吧~  請叫我頭頭哥 web前端特效

     JS部分

/**
 * jquery.nagareboshi
 *
 *
 * @version 1 (3/31/2016)
 * @author 頭頭哥
 * @requires jQuery
 *
 * @params flakeChar - 漂浮圖標樣式, 預設是雪花, 其它漂亮符號參考: ❥ღ❣♔♕♖♚♛♜☀☁☂☃☼☽☾♨❄❅❆★☆✦✪✫✿
 * @params minSize - 預設size最小是10
 * @params maxSize - 預設size最大是20
 * @params newOn - 出現新圖標的頻率,預設是500
 * @params flakeColors - 預設的圖標顏色 , 預設是#FFFFFF
 * @params durationMillis - 停止載入圖標的時間,預設是一直載入
 * @example $.fn.nagareboshi({ maxSize: 200, newOn: 1000 });
 */
; (function ($, window, document, undefined) {

    $.fn.nagareboshi = function (options) {

        var $flake = $('<div class="flake" />').css({ 'position': 'absolute', 'top': '-50px' }),
            documentHeight = $(document).height(),
            documentWidth = $(document).width(),
            defaults = {
                flakeChar: "&#10052;",
                minSize: 10,
                maxSize: 20,
                newOn: 500,
                flakeColor: ["#ffffff"],
                durationMillis: null
            },

            // 當給extend方法傳遞一個以上的參數時,它會將所有參數對象合併到第一個裡。同時,如果對象中有同名屬性時,合併的時候後面的會覆蓋前面的。
            // 所以如果傳遞進來的options參數有的值,將會覆蓋defaults對象里對應的值
            options = $.extend({}, defaults, options);

        $flake.html(options.flakeChar);

        var interval = setInterval(function () {
            var startPositionLeft = Math.random() * documentWidth - 100,
                startOpacity = 0.5 + Math.random(),
                sizeFlake = options.minSize + Math.random() * options.maxSize,
                endPositionTop = documentHeight - defaults.maxSize - 40,
                endPositionLeft = startPositionLeft - 100 + Math.random() * 200,
                durationFall = documentHeight * 10 + Math.random() * 5000;
            $flake
                .clone()
                .appendTo('body')
                .css(
                    {
                        left: startPositionLeft,
                        opacity: startOpacity,
                        'font-size': sizeFlake,
                        color: options.flakeColor[Math.floor((Math.random() * options.flakeColor.length))]
                    }
                )
                .animate(
                    {
                        top: endPositionTop,
                        left: endPositionLeft,
                        opacity: 0.2
                    },
                    durationFall,
                    'linear',
                    function () {
                        $(this).remove()
                    }
                );
        }, options.newOn);
        console.log(options.durationMillis);
        if (options.durationMillis) {
            setTimeout(function () {
                clearInterval(interval);
            }, options.durationMillis);
        }
    };

})(jQuery, window, document);

JS部分講解:

1.為什麼代碼開始; (function ($, window, document, undefined) {是以一個分號開始? 其實這個分號是用來充當自調用匿名函數的第一對括弧與其他代碼定義的函數(一個項目中可能會引入很多插件)相連,避免其他人的代碼中沒有分號結尾而導致報錯。

比如:
請叫我頭頭哥 web前端特效

像上面這段代碼就是典型的自調用匿名函數和其他插件代碼沒有分號分隔的,大家有興趣可以試一試這段代碼運行起來會不會報錯?
ps: 這部分內容也是在劉哇勇的博客中學習到的。

2.關於$.extend();在代碼註釋部分已經詳細說明瞭,在自己寫擴展插件的時候,extend()出場率還是很高的。

3.利用sizeFlake = options.minSize + Math.random() * options.maxSize隨機設置每個克隆出來的花瓣的大小

4.也沒什麼過多的講解的了,關於參數如何使用代碼中註釋部分也說的很清楚了。

     效果演示

請叫我頭頭哥 web前端特效

為了保護個人隱私,演示效果圖裡已經將背景圖片換成了黑色背景色,想用圖片的可以自己在這改。請叫我頭頭哥 web前端特效

<body style="background-color:black;">

v博客總結

故事的由來和代碼部分(其中代碼實現有一些曾經在github看到一個開源插件上學習的,具體是哪個插件也記不得了)都介紹的差不多了,希望能藉助這篇博客讓大家對jquery插件有一個新的認識。
這裡需要特別說明一下。其實寫這篇博客真正的動機呢就是告訴大家玉淵潭櫻花節已經開始了,再不去看就沒的看了。請叫我頭頭哥 web前端特效
Are you ready? Let's go.

 


作  者:請叫我頭頭哥
出  處:http://www.cnblogs.com/toutou/
關於作者:專註於微軟平臺的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回覆。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角推薦一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!


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

-Advertisement-
Play Games
更多相關文章
  • 回顧: 上一節中鄙人通過解析表達式樹生成Sql碎片,其中我也把解析表達式類代碼貼了出來,文章發佈之後我對ExpressionAnalyzer類做了些改動,下麵我還會將代碼貼出來,廢話不多說,直接進入今天的主題。 實體類設計: 首先,我覺得要想直接通過實體類生成Sql語句,那麼你可能要知道這個實體類對 ...
  • 作者:禪樓望月( http://www.cnblogs.com/yaoyinglong ) JavaScript里也可以像Java等面向對象的語言世界里創建自定義的類型,但是由於JavaScript中不支持使用class關鍵字來創建自定義的類型,因此我們只能另闢蹊徑……下麵我們一起來看在JavaSc ...
  • 作用: 給用戶提供一個界面(前臺界面),讓用戶填寫相應的信息,對用戶提交的信息進行收集、分類、與用進行交互。 表單的工作流程: 1、用戶在具有表單的頁面填寫數據 2、將數據提交至後臺(.php) 例如uli.php 3、後臺(.php)接收數據後進行驗證,如果驗證通過,則寫入資料庫或從資料庫將數據讀... ...
  • 文件尾碼名 sass有兩種尾碼名文件:一種尾碼名為sass,不使用大括 號和分號;另一種就是我們這裡使用的scss文件,這種和我們 平時寫的css文件格式差不多,使用大括弧和分號。而本教程中 所說的所有sass文件都指尾碼名為scss的文件。在此也建議使 用尾碼名為scss的文件,以避免sass尾碼 ...
  • 第8章,用jQuery打造個性網站 網站結構 文件結構 images文件夾用於存放將要用到的圖片 styles文件夾用於存放CSS樣式表,個人更傾向於使用CSS文件夾 scripts文件夾用於存放jQuery腳本,個人更傾向於使用JS文件夾存放所有的js及jQuery腳本 編寫CSS樣式 推薦首先編 ...
  • 第6章,jQuery與Ajax的應用 Ajax的優勢和不足 Ajax的優勢 1、不需要插件支持 2、優秀的用戶體驗 3、提高Web程式的性能 4、減輕伺服器和帶寬的負擔 Ajax的不足 1、瀏覽器對XMLHttpRequest對象的支持度不足 2、破壞瀏覽器前進、後退按鈕的正常功能 3、對搜索引擎的 ...
  • 首先,先給大家看一組demo 展示效果: 為什麼會出現空格呢?input不是行內元素嗎?改變一下代碼再看看效果 如果2個input之間沒有間隙的話,下麵的空格就消失了 再試驗一組行內元素: 展示效果如下: 為了使這些行內元素之間的間距消失,我們手動刪除行內元素之間產生的額外空隙,代碼如下 效果圖如下 ...
  • CSS選擇器用於選擇你想要的元素的樣式的模式。 "CSS"列表示在CSS版本的屬性定義(CSS1,CSS2,或對CSS3)。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...