Khoảng giá
Từ: 0 triệu
Đến: Không giới hạn
Ống kính Samyang 8mm f3.5 Fisheye
Vui lòng gọi
Ống kính Samyang 24mm f3.5 Tilt Shift for Sony
Vui lòng gọi
Ống kính Samyang 50mm f1.2 AS UMC CS
Vui lòng gọi
SAMYANG AF 35mm F1.4 FE FOR SONY
Giá từ:
4,900,000đ
ỐNG KÍNH SAMYANG 8mm F2.8 UMC FISHEYE FOR FUJIFIM X
Giá từ:
2,500,000đ
Ống kính Samyang AF 85mm F1.4 ngàm Canon RF
Vui lòng gọi
Ống kính Samyang AF 50mm F1.4 ngàm Sony FE
Vui lòng gọi
Ống kính Samyang AF 85mm F/1.8 P Sony FE
Vui lòng gọi
Ống kính Samyang AF 24mm F/1.8 Sony FE
Giá giao động:
9,790,000đ
Ống kính Samyang AF 35mm F/1.4 FE II
Giá giao động:
9,900,000đ
Ống kính Samyang V-AF 35mm T1.9
Giá giao động:
13,860,000đ
Ống kính Samyang V-AF 45mm T1.9
Giá giao động:
13,860,000đ
Ống kính Samyang V-AF 75mm T1.9
Giá giao động:
13,860,000đ
Ống kính Samyang AF 85mm F/1.4 II Sony FE
Giá giao động:
14,190,000đ
Ống kính Samyang AF 50mm F/1.4 II Sony FE
Giá giao động:
14,190,000đ
Ống kính Samyang V-AF 20mm T1.9
Giá giao động:
14,850,000đ
Ống kính Samyang V-AF 24mm T1.9
Giá giao động:
14,850,000đ
Ống kính Samyang V-AF 100mm T2.3
Giá giao động:
14,850,000đ
Ống kính Samyang AF 24-70mm F/2.8 II Sony FE
Giá giao động:
14,900,000đ
Ống kính Samyang AF 14-24mm F/2.8 Sony FE
Giá giao động:
25,500,000đ
Ống kính Samyang AF 35-150mm F/2-2.8 Sony E
Giá giao động:
25,575,000đ
Ống kính Samyang AF 35-150mm F/2-2.8 L-Mount
Giá giao động:
28,600,000đ
Samyang AF 85mm f/1.4 FE II cho Sony E
Vui lòng gọi
Ống kính Samyang AF 135mm f/1.8 FE | Chính hãng
Vui lòng gọi
(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());
})();