Chân máy Benro iFoto Aluminum - FIF28AIB2
Vui lòng gọi
Chân máy ảnh Tripod Q999H
Vui lòng gọi
CHÂN MÁY ẢNH BENRO SLIM TRIPOD FSL09-AN00
Đơn giá
1,980,000đ
MINI TRIPOD TR-02B
Đơn giá
60,000đ
CHÂN ĐIỆN THOẠI JOBY
Đơn giá
150,000đ
CHÂN ULANZI MT-79
Đơn giá
450,000đ
CHÂN MÁY ẢNH BENRO DIGITAL TRIPOD T560
Đơn giá
600,000đ
CHÂN GẤP NGƯỢC
Đơn giá
750,000đ
Chân Máy Sony VCT-VPR1
Đơn giá
2,830,000đ
Chân máy Benro KH26P Video Head & Tripod Kit
Đơn giá
4,380,000đ
CHÂN MÁY ẢNH TRIPOD VELBON CARMAGNE G5300
HÀNG MỚI ĐÃ TẠM HẾT
Hàng cũ giá từ:
2,600,000đ
TRIPOD INSTA 360 2IN1 INVISIBLE SELFIE STICK
HÀNG MỚI ĐÃ TẠM HẾT
CHÂN BENRO TT880EX
HÀNG MỚI ĐÃ TẠM HẾT
BỘ CHÂN MÁY MANFROTTO ELEMENT MARK II 4-S
HÀNG MỚI ĐÃ TẠM HẾT
CHÂN MÁY ẢNH BENRO TABLETOP TRIPOD PP1
HÀNG MỚI ĐÃ TẠM HẾT
CHÂN MÁY ẢNH JOBY PODZILLA FLEXIBLE LARGE
HÀNG MỚI ĐÃ TẠM HẾT
CHÂN MÁY MỞ RỘNG DJI
HÀNG MỚI ĐÃ TẠM HẾT
CHÂN MÁY ẢNH TRIPOD STEINZEISER SZ-02 4 SECTION
HÀNG MỚI ĐÃ TẠM HẾT
CHÂN MÁY BENRO CLASSIC A38FD
HÀNG MỚI ĐÃ TẠM HẾT
TRIPOD LEOFOTO MR.Y - LY-224C+LH-25R
HÀNG MỚI ĐÃ TẠM HẾT
CHÂN MÁY ẢNH TRIPOD Q999C
HÀNG MỚI ĐÃ TẠM HẾT
ELEVATOR C-11
HÀNG MỚI ĐÃ TẠM HẾT
KING ACTION M-4
HÀNG MỚI ĐÃ TẠM HẾT
KENKO ST-50
HÀNG MỚI ĐÃ TẠM HẾT
Chân video Benro KH25P Tripod
HÀNG MỚI ĐÃ TẠM HẾT
CHÂN MONO STEINZEISE
HÀNG MỚI ĐÃ TẠM HẾT
BỘ CHÂN MÁY MANFROTTO ELEMENT MARK II 4-S- ĐEN
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy Benro - T890
HÀNG MỚI ĐÃ TẠM HẾT
PGYTECH MantisPod Pro Vlogging Tripod
HÀNG MỚI ĐÃ TẠM HẾT
Chân máy Yunteng VCT-520RM Mini Tripod
HÀNG MỚI ĐÃ TẠM HẾT
(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());
})();