Máy ảnh Sony ZV-1 (Black) | Chính hãng
Giá giao động:
15,990,000đ
Giảm thêm tiền mặt
500,000đ
Tặng 06 tháng BH hãng (khi kích hoạt MySony từ 07/04 - 31/03/2026)
Máy ảnh Sony ZV-1 (Black) | Nhập Khẩu
Giá từ:
14,500,000đ
Máy ảnh Canon PowerShot G7 X Mark III (Black)
Giá giao động:
30,000,000đ
Máy ảnh Sony ZV-1 II (Black) | Chính Hãng
Giá giao động:
20,990,000đ
Tặng 06 tháng BH hãng (khi kích hoạt MySony từ 07/04 - 31/03/2026)
MÁY ẢNH LEICA Q3
Vui lòng gọi
Máy ảnh OM System Tough TG-7
Vui lòng gọi
Máy ảnh x half digital
Vui lòng gọi
Máy ảnh Fujifilm X100F (Black) | Chính hãng
Vui lòng gọi
Máy ảnh Fujifilm SHARE SP-2 (Black) | Chính hãng
Vui lòng gọi
Máy ảnh Canon PowerShot G5 X Mark II
Vui lòng gọi
FUJIFILM X HALF SILVER
Vui lòng gọi
Máy ảnh compact Leica D-LUX 5
Vui lòng gọi
Máy ảnh compact Canon PowerShot A2500
Vui lòng gọi
Máy ảnh Olympus Tough TG-7 Black
Vui lòng gọi
Máy ảnh Olympus Tough TG-7 Red
Vui lòng gọi
Máy ảnh Panasonic Lumix LX100 II
Vui lòng gọi
Máy ảnh Leica V-LUX 5 | Chính hãng
Vui lòng gọi
Máy ảnh Leica C-Lux (Midnight Blue) | Chính hãng
Vui lòng gọi
Máy ảnh Leica X-U (Typ 113) | Chính hãng
Vui lòng gọi
Máy ảnh Leica Q-P | Chính hãng
Vui lòng gọi
Máy ảnh Leica Q2 "Daniel Craig x Greg Williams" | Chính hãng
Vui lòng gọi
Máy Ảnh Leica Q Titanium Gray
Vui lòng gọi
Máy ảnh Leica Q2 Reporter | Nhập Khẩu
Vui lòng gọi
Máy ảnh Sony ZV-1F Vlogger Accessory Kit (White) | Chính Hãng
Vui lòng gọi
Máy ảnh Fujifilm X100F (Silver) | Chính hãng
Vui lòng gọi
Máy ảnh Fujifilm X100F (Brown) | Chính hãng
Vui lòng gọi
Máy ảnh Fujifilm XF10 (Gold) | Chính hãng
Vui lòng gọi
Máy ảnh Nikon COOLPIX P1000
Giá từ:
22,000,000đ
Máy ảnh Nikon COOLPIX P1000 | Chính hãng
Giá từ:
22,000,000đ
Máy ảnh Leica D‑Lux 8
Giá từ:
42,000,000đ
Máy ảnh FUJIFILM X100 VI Black
Máy ảnh FUJIFILM X100 VI Silver
Máy ảnh FUJIFILM X100 VI
Máy ảnh Leica Q2 Monochrom
Máy ảnh Leica Q2 “Ghost” By Hodinkee
Máy ảnh Leica Q2 Dawn By Seal
coolpix p1100
Máy ảnh Sony DSC-W830
Máy ảnh Sony Cyber-shot DSC-HX99 (Chính hãng)
Máy ảnh Sony ZV-1F (Black) | Chính Hãng
Máy ảnh Sony ZV-1F (White) | Chính Hãng
Máy Ảnh Sony RX100M3 (DSC-RX100M3)
Bộ máy ảnh Sony ZV-1 Storytelling Kit (White) | Chính Hãng
Bộ máy ảnh Sony ZV-1 Storytelling Kit (Black) | Chính Hãng
Máy Ảnh Canon PowerShot V1 | Chính Hãng
Máy ảnh Sony Cyber-shot DSC-RX100 Mark VII | Chính hãng
Máy ảnh Leica D-Lux 7 (White)
Máy ảnh Compact Ricoh GR IIIx | Chính hãng
Máy ảnh Compact Ricoh GR III Standard| Chính hãng
Máy ảnh 360 Ricoh THETA Z1 | Chính hãng
Máy ảnh Compact Ricoh GR III Street Edition | Chính hãng
Máy ảnh Leica D-Lux 7 (Black)
Máy ảnh Fujifilm FinePix XP140 (White) | Chính Hãng
Máy ảnh Fujifilm FinePix XP130 (Silver) | Chính hãng
Máy ảnh Sigma DP1 Quattro + LCD View Finder Kit LVF-01
MÁY ẢNH CANON POWER SHOT A2300
Máy ảnh Panasonic Lumix DMC-FZ1000
Máy Ảnh Sony DSC-W810
MÁY ẢNH CANON POWERSHOT D10
Máy ảnh Fujifilm FinePix XP140 (Lime) | Chính Hãng
Máy ảnh Fujifilm FinePix XP140 (Yellow) | Chính Hãng
Máy ảnh Fujifilm FinePix XP130 (White) |Chính hãng
Máy ảnh Fujifilm FinePix XP130 (Yellow) | Chính hãng
Máy ảnh Fujifilm FinePix XP130 (Lime) | Chính hãng
Máy ảnh Fujifilm FinePix XP130 (Sky Blue) | Chính hãng
Máy ảnh Sony Cyber-shot DSC-WX350
Máy ảnh Canon PowerShot SX740 HS (Silver)
Máy Ảnh Canon PowerShot SX740 HS (Black)
(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());
})();