Khoảng giá
Từ: 0 triệu
Đến: Không giới hạn
Ba lô máy ảnh Lowepro Photo Active 300 AW (đen/xám)
Ba lô máy ảnh Think Tank Airport TakeOff V2.0
Ba lô máy ảnh Think Tank Urban Access Sling 8
Ba lô máy ảnh ThinkTank DarkLight Backpack 14L Black
Ba lô máy ảnh ThinkTank DarkLight Backpack 20L Black
Ba lô máy ảnh ThinkTank DarkLight Backpack 14L Montane Green
Ba lô máy ảnh ThinkTank DarkLight® Backpack 20L Montane Green
Ba lô máy ảnh ThinkTank Walker Pro 16L
Ba lô máy ảnh ThinkTank Walker Pro 24L
Ba lô máy ảnh ThinkTank Walker Pro 30L
Ba lô máy ảnh Think Tank Retrospective Backpack 15 - Pinestone
Ba lô máy ảnh Think Tank Retrospective Backpack 15 - Black
Ba lô máy ảnh ThinkTank BackLight® Sprint Montane Green
Ba lô máy ảnh ThinkTank BackLight® Sprint Slate Black
Ba lô máy ảnh ThinkTank BackLight® 18L Montane Green
Ba lô máy ảnh ThinkTank BackLight® 18L Slate Black
Ba lô máy ảnh ThinkTank BackLight® 26L Montane Green
Ba lô máy ảnh ThinkTank BackLight® 26L Slate Black
Ba lô máy ảnh ThinkTank BackLight® 36L Montane Green
Ba lô máy ảnh ThinkTank BackLight® 36L Slate Black
Ba lô máy ảnh Think Tank BackLight 18L Photo Daypack - Charcoal
Ba lô máy ảnh Think Tank FirstLight 46L+
Ba lô máy ảnh Think Tank BackLight 18L Photo Daypack - Woodland
Ba lô máy ảnh Think Tank BackLight 26L Photo Daypack - Charcoal
Ba lô máy ảnh Think Tank BackLight 26L Photo Daypack - Woodland
Ba lô máy ảnh Think Tank BackLight 36L Photo Daypack - Charcoal
Ba lô máy ảnh Think Tank BackLight 36L Photo Daypack - Woodland
Ba lô máy ảnh Think Tank BackLight Elite 45L - Storm Grey
Ba lô máy ảnh Think Tank PhotoCross 13 Backpack - Carbon Grey
Ba lô máy ảnh Think Tank PhotoCross 15 Backpack - Carbon Grey
Ba lô máy ảnh Think Tank PhotoCross 13 Backpack - Orange Ember
Ba lô máy ảnh Think Tank BackLight Sprint - Grey
Ba lô máy ảnh Think Tank BackLight Sprint - Green
TÚI DJI ĐỰNG MAVIC 3 PRO
TÚI DJI RS2 PRO
BALO K&F 13.141
BALO K&F 13.129
Balo Proweli DC23162 - Màu Đen
Balo Proweli DC23233 - Màu Đen
Balo Lowepro QuadGuard BP X2
Balo máy ảnh Peak Design Everyday Backpack Zip 15L (Midnight)
Balo máy ảnh Peak Design Everyday Backpack Zip 15L (Black)
Balo máy ảnh Peak Design Everyday Backpack Zip 20L (Black)
Balo máy ảnh Peak Design Everyday Backpack v2 (20L, Midnight) | Nhập khẩu
Balo máy ảnh LowePro Fastpack 350AW
Balo Lowepro QuadGuard BP X1
Balo Lowepro QuadGuard BP X3
Balo máy ảnh PGYTECH OneGo Air 20L (Obsidian Black)
Ba lô máy ảnh Think Tank Urban Access Backpack 15
Balo máy ảnh PGYTECH OneMo Lite 22L (Twilight Black)
Balo máy ảnh PGYTECH OneGo Air 25L (Obsidian Black)
Balo máy ảnh PGYTECH OneGo (Obsidian Black)
Balo máy ảnh PGYTECH OneGo (Deep Navy)
Ba lô máy ảnh Think Tank PhotoCross 13 Backpack (Carbon Grey)
Ba lô máy ảnh Think Tank PhotoCross 13 Backpack (Orange Ember)
Ba lô máy ảnh Think Tank PhotoCross 15 Backpack (Orange Ember)
Ba lô máy ảnh Think Tank PhotoCross 15 Backpack (Carbon Grey)
Ba lô máy ảnh Think Tank TrailScape 18L
Ba lô máy ảnh Think Tank StreetWalker V2.0
Ba lô máy ảnh Think Tank Urban Approach 15
Ba lô máy ảnh Think Tank BackStory 13
Ba lô máy ảnh Think Tank StreetWalker Pro V2.0
Ba lô máy ảnh Think Tank Airport Essentials
Ba lô máy ảnh Think Tank BackLight 18L Photo Daypack (Charcoal)
Ba lô máy ảnh Think Tank BackLight 18L Photo Daypack (Woodland)
Ba lô máy ảnh Think Tank BackStory 15
Ba lô máy ảnh Think Tank Airport Commuter
Ba lô máy ảnh Think Tank Urban Access Backpack 13
Ba lô máy ảnh Think Tank Glass Limo
Ba lô máy ảnh Think Tank StreetWalker HardDrive V2.0
Ba lô máy ảnh Think Tank Rotation 22L Backpack
Ba lô máy ảnh Think Tank Retrospective Backpack 15 (Black)
Ba lô máy ảnh Think Tank BackLight 26L Photo Daypack (Charcoal)
Ba lô máy ảnh Think Tank BackLight 26L Photo Daypack (Woodland)
Vali máy ảnh Think Tank Airport Advantage (Black)
Vali đựng chân đèn Think Tank Stand Manager 52
Vali máy ảnh Think Tank Essentials Convertible Rolling Backpack
Ba lô máy ảnh Think Tank Airport Accelerator
Vali máy ảnh Think Tank Airport Navigator
Ba lô máy ảnh Think Tank Shape Shifter 17 V2.0
Ba lô máy ảnh Think Tank BackLight 36L Photo Daypack (Charcoal)
Ba lô máy ảnh Think Tank BackLight 36L Photo Daypack (Woodland)
Ba lô máy ảnh Think Tank Rotation 34L Backpack
Vali máy ảnh Think Tank Airport Advantage XT (Black)
Ba lô máy ảnh Think Tank StreetWalker Rolling Backpack V2.0
Vali đựng chân máy Think Tank Video Tripod Manager 44
Ba lô máy ảnh Think Tank FirstLight 35L
Vali máy ảnh Think Tank Airport TakeOff V2.0
Vali máy ảnh Think Tank Airport Roller Derby
Vali máy ảnh Think Tank Airport International V3.0
Ba lô máy ảnh Think Tank BackLight Elite 45L (Storm Grey)
Vali máy ảnh Think Tank Airport Security V3.0
Ba lô máy ảnh Think Tank Rotation Pro 50+L Backpack
Vali máy ảnh Think Tank Logistics Manager 30 V2.0
Vali máy ảnh Think Tank Production Manager 40 V2.0
Vali đựng thiết bị studio Think Tank Production Manager 50 V2.0
Balo YASCIQ đa chức năng
Túi máy ảnh hiệu BENRO-SWIFT 200 phiên bản Sony Alpha | Chính hãng
Balo máy ảnh National Geographic Africa Camera Sling NG A4569
Balo Lowepro StreetLine BP 250
BA LÔ MÁY ẢNH MANFROTTO BACKPACK TRAVEL
Balo Vanguard VEO 48BF
Balo máy ảnh PGYTECH OneMo 25L + Túi đeo chéo (Olivine Camo)
Balo máy ảnh PGYTECH OneMo 25L + Túi đeo chéo (Twilight 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());
})();