Khoảng giá
Từ: 0 triệu
Đến: Không giới hạn
OLYMPUS ZUIKO DIGITAL 14-45mm F3.5-5.6
Vui lòng gọi
ỐNG KÍNH OLYMPUS M.ZUIKO 15mm F8 BODY
Vui lòng gọi
OLYMPUS ZUIKO DIGITAL 12-60mm F2.8-4
Giá từ:
3,500,000đ
Ống kính M.Zuiko Digital ED 17mm F1.2 PRO
Vui lòng gọi
Ống kính M.Zuiko Digital ED 25mm F1.2 PRO
Vui lòng gọi
Ống kính M.Zuiko Digital ED 45mm F1.2 PRO
Vui lòng gọi
Ống kính M.ZUIKO DIGITAL ED 8-25mm F4.0 PRO BLK
Vui lòng gọi
Ống kính M.ZUIKO DIGITAL ED 40-150mm F2.8 PRO
Vui lòng gọi
Ống kính M.ZUIKO DIGITAL ED 12mm F2.0 SLV
Vui lòng gọi
LENS OLYMPUS M.ZUIKO 12-100mm F4 IS PRO
Vui lòng gọi
Ống kính Olympus M.Zuiko ED 30mm F3.5 Macro Lens
Giá giao động:
11,990,000đ
Ống kính Olympus M.Zuiko Digital ED 45mm F1.8 Lens - Silver
Giá giao động:
11,990,000đ
Ống kính Olympus M.Zuiko Digital ED 45mm F1.8 Lens
Giá giao động:
11,990,000đ
Ống kính Olympus OM SYSTEM M.ZUIKO DIGITAL ED 75-300mm F4.8-6.7 II Telephoto Zoom
Giá giao động:
15,990,000đ
Ống kính OLYMPUS Single-Focus Lens M.ZUIKO ED 60mm F2.8 Macro EMS w/ Tracking
Giá giao động:
15,990,000đ
Ống kính Olympus M.ZUIKO DIGITAL ED 12-45mm f/4 PRO
Giá giao động:
20,990,000đ
Ống kính OM System M.Zuiko 40-150mm F4 Pro Lens
Giá giao động:
21,990,000đ
Ống kính OM SYSTEM M.Zuiko Digital ED 20mm F1.4 PRO
Giá giao động:
21,990,000đ
Ống kính Olympus M.Zuiko Digital ED 12-40mm f2.8 II Lens
Giá giao động:
28,990,000đ
Ống kính Olympus M.ZUIKO DIGITAL ED 8mm f/1.8 Fisheye Lens PRO
Giá giao động:
31,990,000đ
Ống kính OM System ED 8-25mm F4.0 Pro M.Zuiko Digital Lens
Giá giao động:
31,990,000đ
Ống kính Olympus M.Zuiko Digital ED 7-14mm f2.8 PRO Lens
Giá giao động:
40,990,000đ
Ống kính OM System M.Zuiko ED 12-100mm f4 IS Pro Lens
Giá giao động:
40,990,000đ
Ống kính OM System M.Zuiko ED 90mm F3.5 Macro IS Pro Lens
Giá giao động:
43,990,000đ
Ống kính OM SYSTEM M.Zuiko ED 2,8/40-150 mm PRO
Giá giao động:
43,990,000đ
Ống kính OM SYSTEM M. ZUIKO DIGITAL ED 150-600mm F5.0-6.3 IS
Giá giao động:
66,990,000đ
Ống kính Olympus M.Zuiko Digital ED 300mm F4 IS PRO Lens
Giá giao động:
76,990,000đ
(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());
})();