Khoảng giá
Từ: 0 triệu
Đến: Không giới hạn
HOOD SIGMA LH756-01
HOOD SIGMA LH830-03
HOOD SIGMA LH876-04
HOOD SIGMA LH582-02
HOOD SIGMA LH730-03
HOOD FUJIFILM 18-55mm
HOOD CANON ES-78
HOOD SONY ALC-SH164
HOOD CANON ES-83
HOOD SONY ALC-SH163
HOOD SONY ALC-SH156
HOOD SIGMA LH706-01
HOOD CANON EW-53
HOOD SIGMA LH1164-01 FOR CANON
HOOD CANON EW-83L
HOOD SONY ALC-SH128
HOOD VILTROX PL-07A
HOOD CANON ET-74
HOOD CANON EW-77
HOOD CANON ET-83 F
HOOD SONY ALC-SH131
HOOD TAMRON AB003
HOOD NIKON 17-55mm
HOOD SIGMA LH876-03
HOOD VILTROX PL-16
HOOD FUJIFILM 23mm
HOOD FUJIFILM 55-200mm
HOOD FUJIFILM 56mm
HOOD SONY ALC-SH112
HOOD SONY ALC-SH132
HOOD SONY ALC-SH146
HOOD SONY ALC-SH116
HOOD SONY ALC-SH130
HOOD SONY ALC-SH159
HOOD SIGMA LH850-02 FOR 70-200mm F2.8 EX DG OS HSM
HOOD SONY ALC-SH145
HOOD FUJIFILM 50-230mm
HOOD SIGMA 17-50mm FOR NIKON
HOOD VILTROX PL-11A
HOOD SONY ALH-SH128
HOOD SIGMA LH878-03
HOOD TAMRON HA032
HOOD VILTROX PL-07
HOOD HB-87
HOOD CANON EW-83N
HOOD NIKON HB-91
HOOD CANON ET-77
HOOD TAMRON HA057
HOOD CANON ET-54
HOOD SONY 18-105mm
HOOD SIGMA LH830-02
HOOD SIGMA LH-830
HOOD CANON EW-78D
HOOD CANON EW-83M
HOOD EW-88C
HOOD SIGMA 35 ART
HOOD CANON EW-83H
HOOD CANON ET-83 II
HOOD EW-83F
HOOD CANON ET-87
HOOD CANON ET-78 II
HOOD CANON EW-73B
HOOD CANON EW-78E
HOOD CANON ES-79 II
HOOD CANON EW-82
HOOD SIGMA 50 ART
HOOD CANON EW-88
HOOD CANON EW-83E
HOOD NIKON HB-77
HOOD NIKON HB-47
HOOD NIKON HB-7
HOOD NIKON HB-62
HOOD NIKON HB-23
HOOD NIKON HB-46
HOOD NIKON HB-57
HOOD NIKON HB-32
HOOD NIKON HB-63
HOOD NIKON HB-48
HOOD NIKON HB-40
HOOD NIKON HB-31
HOOD NIKON HB-53
HOOD NIKON HB-35
HOOD NIKON HB-17
HOOD NIKON HB-7II
HOOD FOR CANON EW 63C
HOOD TAMRON HA022
HOOD FUJIFILM 16-50mm
HOOD LUMIX H-FS100300
HOOD TAMRON HA056
HOOD TAMRON HA005
HOOD VILTROX PL-22A
HOOD VILTROX PL-35A
Loa che nắng nikon hn-23 cho 85mm f/1.8d
Loa che nắng nikon hn-40
Loa che nắng nikon hn-31 cho 85mm f/1.4d
Loa che nắng nikon hb-7 cho 80-200mm f/2.8
Loa che nắng nikon hb-23 cho 12-24mm f/4g, 17-35mm f/2.8d, 16-35mm f/4g
Loa che nắng nikon hb-24 cho af vr 80-400mm f/4.5-5.6d ed
Loa che nắng nikon hb-25 cho af 24-85mm f/2.8-4d
Loa che nắng nikon hb-26 cho 70-300mm f/4-5.6g
Loa che nắng nikon hb-29 cho 70-200mm f/2.8g vr
Nikon HB-31 Lens Hood for 17-55mm f/2.8G
Loa che nắng nikon hb-34 cho 55-200mm dx
Loa che nắng nikon hb-35 cho af-s 18-200mm
Loa che nắng nikon hb-36 cho 70-300mm f/4.5-5.6g vr
Loa che nắng nikon hb-38 cho af-s 105mm f/2.8g
Loa che nắng nikon hb-39 cho 18-300mm f/3.5-6.3g
Loa che nắng nikon hb-40 cho 24-70mm f/2.8g
Loa che nắng nikon hb-42 cho af-s micro 60mm f/2.8g
Loa che nắng nikon hb-45 cho af-s 18-55mm f/3.5-5.6g
Loa che nắng nikon hb-47 cho af-s 50mm f/1.4g
Loa che nắng nikon hb-48 cho af-s 70-200mm f/2.8g vr ii
Loa che nắng nikon hb-50 cho 28-300mm f/3.5-5.6g
Loa che nắng nikon hb-53 cho 24-120mm f/4g vr
Loa che nắng nikon hb-55 cho 85mm f/1.4g
Loa che nắng nikon hb-58 cho 18-300mm f/3.5-5.6g vr
Loa che nắng nikon hb-62 cho 85mm f/1.8g
Loa che nắng nikon hb-65 cho 80-400mm f/4.5-5.6g vr ii
Loa che nắng nikon hb-68 cho 58mm f/1.4g
Loa che nắng nikon hb-72 cho af-s 20mm f/1.8g
Loa che nắng nikon hb-74 cho 24-70mm f/2.8e vr
Loa che nắng nikon hb-75 cho 16-80mm f/2.8-4e ed vr
Loa che nắng nikon hb-84 cho 500mm f/5.6e pf ed vr
Loa che nắng nikon hb-85 cho z 24-70mm f/4s
Loa che nắng nikon hb-86 cho z 14-30mm f/4s
Loa che nắng nikon hb-87 cho z 24-70mm f/2.8s
Loa che nắng nikon hb-89 cho z 35mm f/1.8s
Loa che nắng nikon hb-92 cho z 70-200mm f/2.8s
Loa che nắng nikon hb-90a cho z dx 50-250mm f/4.5-6.3 vr
Loa che nắng nikon hn-38 cho z 58mm f/0.95 noct
Loa che nắng nikon hn-41 cho z mc 50mm f/2.8
Loa che nắng nikon hb-99 cho z mc 105mm f/2.8 vr s
Loa che nắng nikon hb-94 cho z 50mm f/1.2s
Loa che nắng nikon hb-95 cho z 20mm f/1.8s
Loa che nắng nikon hb-101 cho z dx 18-140mm f/3.5-6.3 vr
Loa che nắng nikon hb-102 cho z 24-120mm f/4s
Loa che nắng nikon hb-103 cho z 100-400mm f/4.5-5.6s
Hood ALC-SH174
Hood Sony ALC-SH178
Hood JJC LH-SH131
Hood JJC LH-SH154
Hood JJC ALC-SH154
Hood Sony ALC-SH170
Hood Sony ALC-SH124
HOOD SIGMA LH520-03
HOOD OLYMPUS LH-76B
Loa che nắng LH-61D Lens Hood
Loa che nắng LH-61E Lens Hood OM SYSTEM
Loa che nắng LH-40B Lens Hood Silver
Loa che nắng LH-55B Lens Hood
Loa che nắng LH-49 Lens Hood
Loa che nắng LH-76 Lens Hood
Loa che nắng LH-66B Lens Hood
Loa che nắng LH-76B Lens Hood
Loa che nắng LH-61F Lens Hood
Loa che nắng LH-115 Lens Hood OM SYSTEM
Loa che nắng LH-76D Lens Hood OM SYSTEM
Loa che nắng LH-61G Lens Hood OM SYSTEM
Loa che nắng LH-76E Lens Hood OM SYSTEM
Loa che nắng LH-66D Lens Hood OM SYSTEM
Loa che nắng LH-55D Lens Hood
Loa che nắng LH-103 Lens Hood OM SYSTEM
Loa che nắng HOOD FUJIFILM FOR XF 16-80mm F4
HOOD ES-65BII
HOOD LENS 7ARTISANS AF 50mm F1.8 FOR NIKON Z
HOOD SONY ALC-SH169
Hood Contax GG-3
Hood Sony ALC-SH180
Hood Tamron HA046
Hood JJC LH-JDC100
Hood Tamron HA036
HOOD CANON ES-65B
Loa che nắng Lens Hood ET-65 III
Phụ kiện 7Artisans Lens Hood for 28mm f/1.4 Lens
Phụ kiện 7Artisans Lens Hood 43mm
Loa che nắng Lens Hood ET-63 (For Canon EF-S 55-250mm f/4-5.6 IS STM)
Loa che nắng Lens Hood Canon ES-68 For (Canon 50mm STM)
Loa che nắng Lens Hood Leica kim loại (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());
})();