Camera Insta360 GO 3 | Chính hãng (128GB)
Giá giao động:
11,520,000đ
Insta360 ONE R Aerial Edition for Mavic Pro | Chính hãng
Giá giao động:
12,689,000đ
Insta360 ONE R Aerial Edition for Mavic 2 | Chính hãng
Giá giao động:
12,689,000đ
Insta360 ONE RS Twin Edition
Giá giao động:
13,890,000đ
Insta360 ONE RS 1-Inch 360 Edition
Giá giao động:
20,550,000đ
Insta360 ONE R 1-Inch Edition | Chính hãng
Giá giao động:
12,380,000đ
Insta360 X4 (One X4)
Giá giao động:
13,290,000đ
CAMERA INSTA360 GO 3S 128GB (MIDNIGHT BLACK)
Giá giao động:
11,590,000đ
Insta360 ONE R 4K Edition | Chính hãng
Giá giao động:
6,989,000đ
Camera Insta360 GO 2 | Chính hãng (64GB)
Vui lòng gọi
Camera Insta360 ONE X2 | Chính hãng
Vui lòng gọi
Camera Insta360 GO 2 | Chính hãng (32GB)
Vui lòng gọi
Insta360 Flow Standalone (Gray)
Vui lòng gọi
Insta360 GO Ultra Creator Bundle ( Arctic White )
Vui lòng gọi
Insta360 GO Ultra Creator Bundle ( Midnight Black )
Vui lòng gọi
Action Camera Insta360 GO 3S Standalone Camera Arctic White 64GB
Giá giao động:
6,500,000đ
Action Camera Insta360 GO 3S Standalone Camera Midnight Black 64GB
Giá giao động:
6,500,000đ
Action Camera Insta360 GO 3S Standalone Camera Arctic White 128GB
Giá giao động:
7,300,000đ
Action Camera Insta360 GO 3S Standalone Camera Midnight Black 128GB
Giá giao động:
7,300,000đ
Insta360 Ace Pro Standalone
Giá giao động:
8,690,000đ
Insta360 Ace Standalone
Giá giao động:
9,190,000đ
Insta360 ONE R 360° Edition | Chính hãng
Giá giao động:
9,680,000đ
Insta360 X3 (One X3)
Giá giao động:
10,290,000đ
Action Camera Insta360 Ace Pro 2
Giá giao động:
10,590,000đ
Camera Insta360 GO 3 | Chính hãng (64GB)
Giá giao động:
10,790,000đ
Action Camera Insta360 GO 3S Standard Edition Arctic White 64GB
Giá giao động:
10,890,000đ
Action Camera Insta360 GO 3S Standard Edition Midnight Black 64GB
Giá giao động:
10,890,000đ
Camera Insta360 Sphere
Giá từ:
6,700,000đ
Action Camera Insta360 Ace Pro 2 Dual Battery Standard Bundle
Giá giao động:
11,190,000đ
Action Camera Insta360 GO 3S Standard Edition Arctic White 128GB
Giá giao động:
11,590,000đ
Action Camera Insta360 GO 3S Standard Edition Midnight Black 128GB
Action Camera Insta360 GO Ultra Standard Bundle (Arctic White)
Action Camera Insta360 GO Ultra Standard Bundle (Midnight Black)
Insta360 ONE R Twin Edition | Chính hãng
Action Camera Insta360 X4 Standard Bundle
Action Camera Insta360 X5 Standard Bundle
Insta360 X5 Satin White Limited Edition
Insta360 Ace Pro 2 MM93 Edition
Insta360 X5 BMW Motorrad Edition
Action Camera Insta360 X5 Essentials Bundle
Insta360 Pro 2 | Chính hãng
Camera Insta360 Titan 11K Cinematic 360/VR | Chính Hãng
(function () {
const requestAnimFrame = (function () {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
function (callback) {
window.setTimeout(callback, 1000 / 60);
};
})();
const hieuUngPhaoHoa = {
canvas: document.getElementById('hieuUngPhaoHoa__canvas'),
ctx: null,
cw: window.innerWidth,
ch: window.innerHeight,
fireworks: [],
particles: [],
colors: [0, 60, 300], // Mảng các màu
hue: 0,
timerTotal: 30, // Giảm thời gian giữa các lần bắn
timerTick: 0,
isActive: true, // Biến để kiểm soát trạng thái hoạt động
init: function () {
this.ctx = this.canvas.getContext('2d');
this.canvas.width = this.cw;
this.canvas.height = this.ch;
this.loop();
// Tự động dừng sau 5 giây
setTimeout(() => {
this.isActive = false;
}, 5000);
},
calculateDistance: function (p1x, p1y, p2x, p2y) {
const xDistance = p1x - p2x;
const yDistance = p1y - p2y;
return Math.sqrt(Math.pow(xDistance, 2) + Math.pow(yDistance, 2));
},
random: function (min, max) {
return Math.random() * (max - min) + min;
},
createParticles: function (x, y) {
let particleCount = 30;
// Chọn màu ngẫu nhiên từ mảng
this.hue = this.colors[Math.floor(Math.random() * this.colors.length)];
while (particleCount--) {
this.particles.push(new Particle(x, y, this));
}
},
// Main loop
loop: function () {
if (!this.isActive && this.fireworks.length === 0 && this.particles.length === 0) {
return; // Dừng animation khi hết pháo hoa
}
requestAnimFrame(this.loop.bind(this));
this.hue += 0.5;
this.ctx.globalCompositeOperation = 'destination-out';
this.ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';
this.ctx.fillRect(0, 0, this.cw, this.ch);
this.ctx.globalCompositeOperation = 'lighter';
let i = this.fireworks.length;
while (i--) {
this.fireworks[i].draw();
this.fireworks[i].update(i);
}
i = this.particles.length;
while (i--) {
this.particles[i].draw();
this.particles[i].update(i);
}
// Tự động bắn pháo hoa nếu đang hoạt động
if (this.isActive && this.timerTick >= this.timerTotal) {
this.fireworks.push(new Firework(
this.cw / 2, this.ch,
this.random(0, this.cw),
this.random(0, this.ch / 2),
this
));
this.timerTick = 0;
} else {
this.timerTick++;
}
}
};
// Firework class
class Firework {
constructor(sx, sy, tx, ty, main) {
this.main = main;
this.x = sx;
this.y = sy;
this.sx = sx;
this.sy = sy;
this.tx = tx;
this.ty = ty;
this.distanceToTarget = main.calculateDistance(sx, sy, tx, ty);
this.distanceTraveled = 0;
this.coordinates = [];
this.coordinateCount = 3;
while (this.coordinateCount--) {
this.coordinates.push([this.x, this.y]);
}
this.angle = Math.atan2(ty - sy, tx - sx);
this.speed = 2;
this.acceleration = 1.05;
this.brightness = main.random(50, 70);
this.targetRadius = 1;
}
update(index) {
this.coordinates.pop();
this.coordinates.unshift([this.x, this.y]);
if (this.targetRadius < 8) {
this.targetRadius += 0.3;
} else {
this.targetRadius = 1;
}
this.speed *= this.acceleration;
const vx = Math.cos(this.angle) * this.speed;
const vy = Math.sin(this.angle) * this.speed;
this.distanceTraveled = this.main.calculateDistance(
this.sx, this.sy, this.x + vx, this.y + vy
);
if (this.distanceTraveled >= this.distanceToTarget) {
this.main.createParticles(this.tx, this.ty);
this.main.fireworks.splice(index, 1);
} else {
this.x += vx;
this.y += vy;
}
}
draw() {
this.main.ctx.beginPath();
this.main.ctx.moveTo(
this.coordinates[this.coordinates.length - 1][0],
this.coordinates[this.coordinates.length - 1][1]
);
this.main.ctx.lineTo(this.x, this.y);
this.main.ctx.strokeStyle = `hsl(${this.main.hue}, 100%, ${this.brightness}%)`;
this.main.ctx.stroke();
}
}
// Particle class
class Particle {
constructor(x, y, main) {
this.main = main;
this.x = x;
this.y = y;
this.coordinates = [];
this.coordinateCount = 5;
while (this.coordinateCount--) {
this.coordinates.push([this.x, this.y]);
}
this.angle = main.random(0, Math.PI * 2);
this.speed = main.random(1, 10);
this.friction = 0.95;
this.gravity = 1;
this.hue = main.random(main.hue - 20, main.hue + 20);
this.brightness = main.random(50, 80);
this.alpha = 1;
this.decay = main.random(0.015, 0.03);
}
update(index) {
this.coordinates.pop();
this.coordinates.unshift([this.x, this.y]);
this.speed *= this.friction;
this.x += Math.cos(this.angle) * this.speed;
this.y += Math.sin(this.angle) * this.speed + this.gravity;
this.alpha -= this.decay;
if (this.alpha <= this.decay) {
this.main.particles.splice(index, 1);
}
}
draw() {
this.main.ctx.beginPath();
this.main.ctx.moveTo(
this.coordinates[this.coordinates.length - 1][0],
this.coordinates[this.coordinates.length - 1][1]
);
this.main.ctx.lineTo(this.x, this.y);
this.main.ctx.strokeStyle = `hsla(${this.hue}, 100%, ${this.brightness}%, ${this.alpha})`;
this.main.ctx.stroke();
}
}
// Khởi chạy khi trang load xong
//window.addEventListener('load', () => hieuUngPhaoHoa.init());
})();