[博客美化]新年啦,給自己博客加個雪花效果吧~

前言

今天是2017 的最後一天,首先祝福大家新年快樂,能在自己新的一年裏開心快樂,幸福~。轉眼間,又到了白雪飄飛的冬季,相信好多地方都下雪了吧~,突發奇想,給自己博客加上了雪花飄落效果。當然了,有寫的不好的地方,大家打我就好~~

效果預覽

http://www.cnblogs.com/yjlblog/ (本來想着上傳一個gif..好像是太大了...就上傳失敗了)

食用方法

  • 添加js文件

(1)前提是開通了權限哦,然後把 xue.js文件上傳到自己博客中;
(2)創建畫布(放在頁尾);

<div class="Snow">
    <canvas id="Snow"></canvas>
</div>
  • 引入js文件(放在頁尾);

<script src="https://files.cnblogs.com/files/yjlblog/xue.js"></script>

js文件:

(function() {
    var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame ||
    function(callback) {
        window.setTimeout(callback, 1000 / 60);
    };
    window.requestAnimationFrame = requestAnimationFrame;
})();

(function() {
    var flakes = [],
        canvas = document.getElementById("Snow"), //畫布ID,與上一步創建的畫布對應
        ctx = canvas.getContext("2d"),
        flakeCount = 200,  //雪花數量,數值越大雪花數量越多
        mX = -100,
        mY = -100;

    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;

    function snow() {
        ctx.clearRect(0, 0, canvas.width, canvas.height);

        for (var i = 0; i < flakeCount; i++) {
            var flake = flakes[i],
                x = mX,
                y = mY,
                minDist = 150,  //雪花距離鼠標指針的最小值,小於這個距離的雪花將受到鼠標的排斥
                x2 = flake.x,
                y2 = flake.y;

            var dist = Math.sqrt((x2 - x) * (x2 - x) + (y2 - y) * (y2 - y)),
                dx = x2 - x,
                dy = y2 - y;

            if (dist < minDist) {
                var force = minDist / (dist * dist),
                    xcomp = (x - x2) / dist,
                    ycomp = (y - y2) / dist,
                    deltaV = force / 2;

                flake.velX -= deltaV * xcomp;
                flake.velY -= deltaV * ycomp;

            } else {
                flake.velX *= .98;
                if (flake.velY <= flake.speed) {
                    flake.velY = flake.speed
                }
                flake.velX += Math.cos(flake.step += .05) * flake.stepSize;
            }

            ctx.fillStyle = "rgba(255,255,255," + flake.opacity + ")";  //雪花顏色
            flake.y += flake.velY;
            flake.x += flake.velX;

            if (flake.y >= canvas.height || flake.y <= 0) {
                reset(flake);
            }

            if (flake.x >= canvas.width || flake.x <= 0) {
                reset(flake);
            }

            ctx.beginPath();
            ctx.arc(flake.x, flake.y, flake.size, 0, Math.PI * 2);
            ctx.fill();
        }
        requestAnimationFrame(snow);
    };

    function reset(flake) {
        flake.x = Math.floor(Math.random() * canvas.width);
        flake.y = 0;
        flake.size = (Math.random() * 3) + 2;  //加號後面的值,雪花大小,爲基準值,數值越大雪花越大
        flake.speed = (Math.random() * 1) + 0.5;  //加號後面的值,雪花速度,爲基準值,數值越大雪花速度越快
        flake.velY = flake.speed;
        flake.velX = 0;
        flake.opacity = (Math.random() * 0.5) + 0.3;  //加號後面的值,爲基準值,範圍0~1
    }

    function init() {
        for (var i = 0; i < flakeCount; i++) {
            var x = Math.floor(Math.random() * canvas.width),
                y = Math.floor(Math.random() * canvas.height),
                size = (Math.random() * 3) + 2,  //加號後面的值,雪花大小,爲基準值,數值越大雪花越大
                speed = (Math.random() * 1) + 0.5,  //加號後面的值,雪花速度,爲基準值,數值越大雪花速度越快
                opacity = (Math.random() * 0.5) + 0.3;  //加號後面的值,爲基準值,範圍0~1

            flakes.push({
                speed: speed,
                velY: speed,
                velX: 0,
                x: x,
                y: y,
                size: size,
                stepSize: (Math.random()) / 30 * 1,  //乘號後面的值,雪花橫移幅度,爲基準值,數值越大雪花橫移幅度越大,0爲豎直下落
                step: 0,
                angle: 180,
                opacity: opacity
            });
        }

        snow();
    };

    document.addEventListener("mousemove", function(e) {
        mX = e.clientX,
        mY = e.clientY
    });
    window.addEventListener("resize", function() {
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;
    });
    init();
})();

添加樣式
  • 添加樣式(自定義css,背景顏色可以自己改變);
#Snow{
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 99999;
    background: rgba(125,137,95,0.1);
    pointer-events: none;
}

相關文件

  • js 文件: https://files.cnblogs.com/files/yjlblog/xue.js

聲明

部分資源來源網絡 版權歸@ 貓與向日葵 所有,如有寫的不對之處,歡迎大家指正~~感激不盡~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章