Khoảng giá
Từ: 0 triệu
Đến: Không giới hạn
Khẩu nối kéo dài chân SIRUI SL-200
Vui lòng gọi
Khẩu nối kéo dài chân SIRUI SR-66C
Đơn giá
1,680,000đ
Củ chân Sirui A10-R-CN
Đơn giá
2,080,000đ
Sirui L-20S 2-Way Pan/Tilt Head
Đơn giá
2,470,000đ
Củ dầu chân quay VA-5
Đơn giá
2,740,000đ
Củ chân Sirui K-30X
Đơn giá
2,780,000đ
Thanh ngang SIRUI HA-77
Đơn giá
3,140,000đ
Củ chân Sirui K40 II
Đơn giá
3,360,000đ
Củ FD-01 2 tay cầm
Đơn giá
4,889,000đ
Chân Sirui 3T-05PH
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy SIRUI MS-01K
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy SIRUI Traveler 5A Travel Tripod
HÀNG MỚI ĐÃ TẠM HẾT
Chân Máy SIRUI Traveler 5C Travel Tripod
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy SIRUI Traveler 7A Travel Tripod
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy Sirui A1005 Aluminum Tripod with Y-10 Ball Head
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy Sirui AM-223 + B-00K-CN
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy quay Sirui SH05 CN có củ chân
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy Carbon Sirui T-025SK B-00K Ball Head
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy SIRUI Traveler 7C Travel Tripod
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy Sirui SH25 CN có củ chân 78-155cm
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy Carbon Sirui AM-254
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy Sirui AM-225 + B-00K-CN
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy Sirui SH15 CN có củ chân 91-190cm
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy Sirui A1205 Carbon Fiber Tripod with Y-11 Ball Head
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy SIRUI AM2-Series AM-284 Tripod + Ball Head A10R
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy SIRUI AM2-Series AM-284 Tripod
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy Carbon Sirui AM-254 + Ballhead A10R
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy SIRUI R-2214X Carbon
HÀNG MỚI ĐÃ TẠM HẾT
Sirui PH-20 Gimbal Head
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy Carbon Sirui R-3213X
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy Sirui SR-3203 SR Carbon
Chân SIRUI Carbon ST-125 + Ball ST-10X 38-159cm
Chân Sirui Carbon W-2204 (Chống nước)
Chân máy Sirui SR3204 Carbon
(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());
})();