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

JavaScript利用canvas實(shí)現(xiàn)星空效果

 更新時(shí)間:2023年11月07日 11:49:45   作者:潘小七  
Canvas對(duì)于我們前端來(lái)說是一個(gè)非常強(qiáng)大的工具,它可以實(shí)現(xiàn)各種復(fù)雜的圖形和動(dòng)畫效果,我們?nèi)绻軌蚴炀氄莆账?我們就可以做很多炫酷的效果,本文就給大家介紹了用canvas畫出一片星空的方法,需要的朋友可以參考下

前言

由于最近用了挺多Echarts的,所以突然想學(xué)習(xí)學(xué)習(xí)它的底層原理Canvas。Canvas對(duì)于我們前端來(lái)說是一個(gè)非常強(qiáng)大的工具,它可以實(shí)現(xiàn)各種復(fù)雜的圖形和動(dòng)畫效果,我們?nèi)绻軌蚴炀氄莆账?,我們就可以做很多炫酷的效果?/p>

Canvas 介紹

首先我們來(lái)介紹介紹Canvans,CanvasHTML5提供的一個(gè)繪圖API,它允許通過JavaScriptHTML元素創(chuàng)建和操作圖形。Canvas提供的是一個(gè)矩形畫布,我們可以在上面繪制各種圖形、動(dòng)畫與交互效果。

功能

上面了解了Canvas是什么之后, 我們?cè)賮?lái)和大家展開說說Canvas 一些主要功能:

  • 畫布:Canvas提供了一個(gè)矩形的畫布區(qū)域, 我們可以通過HTML中的<canvas>標(biāo)簽來(lái)創(chuàng)建并通過設(shè)置畫布的寬高來(lái)確定繪圖區(qū)域的大小。
  • 繪畫API:Canvas提供了豐富的繪圖API,包括繪制路徑、直線、曲線、矩形、圓形、文本等。 我們使用這些API來(lái)創(chuàng)建各種圖形,并自定義樣式、顏色、透明度等屬性。
  • 動(dòng)畫:Canvas可以與JavaScript的動(dòng)畫函數(shù)結(jié)合使用,實(shí)現(xiàn)動(dòng)態(tài)的圖形效果。通過在每一幀中更新畫布上的內(nèi)容,能創(chuàng)建平滑的動(dòng)畫效果。
  • 圖像處理:Canvas可以加載和繪制圖像。我們可以使用Canvas的API對(duì)圖像進(jìn)行裁剪、縮放、旋轉(zhuǎn)等操作,從而實(shí)現(xiàn)圖像處理的功能。
  • 事件處理:Canvas支持鼠標(biāo)和觸摸事件的處理,我們可以通過監(jiān)聽這些事件來(lái)實(shí)現(xiàn)交互效果,例如點(diǎn)擊、拖拽、縮放等等。

注意:Canvas 繪制的內(nèi)容是即時(shí)生成的,它不會(huì)被瀏覽器緩存,所以每次頁(yè)面加載Canvas都需要重新繪制,所以我們?cè)谑褂脮r(shí)需要考慮性能問題。

星空

在介紹完Canvas之后,我們?cè)賮?lái)用CanvasJS結(jié)合,實(shí)現(xiàn)一片星空的效果。

第一步,我們先創(chuàng)建好html 結(jié)構(gòu),代碼如下:

  <div class="landscape">
    </div>
    <canvas id="canvas"></canvas>
    <div class="filter"></div>
    <script src="./round_item.js"></script>

現(xiàn)在是沒有效果的,我們?cè)诮o它加上css代碼,將其美化,同時(shí)我們?cè)僭赾ss上加一些動(dòng)畫效果,完整代碼如下:

* {
    margin: 0;
    padding: 0;
}
html,
body {
    width: 100%;
    height: 100%;
}

body {
    background: linear-gradient(to bottom, #000 0%, #5788fe 100%);

}

.landscape {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-image: url(./star/xkbg.png);
    background-repeat: repeat-x;
    background-size: 1000px 250px;
    background-position: center bottom;
}
.filter{
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    z-index: 2;
    background: #fa7575;
    animation: colorChange 30s  ease-in infinite;
}
/* 漸變動(dòng)畫*/
@keyframes colorChange {
    0%,100%{
        opacity: 0;
    }
    50%{
        opacity: 0.7;
    }

}

這時(shí)候,我們看到的效果是這樣的:

這效果好像只有黃昏的顏色變化,少了星空。那這最后一步,就該我們Canvas上場(chǎng)了,我們要用Canvas畫出來(lái)一片星空,并配合css的顏色變化,實(shí)現(xiàn)一個(gè)夜晚到清晨的感覺。

我們 js 代碼這樣寫:

//創(chuàng)建星星的函數(shù)
function RoundItem(index, x, y, ctx) {
    this.index = index
    this.x = x
    this.y = y
    this.ctx = ctx
    this.r = Math.random() * 2 + 1
    this.color = 'rgba(255,255,255,1)'
}
// 繪制
RoundItem.prototype.draw = function () { 
    this.ctx.fillStyle = this.color //指定顏色
    this.ctx.beginPath() // 開始繪制
    this.ctx.arc(this.x, this.y, this.r, 0, 2 * Math.PI, false) // 繪制圓形
    this.ctx.closePath() // 結(jié)束繪制
    this.ctx.fill() //填充形狀
}
//移動(dòng)
RoundItem.prototype.move = function () {
    this.y -= 0.5
    this.draw()
}


let canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d'),
round = [],
initRoundPopulation = 200; //星星的個(gè)數(shù)

const WIDTH = document.documentElement.clientWidth,
HEIGHT = document.documentElement.clientHeight;

canvas.width = WIDTH
canvas.height = HEIGHT

init()
// setInterval(animate, 1700)
animate()
function init() {
for (var i = 0; i < initRoundPopulation; i++) {
    round[i] = new RoundItem(i, Math.random() * WIDTH, Math.random() * HEIGHT, ctx)
    round[i].draw()
}
}
function animate() {
ctx.clearRect(0, 0, WIDTH, HEIGHT) //清除畫布
for (let star of round) {
    star.move()
}
requestAnimationFrame(animate) //通過刷新幀數(shù)來(lái)調(diào)用函數(shù)
}

將上述代碼添加上之后,我們也就完成星星的繪制并添加到了頁(yè)面上,最終的效果如下:

到這里,我們就用canvas 畫出了一片美麗的星空。同時(shí)我們也看到了canvas的強(qiáng)大功能,感興趣的小伙伴可以深入的了解它更多的用法哦。

以上就是JavaScript利用canvas實(shí)現(xiàn)星空效果的詳細(xì)內(nèi)容,更多關(guān)于JavaScript canvas星空效果的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • javascript中的this作用域詳解

    javascript中的this作用域詳解

    這篇文章主要介紹了javascript中的this作用域詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 微信小程序引入外部icon(阿里巴巴矢量圖標(biāo))的全過程

    微信小程序引入外部icon(阿里巴巴矢量圖標(biāo))的全過程

    在小程序中,有默認(rèn)的圖標(biāo)icon組件,但你會(huì)發(fā)現(xiàn)它的圖標(biāo)樣式很少,可能很多時(shí)候并不能滿足我們的需求,所以這篇文章主要給大家介紹了關(guān)于微信小程序引入外部icon(阿里巴巴矢量圖標(biāo))的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • 微信小程序 下拉刷新及上拉加載原理解析

    微信小程序 下拉刷新及上拉加載原理解析

    這篇文章主要介紹了微信小程序 下拉刷新及上拉加載實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 在js文件中如何獲取basePath處理js路徑問題

    在js文件中如何獲取basePath處理js路徑問題

    在jsp中,我們可以用el表達(dá)式直接獲取basePath,但是在單獨(dú)js文件中不能用el表達(dá)式,下面與大家分享下js文件中如何獲取basePath,感興趣的朋友可以參考下
    2013-07-07
  • 談?wù)凧S中常遇到的瀏覽器兼容問題和解決方法

    談?wù)凧S中常遇到的瀏覽器兼容問題和解決方法

    這篇文章主要介紹了談?wù)凧S中常遇到的瀏覽器兼容問題和解決方法 ,有些代碼在某些瀏覽器的某些版本中表現(xiàn)出不兼容,影響頁(yè)面的體驗(yàn);這時(shí)就需要處理了這些兼容問題,讓頁(yè)面在多個(gè)版本的瀏覽器上運(yùn)行良好。
    2016-12-12
  • 為什么JavaScript中0.1 + 0.2 != 0.3

    為什么JavaScript中0.1 + 0.2 != 0.3

    這篇文章主要給大家介紹了關(guān)于為什么JavaScript中0.1 + 0.2 != 0.3的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 模仿password輸入框的實(shí)現(xiàn)代碼

    模仿password輸入框的實(shí)現(xiàn)代碼

    下面小編就為大家?guī)?lái)一篇模仿password輸入框的實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2016-06-06
  • JS?生態(tài)系統(tǒng)加速Polyfill函數(shù)使用實(shí)例探索

    JS?生態(tài)系統(tǒng)加速Polyfill函數(shù)使用實(shí)例探索

    這篇文章主要介紹了JS?生態(tài)系統(tǒng)加速Polyfill函數(shù)使用實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • JavaScript私有變量實(shí)例詳解

    JavaScript私有變量實(shí)例詳解

    這篇文章主要介紹了JavaScript私有變量,結(jié)合實(shí)例形式分析了javascript私有變量的常見定義及訪問方法,需要的朋友可以參考下
    2019-01-01
  • Javascript 詳解封裝from表單數(shù)據(jù)為json串進(jìn)行ajax提交

    Javascript 詳解封裝from表單數(shù)據(jù)為json串進(jìn)行ajax提交

    這篇文章主要介紹了Javascript 詳解封裝from表單數(shù)據(jù)為json串進(jìn)行ajax提交的相關(guān)資料,需要的朋友可以參考下
    2017-03-03

最新評(píng)論

濉溪县| 江西省| 福泉市| 西吉县| 丹巴县| 阜城县| 阿拉善左旗| 盐津县| 永年县| 安泽县| 二连浩特市| 化德县| 榆社县| 南开区| 库车县| 瑞丽市| 郓城县| 泗水县| 公安县| 芮城县| 镇远县| 长葛市| 平阴县| 林州市| 洛阳市| 彩票| 绥德县| 米易县| 汨罗市| 兴宁市| 洛阳市| 昌平区| 阜南县| 九寨沟县| 石嘴山市| 连城县| 城固县| 朝阳县| 永城市| 墨脱县| 阳泉市|