最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript結(jié)合Canvas繪畫畫運動小球

 更新時間:2022年03月28日 11:16:55   作者:王珮云  
這篇文章主要介紹了JavaScript結(jié)合Canvas畫運動小球,canvas被稱為畫布,可以結(jié)合javascript實現(xiàn)繪制各種圖形,制作各種炫酷的動畫效果,下面文章更多詳細內(nèi)容介紹需要的小伙伴可以參考一下

前言:

canvas是HTML5新增的元素,也被稱為畫布,可以結(jié)合javascript實現(xiàn)繪制各種圖形,制作各種炫酷的動畫效果,現(xiàn)在我們也來使用canvas畫隨機運動小球。

1.實現(xiàn)思路

  • 首先為了達到我們想要的效果,可以先創(chuàng)建一個構(gòu)造函數(shù)。
  • 給構(gòu)造函數(shù)添加對應(yīng)的屬性和方法。
  • 實例化出多個對象,并且保存在數(shù)組中。
  • 遍歷每個對象,實現(xiàn)畫圓。
  • 間隔修改每個球的x,y值。

先準(zhǔn)備畫布確定對應(yīng)的寬高:

<canvas id="canvas" width="400" height="400"></canvas>
<script>
    let canvas = document.getElementById('canvas');
    let ctx = canvas.getContext('2d');
    let maxWidth = canvas.width,
        maxHeight = canvas.height;
        ctx.fillStyle = '#000';
        ctx.fillRect(0, 0, maxWidth, maxHeight);
</script>

因為是隨機運動,所以要創(chuàng)建一個獲取隨機數(shù)的方法:

function getRandomNum(minNum, maxNum) {
    switch (arguments.length) {
        case 1:
            return Math.round(Math.random() * minNum + minNum);
            break;
        case 2:
            return Math.round(
                Math.random() * (maxNum - minNum) + minNum);
            break;
        case 0:
            return 0;
            break;
    }
}
// 創(chuàng)建一個Ball的構(gòu)造函數(shù)
    function Ball(maxWidth, maxHeight, ctx) {
        this.ctx = ctx;
        this.maxWidth = maxWidth;
        this.maxHeight = maxHeight;
        // 隨機半徑
        this.r = getRandomNum(5, 15);
        // 隨機x,y坐標(biāo)
        this.x = getRandomNum(this.r, this.maxWidth - this.r);
        this.y = getRandomNum(this.r, this.maxHeight - this.r);
        // 平移速度,正負區(qū)間是為了移動方向多樣
        this.speedX = getRandomNum(-2, 2);
        this.speedY = getRandomNum(-2, 2);
        // 顏色隨機
        this.color = `rgba(${getRandomNum(0, 255)},
        ${getRandomNum(0, 255)},
        ${getRandomNum(0, 255)},${Math.random()})`;
    }
    Ball.prototype = {
        draw: function () {
            ctx.beginPath();
            ctx.fillStyle = this.color;
            ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2);
            ctx.fill();
            ctx.closePath();
        },
        move: function () {
            // 判斷邊界值,讓圓球始終保證在畫面內(nèi)
            if (this.x > this.maxWidth - this.r || this.x < this.r) {
                this.speedX = -this.speedX;
            }
            if (this.y > this.maxHeight - this.r || this.y < this.r) {
                this.speedY = -this.speedY;
            }
            this.x += this.speedX;
            this.y += this.speedY;
        }
    };
    // 創(chuàng)建100個Ball實例
    let balls = [];
    for (let i = 0; i < 100; i++) {
        let newBall = new Ball(maxWidth, maxHeight, ctx);
        newBall.draw();
        balls.push(newBall);
    }

2.靜態(tài)效果

現(xiàn)在我們畫出了不同半徑和顏色的靜止圓球:

調(diào)用move方法,間隔修改每個球的x,y值。

setInterval(() => {
    // 每次畫之前都要清除畫布
    ctx.clearRect(0, 0, maxWidth, maxHeight);
    ctx.fillStyle = '#000';
    ctx.fillRect(0, 0, maxWidth, maxHeight);
    for (let j = 0; j < 100; j++) {
        balls[j].draw(ctx);
        balls[j].move();
    }
}, 100);

效果展示:

3.總結(jié)

canvas強大的繪圖能力可以使網(wǎng)頁的內(nèi)容更加豐富多彩,給用戶帶來更好的視覺效果和和交互體驗,掌握一些功能的使用可以讓我們的項目更好的理解與canvas相關(guān)的框架使用,也能夠創(chuàng)建豐富的web應(yīng)用,同時也要求我們更好的掌握

到此這篇關(guān)于JavaScript結(jié)合Canvas畫運動小球的文章就介紹到這了,更多相關(guān)JS與Canvas畫運動小球內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript圣杯布局與雙飛翼布局實現(xiàn)案例詳解

    JavaScript圣杯布局與雙飛翼布局實現(xiàn)案例詳解

    這篇文章主要介紹了JavaScript圣杯布局與雙飛翼布局實現(xiàn)案例,這是前端面試中需要掌握的知識點,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • JavaScript迭代器與生成器使用詳解

    JavaScript迭代器與生成器使用詳解

    迭代器是一個統(tǒng)一的接口,它的作用是使各種數(shù)據(jù)結(jié)構(gòu)可以被便捷的訪問,它是通過一個鍵為Symbol.iterator的方法來實現(xiàn),這篇文章主要介紹了ES6 中的迭代器和生成器,需要的朋友可以參考下
    2022-11-11
  • 詳解實現(xiàn)一個通用的“劃詞高亮”在線筆記功能

    詳解實現(xiàn)一個通用的“劃詞高亮”在線筆記功能

    這篇文章主要介紹了實現(xiàn)一個通用的“劃詞高亮”在線筆記文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • JS裝飾者模式和TypeScript裝飾器

    JS裝飾者模式和TypeScript裝飾器

    學(xué)習(xí)的目的是對裝飾者模式模式有進一步的理解,并運用在自己的項目中;對TypeScript裝飾器的理解,更好的使用裝飾器,例如在nodejsweb框架中、vue-property-decorator中,或者是自定義裝飾器,能熟練運用并掌握其基本的實現(xiàn)原理。
    2021-04-04
  • js友好的時間返回函數(shù)

    js友好的時間返回函數(shù)

    這篇文章主要為大家詳細介紹了js友好的時間返回函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • js?html5獲取input焦點的輸入框并賦值實例

    js?html5獲取input焦點的輸入框并賦值實例

    這篇文章主要為大家介紹了js?html5獲取input焦點的輸入框并賦值實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • JavaScript事件流之事件處理和傳播機制深入理解

    JavaScript事件流之事件處理和傳播機制深入理解

    本文將詳細介紹JavaScript事件流的發(fā)展流程、屬性以及應(yīng)用場景,并提供一些代碼示例和引用資料,幫助讀者深入理解并應(yīng)用這一重要的前端技術(shù),希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • layui table 表格上添加日期控件的兩種方法

    layui table 表格上添加日期控件的兩種方法

    今天小編就為大家分享一篇layui table 表格上添加日期控件的兩種方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 通過js動態(tài)操作table(新增,刪除相關(guān)列信息)

    通過js動態(tài)操作table(新增,刪除相關(guān)列信息)

    通過js動態(tài)操作table(新增,刪除相關(guān)列信息)的實現(xiàn)代碼,需要的朋友可以參考下
    2012-05-05
  • 微信小程序開發(fā)之自定義tabBar的實現(xiàn)

    微信小程序開發(fā)之自定義tabBar的實現(xiàn)

    這篇文章主要介紹了微信小程序開發(fā)之自定義tabBar的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09

最新評論

木里| 荆门市| 饶阳县| 辽阳县| 砀山县| 泰州市| 克山县| 同心县| 莎车县| 城市| 甘德县| 洛隆县| 华池县| 铜梁县| 张家口市| 来凤县| 开原市| 化州市| 竹北市| 镇原县| 新竹市| 唐海县| 于田县| 庆安县| 开原市| 西宁市| 同仁县| 南木林县| 温泉县| 江安县| 张家川| 山西省| 乌恰县| 桂东县| 大田县| 马关县| 肥城市| 崇信县| 赫章县| 承德县| 周宁县|