Khoảng giá
Từ: 0 triệu
Đến: Không giới hạn
Balo máy ảnh Peak Design Everyday Backpack Zip 20L (Ash)
Vui lòng gọi
Balo máy ảnh Peak Design Everyday Backpack Zip 20L (Midnight)
Vui lòng gọi
TÚI DJI ĐỰNG MAVIC 3 PRO
Vui lòng gọi
TÚI DJI RS2 PRO
Vui lòng gọi
BALO K&F 13.140
Vui lòng gọi
BALO K&F 13.087
Vui lòng gọi
BALO K&F 13.141
Đơn giá
750,000đ
BALO K&F 13.129
Đơn giá
1,200,000đ
Balo Proweli DC23162 - Màu Đen
Đơn giá
1,650,000đ
Balo Proweli DC23233 - Màu Đen
Đơn giá
1,650,000đ
Balo Lowepro QuadGuard BP X2
Đơn giá
2,990,000đ
Balo máy ảnh Peak Design Everyday Backpack Zip 15L (Midnight)
Đơn giá
4,750,000đ
Balo máy ảnh Peak Design Everyday Backpack Zip 15L (Black)
Đơn giá
4,750,000đ
Balo máy ảnh Peak Design Everyday Backpack Zip 20L (Black)
Đơn giá
5,500,000đ
Balo máy ảnh Peak Design Everyday Backpack v2 (20L, Midnight) | Nhập khẩu
Đơn giá
7,500,000đ
Balo máy ảnh LowePro Fastpack 350AW
Đơn giá
1,740,000đ
Balo Lowepro QuadGuard BP X1
Đơn giá
1,970,000đ
Balo Lowepro QuadGuard BP X3
Đơn giá
3,970,000đ
Balo máy ảnh PGYTECH OneGo Air 20L (Obsidian Black)
HÀNG MỚI ĐÃ TẠM HẾT
Ba lô máy ảnh Think Tank Urban Access Backpack 15
HÀNG MỚI ĐÃ TẠM HẾT
Balo máy ảnh PGYTECH OneMo Lite 22L (Twilight Black)
HÀNG MỚI ĐÃ TẠM HẾT
Balo máy ảnh PGYTECH OneGo Air 25L (Obsidian Black)
HÀNG MỚI ĐÃ TẠM HẾT
Balo máy ảnh PGYTECH OneGo (Obsidian Black)
HÀNG MỚI ĐÃ TẠM HẾT
Balo máy ảnh PGYTECH OneGo (Deep Navy)
HÀNG MỚI ĐÃ TẠM HẾT
Ba lô máy ảnh Think Tank PhotoCross 13 Backpack (Carbon Grey)
HÀNG MỚI ĐÃ TẠM HẾT
Ba lô máy ảnh Think Tank PhotoCross 13 Backpack (Orange Ember)
HÀNG MỚI ĐÃ TẠM HẾT
Ba lô máy ảnh Think Tank PhotoCross 15 Backpack (Orange Ember)
HÀNG MỚI ĐÃ TẠM HẾT
Ba lô máy ảnh Think Tank PhotoCross 15 Backpack (Carbon Grey)
HÀNG MỚI ĐÃ TẠM HẾT
Ba lô máy ảnh Think Tank TrailScape 18L
HÀNG MỚI ĐÃ TẠM HẾT
Ba lô máy ảnh Think Tank StreetWalker V2.0
HÀNG MỚI ĐÃ TẠM HẾT
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());
})();