Khoảng giá
Từ: 0 triệu
Đến: Không giới hạn
Đế gắn phụ kiện tản sáng Godox (S-R1)
Đơn giá
130,000đ
Choá đèn chớp Godox cho dòng AD600 (AD-R6)
Đơn giá
180,000đ
Softbox adapter cho ngàm Bowens SA-01-BW
Đơn giá
300,000đ
Túi đựng đèn Godox AD600 (PB-600)
Đơn giá
300,000đ
Sạc pin cho đèn flash V860 – VC18
Đơn giá
380,000đ
Đế đỡ Godox S2 – Type
Đơn giá
450,000đ
Sạc cho pin Godox WB87 - AD600
Đơn giá
680,000đ
Điều khiển Godox XT-16
Đơn giá
800,000đ
Đầu đèn nối dài cho AD200 (EC200)
Đơn giá
960,000đ
Đầu gắn đèn kéo dài cho Godox AD600 (AD-H600B)
Đơn giá
1,200,000đ
Bộ phát không dây TTL Godox XPRO (For Canon)
Đơn giá
1,300,000đ
Bộ chuyển đổi điện AC-DC Godox AD600
Đơn giá
1,600,000đ
Bộ đổi nguồn AC26 cho đèn Godox AD600 Pro
Đơn giá
2,380,000đ
Pin sạc Godox WB87 cho Godox AD600B/BM
Đơn giá
2,380,000đ
Pin cho AD600pro (WB-26)
Đơn giá
3,600,000đ
Pin Godox WB30P cho đèn AD300 Pro
Đơn giá
7,990,000đ
Chóa đèn Godox AD-R12 cho dòng AD300 Pro / AD400 Pro
Vui lòng gọi
TẢN VUÔNG
Đơn giá
50,000đ
TẢN SÁNG GODOX AK-R11
Đơn giá
170,000đ
KẸP FLASH
Đơn giá
270,000đ
CHÂN ĐÈN FLASH GODOX TT685 FOR FUJIFILM
Đơn giá
300,000đ
CHÂN ĐÈN FLASH GODOX TT685 FOR SONY
Đơn giá
300,000đ
CHÂN ĐÈN FLASH GODOX TT685 FOR NIKON
Đơn giá
300,000đ
CHÂN ĐÈN FLASH GODOX TT685 FOR CANON
Đơn giá
300,000đ
LED FLASH HEAD FOR AD200
Đơn giá
520,000đ
NGÀM TẢN SÁNG GODOX S-R1
Đơn giá
130,000đ
TẢN SÁNG GODOX AK-R22
Đơn giá
420,000đ
BỘ TẢN SÁNG ĐÈN FLASH GODOX AK-R1
BÓNG ĐÈN AD-600 PRO
Pin cho Godox V1 (VB26)
Bộ Barndoor & Snoot Godox BD-10-SN-04 cho dòng AD300 Pro / AD400 Pro
Đầu đèn đôi Godox AD-B2
(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());
})();