canvas背景效果

来源:http://www.cnblogs.com/cxzhijia/archive/2017/08/08/7308844.html
-Advertisement-
Play Games

canvas背景效果: ...


canvas背景效果:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title></title>
</head>

<body>
<canvas id="canvas" width="800" height="800"></canvas>
</body>
<script>
    let canvas = document.getElementById('canvas');
    let ctx = canvas.getContext('2d');
    let w = canvas.width = canvas.offsetWidth;
    let h = canvas.height = canvas.offsetHeight;
    let circles = [];

    function rand(min, max) {
        return parseInt(Math.random() * (max - min + 1) + min);
    }

    class Circle {
        constructor() {
            this.r = rand(5, 15);
            let x = rand(0, canvas.width - this.r);
            let y = rand(0, canvas.height - this.r);
            this.x = x < this.r ? this.r : x;
            this.y = y < this.r ? this.r : y;

            let speed = rand(1, 3);
            this.speedX = rand(0, 4) > 2 ? speed : -speed;
            this.speedY = rand(0, 4) > 2 ? speed : -speed;
        }

        drawCircle(ctx) {
            ctx.beginPath();
            ctx.arc(this.x, this.y, this.r, 0, 360);
            ctx.closePath();
            ctx.fillStyle = 'rgba(204,204,204,0.3)';
            ctx.fill();
        }

        drawLine(ctx, _circle) {
            let dx = this.x - _circle.x;
            let dy = this.y - _circle.y;
            let d = Math.sqrt(dx * dx + dy * dy);
            if (d < 150) {
                ctx.beginPath();
                ctx.moveTo(this.x, this.y);
                ctx.lineTo(_circle.x, _circle.y);
                ctx.closePath();
                ctx.strokeStyle = 'rgba(204,204,204,0.3)';
                ctx.stroke();
            }
        }

        move(w, h) {
            this.x += this.speedX / 10;
            if (this.x > w || this.x < 0) {
                this.speedX *= -1;
            }

            this.y += this.speedY / 10;
            if (this.y > h || this.y < 0) {
                this.speedY *= -1;
            }
        }
    }

    class curCircle extends Circle {
        constructor() {
            super();
        }

        drawCircle(ctx) {
            ctx.beginPath();
            this.r = 5;
            ctx.arc(this.x, this.y, this.r, 0, 360);
            ctx.closePath();
            ctx.fillStyle = 'rgba(255,77,54,0.6)';
            ctx.fill();
        }
    }

    let circle = new curCircle();
    let draw = function () {
        ctx.clearRect(0, 0, w, h);
        for (let i = 0; i < circles.length; i++) {
            circles[i].drawCircle(ctx);
            for (j = i + 1; j < circles.length; j++) {
                circles[i].drawLine(ctx, circles[j]);
            }
            circles[i].move(w, h);
        }
        if (circle.x) {
            circle.drawCircle(ctx);
            for (let k = 1; k < circles.length; k++) {
                circle.drawLine(ctx, circles[k])
            }
        }
        requestAnimationFrame(draw);
    };

    let init = function (num) {
        for (let i = 0; i < num; i++) {
            circles.push(new Circle());
        }
        draw();
    };

    window.addEventListener('load', init(20));

    canvas.addEventListener('mousemove', function (e) {
        e = e || window.event;
        circle.x = e.offsetX;
        circle.y = e.offsetY;
    });

    canvas.addEventListener('mouseout', function (e) {
        circle.x = null;
        circle.y = null;
    });
</script>

</html>

 


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

-Advertisement-
Play Games
更多相關文章
  • 好久沒有更新博客了,今天搞了快一天的網頁自適應,頭暈。。。因為最近開始做項目,項目中需要用到圖表方面的知識,於是乎接觸到了echarts,所以其實我也算是新手了。只是近幾天弄了很久的關於圖表隱藏之後再次顯示,卻無法顯示出來的問題。在網上也搜尋了好久。都沒有特別對口的答案,echarts圖表一直是顯示 ...
  • 由於工作太忙,一直沒時間更新博客,之前有很多朋友一直問我什麼時候將後續的代碼發上來,一直沒時間,今天就長話短說,不寫文章了,直接上demo,裡面將正式項目中用到的一些敏感信息修改了,要使用的話下載後自行修改。 Demo:https://github.com/landonzeng/SignalRBus ...
  • 我的學習筆記是根據我的學習情況來定期更新的,預計2 3天更新一章,主要是給大家分享一下,我所學到的知識,如果有什麼錯誤請在評論中指點出來,我一定虛心接受,那麼廢話不多說開始我們今天的學習分享吧! 前幾次已經和大家分享過了,如何實現javascript的封裝繼承和多態,這次我們開始正式介紹javasc ...
  • 初入前端,網上找的很多資料都不夠詳細,導致遇到很多問題,現記錄如下: 1.首先引入 <script src="~/Scripts/jquery-1.10.2.js"></script> <script src="~/Scripts/jquery.form.js"></script> 這個兩個 腳本庫 ...
  • [1]data [2]computed [3]methods [4]watch ...
  • 使用!!操作符轉換布爾值 有時候我們需要對一個變數查檢其是否存在或者檢查值是否有一個有效值,如果存在就返回true值。為了做這樣的驗證,我們可以使用!!操作符來實現是非常的方便與簡單。對於變數可以使用!!variable做檢測,只要變數的值為:0、null、" "、undefined或者NaN都將返 ...
  • 大圖輪播完整流程代碼操作: <style> * { margin: 0px; padding: 0px; } .stage { width: 500px; height: 300px; border: 5px solid black; margin: 200px; position: relativ ...
  • get請求代碼: api.ajax({ url:'http://m.weather.com.cn/data/101010100.html' //天氣預報網站的WebService介面},function(ret,err){ if (ret) { api.alert({msg:JSON.stringi ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...