Repository navigation
Expand file tree
/
Copy pathSnow.js
More file actions
107 lines (91 loc) · 3.76 KB
/
Copy pathSnow.js
File metadata and controls
107 lines (91 loc) · 3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
let icon = '';
fetch('http://dataservice.accuweather.com/forecasts/v1/daily/1day/324505?apikey=SD3IOUbAchPsZCz6KJoAfdoReCkm2wbk&metric=true')
.then(function (resp) { return resp.json() })
.then(function data(data) {
console.log(data);
icon = data.DailyForecasts[0].Day.Icon;
const elem = document.getElementById('icon');
elem.src = `https://www.accuweather.com/images/weathericons/${icon}.svg`
atr = elem.getAttribute('src')
console.log(atr);
elem.onload = function () {
var canvas = document.getElementById("canvas_icon");
var ctx = canvas.getContext("2d");
ctx.drawImage(elem, 100, 100);
};
interval = setInterval(elem.onload, 33)
})
.catch(function () { });
console.log(icon);
if (icon === 29 || (icon >= 19 && icon <= 23)) {
$(document).ready(function () {
//canvas init
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
//canvas dimensions
var W = 500;
var H = 500;
canvas.width = W;
canvas.height = H;
//snowflake particles
var mp = 25; //max particles
var particles = [];
for (var i = 0; i < mp; i++) {
particles.push({
x: Math.random() * W, //x-coordinate
y: Math.random() * H, //y-coordinate
r: Math.random() * 4 + 1, //radius
d: Math.random() * mp //density
})
}
//Lets draw the flakes
function draw() {
ctx.clearRect(0, 0, W, H);
ctx.fillStyle = "rgba(255, 255, 255, 0.8)";
ctx.beginPath();
for (var i = 0; i < mp; i++) {
var p = particles[i];
ctx.moveTo(p.x, p.y);
ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2, true);
}
ctx.fill();
update();
}
//Function to move the snowflakes
//angle will be an ongoing incremental flag. Sin and Cos functions will be applied to it to create vertical and horizontal movements of the flakes
var angle = 0;
function update() {
angle += 0.01;
for (var i = 0; i < mp; i++) {
var p = particles[i];
//Updating X and Y coordinates
//We will add 1 to the cos function to prevent negative values which will lead flakes to move upwards
//Every particle has its own density which can be used to make the downward movement different for each flake
//Lets make it more random by adding in the radius
p.y += Math.cos(angle + p.d) + 1 + p.r / 2;
p.x += Math.sin(angle) * 2;
//Sending flakes back from the top when it exits
//Lets make it a bit more organic and let flakes enter from the left and right also.
if (p.x > W + 5 || p.x < -5 || p.y > H) {
if (i % 3 > 0) //66.67% of the flakes
{
particles[i] = { x: Math.random() * W, y: -10, r: p.r, d: p.d };
}
else {
//If the flake is exitting from the right
if (Math.sin(angle) > 0) {
//Enter from the left
particles[i] = { x: -5, y: Math.random() * H, r: p.r, d: p.d };
}
else {
//Enter from the right
particles[i] = { x: W + 5, y: Math.random() * H, r: p.r, d: p.d };
}
}
}
}
}
//animation loop
setInterval(draw, 33);
})
}