This commit is contained in:
parent
759c725b2c
commit
1b0a6f7ece
|
@ -1,9 +0,0 @@
|
||||||
export function setupCounter(element) {
|
|
||||||
let counter = 0
|
|
||||||
const setCounter = (count) => {
|
|
||||||
counter = count
|
|
||||||
element.innerHTML = `count is ${counter}`
|
|
||||||
}
|
|
||||||
element.addEventListener('click', () => setCounter(counter + 1))
|
|
||||||
setCounter(0)
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="32" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path fill="#F7DF1E" d="M0 0h256v256H0V0Z"></path><path d="m67.312 213.932l19.59-11.856c3.78 6.701 7.218 12.371 15.465 12.371c7.905 0 12.89-3.092 12.89-15.12v-81.798h24.057v82.138c0 24.917-14.606 36.259-35.916 36.259c-19.245 0-30.416-9.967-36.087-21.996m85.07-2.576l19.588-11.341c5.157 8.421 11.859 14.607 23.715 14.607c9.969 0 16.325-4.984 16.325-11.858c0-8.248-6.53-11.17-17.528-15.98l-6.013-2.58c-17.357-7.387-28.87-16.667-28.87-36.257c0-18.044 13.747-31.792 35.228-31.792c15.294 0 26.292 5.328 34.196 19.247l-18.732 12.03c-4.125-7.389-8.591-10.31-15.465-10.31c-7.046 0-11.514 4.468-11.514 10.31c0 7.217 4.468 10.14 14.778 14.608l6.014 2.577c20.45 8.765 31.963 17.7 31.963 37.804c0 21.654-17.012 33.51-39.867 33.51c-22.339 0-36.774-10.654-43.819-24.574"></path></svg>
|
|
Before Width: | Height: | Size: 995 B |
136
main.js
136
main.js
|
@ -1,24 +1,116 @@
|
||||||
import './style.css'
|
// 清理默认样式
|
||||||
import javascriptLogo from './javascript.svg'
|
document.body.style.margin = 0
|
||||||
import viteLogo from '/vite.svg'
|
document.body.style.padding = 0
|
||||||
import { setupCounter } from './counter.js'
|
document.body.style.overflow = 'hidden'
|
||||||
|
|
||||||
document.querySelector('#app').innerHTML = `
|
// 创建一个画布
|
||||||
<div>
|
const canvas = document.createElement('canvas')
|
||||||
<a href="https://vitejs.dev" target="_blank">
|
document.body.appendChild(canvas)
|
||||||
<img src="${viteLogo}" class="logo" alt="Vite logo" />
|
|
||||||
</a>
|
|
||||||
<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" target="_blank">
|
|
||||||
<img src="${javascriptLogo}" class="logo vanilla" alt="JavaScript logo" />
|
|
||||||
</a>
|
|
||||||
<h1>Hello Vite!</h1>
|
|
||||||
<div class="card">
|
|
||||||
<button id="counter" type="button"></button>
|
|
||||||
</div>
|
|
||||||
<p class="read-the-docs">
|
|
||||||
Click on the Vite logo to learn more
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
`
|
|
||||||
|
|
||||||
setupCounter(document.querySelector('#counter'))
|
// 画布填满屏幕
|
||||||
|
const ctx = canvas.getContext('2d')
|
||||||
|
const width = canvas.width = window.innerWidth
|
||||||
|
const height = canvas.height = window.innerHeight
|
||||||
|
|
||||||
|
// 画布中心点
|
||||||
|
const centerX = width / 2
|
||||||
|
const centerY = height / 2
|
||||||
|
|
||||||
|
// 画布中心点的偏移量
|
||||||
|
const offsetX = 0
|
||||||
|
const offsetY = 0
|
||||||
|
|
||||||
|
// 准备一千个小圆点作为粒子
|
||||||
|
const particles = []
|
||||||
|
const particleCount = 1000
|
||||||
|
|
||||||
|
// 生成粒子
|
||||||
|
for (let i = 0; i < particleCount; i++) {
|
||||||
|
particles.push({
|
||||||
|
x: Math.random() * width,
|
||||||
|
y: Math.random() * height,
|
||||||
|
vx: Math.random() * 10 - 5,
|
||||||
|
vy: Math.random() * 10 - 5,
|
||||||
|
radius: Math.random() * 1 + 1
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 绘制粒子
|
||||||
|
function drawParticles () {
|
||||||
|
ctx.fillStyle = '#ff1414'
|
||||||
|
for (let i = 0; i < particleCount; i++) {
|
||||||
|
const particle = particles[i]
|
||||||
|
ctx.beginPath()
|
||||||
|
ctx.arc(particle.x, particle.y, particle.radius, 0, Math.PI * 2)
|
||||||
|
ctx.fill()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 绘制粒子的连线
|
||||||
|
function drawParticlesLine () {
|
||||||
|
ctx.strokeStyle = '#ff1414'
|
||||||
|
for (let i = 0; i < particleCount; i++) {
|
||||||
|
const particle = particles[i]
|
||||||
|
for (let j = 0; j < particleCount; j++) {
|
||||||
|
const otherParticle = particles[j]
|
||||||
|
const dx = particle.x - otherParticle.x
|
||||||
|
const dy = particle.y - otherParticle.y
|
||||||
|
const dist = Math.sqrt(dx * dx + dy * dy)
|
||||||
|
if (dist < 100) {
|
||||||
|
ctx.beginPath()
|
||||||
|
ctx.moveTo(particle.x, particle.y)
|
||||||
|
ctx.lineTo(otherParticle.x, otherParticle.y)
|
||||||
|
ctx.stroke()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 粒子颜色为红色, 大小为 2px
|
||||||
|
function drawParticles2 () {
|
||||||
|
ctx.fillStyle = '#ff1414'
|
||||||
|
for (let i = 0; i < particleCount; i++) {
|
||||||
|
const particle = particles[i]
|
||||||
|
ctx.beginPath()
|
||||||
|
ctx.arc(particle.x, particle.y, 2, 0, Math.PI * 2)
|
||||||
|
ctx.fill()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将粒子的位置更新到下一帧
|
||||||
|
function updateParticles () {
|
||||||
|
for (let i = 0; i < particleCount; i++) {
|
||||||
|
const particle = particles[i]
|
||||||
|
particle.x += particle.vx
|
||||||
|
particle.y += particle.vy
|
||||||
|
if (particle.x < 0) {
|
||||||
|
particle.x = width
|
||||||
|
}
|
||||||
|
if (particle.x > width) {
|
||||||
|
particle.x = 0
|
||||||
|
}
|
||||||
|
if (particle.y < 0) {
|
||||||
|
particle.y = height
|
||||||
|
}
|
||||||
|
if (particle.y > height) {
|
||||||
|
particle.y = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清空画布
|
||||||
|
function clear () {
|
||||||
|
ctx.clearRect(0, 0, width, height)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 绘制
|
||||||
|
function draw () {
|
||||||
|
clear()
|
||||||
|
drawParticles()
|
||||||
|
drawParticlesLine()
|
||||||
|
updateParticles()
|
||||||
|
requestAnimationFrame(draw)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始绘制
|
||||||
|
draw()
|
||||||
|
|
97
style.css
97
style.css
|
@ -1,97 +0,0 @@
|
||||||
:root {
|
|
||||||
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
|
||||||
line-height: 1.5;
|
|
||||||
font-weight: 400;
|
|
||||||
|
|
||||||
color-scheme: light dark;
|
|
||||||
color: rgba(255, 255, 255, 0.87);
|
|
||||||
background-color: #242424;
|
|
||||||
|
|
||||||
font-synthesis: none;
|
|
||||||
text-rendering: optimizeLegibility;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
-webkit-text-size-adjust: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
font-weight: 500;
|
|
||||||
color: #646cff;
|
|
||||||
text-decoration: inherit;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: #535bf2;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
display: flex;
|
|
||||||
place-items: center;
|
|
||||||
min-width: 320px;
|
|
||||||
min-height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 3.2em;
|
|
||||||
line-height: 1.1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#app {
|
|
||||||
max-width: 1280px;
|
|
||||||
margin: 0 auto;
|
|
||||||
padding: 2rem;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo {
|
|
||||||
height: 6em;
|
|
||||||
padding: 1.5em;
|
|
||||||
will-change: filter;
|
|
||||||
transition: filter 300ms;
|
|
||||||
}
|
|
||||||
.logo:hover {
|
|
||||||
filter: drop-shadow(0 0 2em #646cffaa);
|
|
||||||
}
|
|
||||||
.logo.vanilla:hover {
|
|
||||||
filter: drop-shadow(0 0 2em #f7df1eaa);
|
|
||||||
}
|
|
||||||
|
|
||||||
.card {
|
|
||||||
padding: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.read-the-docs {
|
|
||||||
color: #888;
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
|
||||||
border-radius: 8px;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
padding: 0.6em 1.2em;
|
|
||||||
font-size: 1em;
|
|
||||||
font-weight: 500;
|
|
||||||
font-family: inherit;
|
|
||||||
background-color: #1a1a1a;
|
|
||||||
cursor: pointer;
|
|
||||||
transition: border-color 0.25s;
|
|
||||||
}
|
|
||||||
button:hover {
|
|
||||||
border-color: #646cff;
|
|
||||||
}
|
|
||||||
button:focus,
|
|
||||||
button:focus-visible {
|
|
||||||
outline: 4px auto -webkit-focus-ring-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: light) {
|
|
||||||
:root {
|
|
||||||
color: #213547;
|
|
||||||
background-color: #ffffff;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: #747bff;
|
|
||||||
}
|
|
||||||
button {
|
|
||||||
background-color: #f9f9f9;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue