CSS Cubic Bezier जेनरेटर - ऑनलाइन ईज़िंग फ़ंक्शन बनाएं
इंटरैक्टिव विज़ुअल एडिटर से कस्टम CSS ईज़िंग कर्व बनाएं। कंट्रोल पॉइंट ड्रैग करें, एनिमेशन प्रीव्यू देखें और cubic-bezier() कोड कॉपी करें।
अक्सर पूछे जाने वाले प्रश्न
CSS cubic-bezier() फ़ंक्शन क्या है?
CSS cubic-bezier() फ़ंक्शन एक क्यूबिक बेज़ियर ईज़िंग कर्व को परिभाषित करता है जो CSS ट्रांज़िशन और एनिमेशन की गति को नियंत्रित करता है। यह चार संख्यात्मक पैरामीटर लेता है — cubic-bezier(x1, y1, x2, y2) — जो एक कर्व पर दो नियंत्रण बिंदु (P1 और P2) को परिभाषित करते हैं जहां X-अक्ष समय प्रगति (0 से 1) और Y-अक्ष एनिमेशन प्रगति (0 से 1) को दर्शाता है। प्रारंभ बिंदु P0 हमेशा (0,0) और अंत बिंदु P3 हमेशा (1,1) होता है।
मैं इस cubic-bezier जेनरेटर का उपयोग कैसे करूं?
इंटरैक्टिव ग्राफ़ पर दो कंट्रोल पॉइंट हैंडल (P1 और P2) को ड्रैग करके अपना वांछित ईज़िंग कर्व बनाएं, या X1, Y1, X2, Y2 इनपुट फ़ील्ड में सटीक मान दर्ज करें। एनिमेशन प्रीव्यू रीयल-टाइम में अपडेट होता रहेगा। वैकल्पिक रूप से प्रीसेट लाइब्रेरी से शुरुआती बिंदु चुनें। Linear से तुलना टॉगल करके देखें कि आपका कर्व समान गति से कैसे भिन्न है। जेनरेट किए गए CSS कोड को कॉपी बटन से कॉपी करें।
क्या मेरा डेटा सुरक्षित है? क्या कुछ सर्वर पर भेजा जाता है?
हां, आपका डेटा पूरी तरह सुरक्षित है। यह टूल आपके ब्राउज़र में क्लाइंट-साइड JavaScript का उपयोग करके पूरी तरह चलता है। कोई भी बेज़ियर मान, एनिमेशन सेटिंग्स या कोई भी डेटा किसी सर्वर पर नहीं भेजा जाता। सभी कर्व गणनाएं, एनिमेशन रेंडरिंग और कोड जनरेशन आपके डिवाइस पर स्थानीय रूप से होती हैं।
cubic-bezier() में X और Y मान का क्या अर्थ है?
चार मान एक 2D ग्राफ़ पर दो नियंत्रण बिंदुओं को परिभाषित करते हैं। X मान (x1 और x2) समय अक्ष पर बिंदुओं को दर्शाते हैं और 0 से 1 के बीच होने चाहिए। Y मान (y1 और y2) प्रगति अक्ष पर बिंदुओं को दर्शाते हैं और कोई भी संख्या हो सकती है। जब Y मान 0 और 1 के बीच होते हैं, एनिमेशन सामान्य रूप से आगे बढ़ता है। जब Y मान 0 से नीचे या 1 से ऊपर जाते हैं, एनिमेशन अस्थायी रूप से लक्ष्य स्थिति को ओवरशूट या अंडरशूट करता है।
ease, ease-in, ease-out और ease-in-out में क्या अंतर है?
ये CSS कीवर्ड हैं जो विशिष्ट cubic-bezier मानों के अनुरूप हैं। ease (0.25, 0.1, 0.25, 1) थोड़ा धीरे शुरू होता है, तेज़ी से गति पकड़ता है, फिर सुचारू रूप से रुकता है — यह CSS ट्रांज़िशन का डिफ़ॉल्ट है। ease-in (0.42, 0, 1, 1) धीरे शुरू होता है और गति पकड़ता है, स्क्रीन छोड़ने वाले तत्वों के लिए उपयोगी। ease-out (0, 0, 0.58, 1) तेज़ शुरू होता है और रुकता है, स्क्रीन में प्रवेश करने वाले तत्वों के लिए आदर्श। ease-in-out (0.42, 0, 0.58, 1) धीरे शुरू होता है, बीच में तेज़ होता है, फिर धीमा होता है।
ओवरशूट या बाउंस इफ़ेक्ट कैसे बनाएं?
Y मान (y1 या y2) को [0, 1] सीमा से बाहर सेट करें। अंत में ओवरशूट (तत्व लक्ष्य से आगे जाकर वापस आता है) के लिए y2 को 1 से अधिक सेट करें, उदाहरण के लिए cubic-bezier(0.34, 1.56, 0.64, 1)। शुरुआत में अंडरशूट (तत्व आगे बढ़ने से पहले संक्षेप में पीछे जाता है) के लिए y1 को 0 से कम सेट करें। जेनरेटर का ग्राफ़ इन ओवरशूट ज़ोन को दिखाने के लिए 0-1 बॉक्स से आगे बढ़ता है।
मुझे अपने एनिमेशन के लिए कौन सा ईज़िंग कर्व उपयोग करना चाहिए?
सबसे अच्छा ईज़िंग एनिमेशन संदर्भ पर निर्भर करता है। UI प्रवेश (मोडल, ड्रॉपडाउन दिखना) के लिए प्राकृतिक डिसेलेरेशन के लिए ease-out या Quart/Quint Out कर्व उपयोग करें। UI निकास (तत्व गायब होना) के लिए सुचारू एक्सेलेरेशन के लिए ease-in उपयोग करें। स्थिति परिवर्तन (रंग, आकार बदलाव) के लिए ease-in-out संतुलित एक्सेलेरेशन प्रदान करता है। चंचल इंटरैक्शन (बटन फीडबैक) के लिए Back Out कर्व उपयोग करें। अधिकांश UI एनिमेशन में linear से बचें क्योंकि यह यांत्रिक लगता है।
कोड उदाहरण
function evaluateBezier(t, p0, p1, p2, p3) {
const u = 1 - t;
return u * u * u * p0 + 3 * u * u * t * p1 + 3 * u * t * t * p2 + t * t * t * p3;
}
function cubicBezierY(x, x1, y1, x2, y2) {
if (x <= 0) return 0;
if (x >= 1) return 1;
let low = 0, high = 1, mid;
for (let i = 0; i < 20; i++) {
mid = (low + high) / 2;
const cx = evaluateBezier(mid, 0, x1, x2, 1);
if (Math.abs(cx - x) < 0.0001) break;
cx < x ? (low = mid) : (high = mid);
}
return evaluateBezier((low + high) / 2, 0, y1, y2, 1);
}
function formatCubicBezier(x1, y1, x2, y2) {
const r = (n) => Math.round(n * 100) / 100;
return `cubic-bezier(${r(x1)}, ${r(y1)}, ${r(x2)}, ${r(y2)})`;
}
console.log(formatCubicBezier(0.25, 0.1, 0.25, 1));
// cubic-bezier(0.25, 0.1, 0.25, 1)
// Animate using the bezier curve
function animate(x1, y1, x2, y2, durationMs, onProgress) {
const start = performance.now();
function tick(now) {
const t = Math.min((now - start) / durationMs, 1);
onProgress(cubicBezierY(t, x1, y1, x2, y2));
if (t < 1) requestAnimationFrame(tick);
}
requestAnimationFrame(tick);
}