Canon RF 75-300mm f/4-5.6
Vui lòng gọi
ỐNG KÍNH CANON RF 35mm F1.8 MACRO IS STM
Ống kính Canon RF 15-35mm f/2.8L IS USM | Chính hãng
Giá từ:
39,500,000đ
ỐNG KÍNH CANON RF 50mm F1.4 L VCM CHÍNH HÃNG
Giá giao động:
34,000,000đ
ỐNG KÍNH CANON RF 28-70mm F2.8 IS STM (HÃNG)
Giá giao động:
28,900,000đ
ỐNG KÍNH CANON RF 28-70mm F2 L USM (HÃNG)
Giá giao động:
86,980,000đ
Ống kính Canon RF 70-200mm f/4L IS USM | Chính Hãng
ỐNG KÍNH CANON RF 24-105mm F2.8 L IS USM Z
Giá từ:
74,000,000đ
Ống kinh Canon RF 85mm f/2 Macro IS STM | Chính hãng
Giá từ:
10,990,000đ
Ống kính Canon RF 600mm f/11 IS STM | Chính hãng
Giá giao động:
20,480,000đ
Ống kính Canon RF 50mm f/1.2L USM | Chính hãng
ỐNG KÍNH CANON RF 100-500mm F4.5-7.1 L IS USM
Giá từ:
52,000,000đ
Ống kính Canon RF 100-300mm F2.8L IS USM
Vui lòng gọi
Ống Kính Canon RF 200-800mm f/6.3-9 IS USM | Chính Hãng
Vui lòng gọi
Ống kính Canon RF 400mm F2.8L IS USM
Vui lòng gọi
Ống kính Canon RF 600mm F4L IS USM
Vui lòng gọi
Ống kính Canon RF 10-20mm F4L IS STM
Giá từ:
47,900,000đ
Ống kính Canon RF 50mm F1.4L VCM
Vui lòng gọi
Ống kính Canon RF 1200mm f/8 L IS USM | Chính hãng
Vui lòng gọi
ỐNG KÍNH CANON RF 24-50mm F4.5-6.3 IS STM
Giá từ:
3,890,000đ
ỐNG KÍNH CANON RF 28mm F2.8 STM
Giá từ:
7,300,000đ
Canon EF-M 55-200mm f/4.5-6.3 IS STM | Nhập Khẩu
Giá từ:
7,880,000đ
Canon EF-M 55-200mm f/4.5-6.3 IS STM | Chính hãng
Giá từ:
7,880,000đ
ỐNG KÍNH CANON RF-S 18-150mm F3.5-6.3 IS STM
Giá từ:
11,700,000đ
ỐNG KÍNH CANON RF 100-400mm F5.6-8 IS USM
Giá từ:
15,000,000đ
ỐNG KÍNH CANON RF 100mm F2.8 L MACRO IS USM
Giá từ:
26,000,000đ
ỐNG KÍNH CANON RF 50mm F1.2 L USM
Giá từ:
37,500,000đ
ỐNG KÍNH CANON RF 85mm F1.2 L USM
Giá từ:
53,000,000đ
ỐNG KÍNH CANON RF 28-70 F2 L USM
Giá từ:
62,500,000đ
LENS CANON RF-S 18-45mm F4.5-6.3 IS STM (HÃNG) TRẮNG
Giá giao động:
1,500,000đ
Ống kính Canon EF-M 15-45mm f3.5-6.3 IS STM (Graphite)
Ống kính Canon EF-M 15-45mm f3.5-6.3 IS STM (Silver)
Ống kính Canon RF-S 14-30mm F4-6.3 IS STM PZ
ỐNG KÍNH CANON RF 50mm F1.8 STM (HÃNG)
Ống kính Canon EF-M 22mm f/2 STM
Ống Kính Canon RF 16mm f/2.8 STM | Nhập Khẩu
ỐNG KÍNH CANON RF 16mm F2.8 STM
Ống kính Canon RF 16mm f/2.8 STM | Chính hãng
Ống kính Canon EF-M 11-22mm f/4-5.6 IS STM
ỐNG KÍNH CANON RF 24-105mm F4-7.1 IS STM
Ống Kính Canon RF 45mm F/1.2 STM | Chính Hãng
Ống kính Canon RF 15-30mm f/4.5-6.3 IS STM
Ống kính Canon RF 24mm f/1.8 Macro IS STM
Ống kính Canon RF 35mm f/1.8 IS Macro STM | Chính hãng
ỐNG KÍNH CANON RF 24mm F1.8 STM
ỐNG KÍNH CANON RF 85mm F2 MACRO IS STM
Ống kính Canon EF-M 32mm f/1.4 STM
Ống kính Canon RF 100-400mm f/5.6-8 IS USM | Chính hãng
Ống kính Canon RF 600mm f/11 IS STM
Ống kinh Canon RF 24-240mm F4-6.3 IS USM | Chính hãng
Ống kính Canon RF 800mm f/11 IS STM
Ống kính Canon RF 800mm f/11 IS STM | Chính hãng
ỐNG KÍNH CANON RF 24-105mm F4 L IS USM
Ống Kính Canon RF 14-35mm f/4L IS USM
Ống kính Canon RF 135mm F1.8 L IS USM
Ống kính Canon RF 100mm f/2.8L Macro IS USM | Chính hãng
Ống kính Canon RF 100mm f/2.8L Macro IS USM
ỐNG KÍNH CANON RF 24-70mm F2.8 L IS USM
Ống kính Canon RF 24-70mm f/2.8L IS USM | Chính hãng
Ống kính Canon RF 70-200mm f/2.8L IS USM | Chính hãng
ỐNG KÍNH CANON RF 70-200mm F2.8 L IS USM
Ống kính Canon RF 15-35mm f/2.8L IS USM
Ống kính Canon RF 100-500mm f/4.5-7.1 L IS USM
Ống kính Canon RF 100-500mm f/4.5-7.1 L IS USM | Chính hãng
Ống kính Canon RF 85mm f/1.2L USM | Chính hãng
Ống kính Canon RF 800mm f/5.6 L IS USM | Chính hãng
ỐNG KÍNH CANON EF-M 15-45mm F3.5-6.3 IS STM
ỐNG KÍNH CANON RF-S 18-45mm F4.5-6.3 IS STM (HÃNG)
ỐNG KÍNH CANON EF-M 18-55mm F3.5-5.6 IS STM
(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());
})();