Trang chủ
>
tui-may-anh >
tui-may-anh BILLINGHAM
Túi máy ảnh Billingham Airline Stowaway - Sage Fibrenyte/Chocolate
MỚI 100%
Đơn giá:
7,400,000đ
Giảm: 0đ
7,400,000đ
Hotline đặt hàng:
0937148222
(08:00-20:00)
KHUYẾN MÃI ÁP DỤNG TỪ
đến
Thông số nổi bật
- Chất liệu Sage Fibrenyte chống nước, phối da Chocolate - Ngăn chính đựng body nhỏ gọn + phụ kiện - Rất phù hợp cho du lịch hoặc chụp ảnh đời thường - Thiết kế nhẹ, đeo vai hoặc xách tay tiện dụng
Tổng quan
Sản Phẩm khác
Sản Phẩm cũ
Tính Năng
Sản phẩm bao gồm
Thông số
Túi máy ảnh Billingham S3 - Navy/ Chocolate
Đơn giá
10,100,000đ
Túi máy ảnh Billingham S3 - Khaki/Tan
Đơn giá
10,100,000đ
Túi máy ảnh Billingham S3 - Sage Fibrenyte/Chocolate
Đơn giá
10,100,000đ
Túi máy ảnh Billingham 207 - Black Fibrenyte/Black
Đơn giá
16,100,000đ
Túi máy ảnh Billingham 207 - Khaki Fibrenyte/ Chocolate
Đơn giá
16,100,000đ
Túi máy ảnh Billingham 207 - Sage Fibrenyte/Chocolate
Đơn giá
16,100,000đ
Túi máy ảnh Billingham 307 - Black Fibrenyte/Black
Đơn giá
17,400,000đ
Túi máy ảnh Billingham 307 - Khaki Fibrenyte/Chocolate
Đơn giá
17,400,000đ
Túi máy ảnh Billingham 225 MkII - Black Fibrenyte/ Black
Đơn giá
16,000,000đ
Túi máy ảnh Billingham 225 MkII - Sage Fibrenyte/ Chocolate
Đơn giá
16,000,000đ
Túi máy ảnh Billingham 335 MkII - Khaki/Tan
Đơn giá
17,000,000đ
Túi máy ảnh Billingham 335 MkII - Black Fibrenyte/Black
Đơn giá
17,000,000đ
Túi máy ảnh Billingham 335 MkII - Sage Fibrenyte/Chocolate
Đơn giá
17,000,000đ
Túi máy ảnh Billingham 335 MkII - Navy/Chocolate
Đơn giá
17,000,000đ
Túi máy ảnh Billingham 445 MkII - Khaki/Tan
Đơn giá
17,900,000đ
- Chất liệu Sage Fibrenyte chống nước, phối da Chocolate - Ngăn chính đựng body nhỏ gọn + phụ kiện - Rất phù hợp cho du lịch hoặc chụp ảnh đời thường - Thiết kế nhẹ, đeo vai hoặc xách tay tiện dụng
Tags
×
1 / 5
(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());
})();