في اليوم الآخر كنت أعمل على JSON Schema Generator، وأردت عرض أرقام الأسطر في
لقد أجريت بعض الأبحاث، ووجدت طرقًا متعددة:
لم يعجبني أي منهم! لم يبدو الشكل الأول واضحًا - ولم يتطابق مع الأنماط التي استخدمتها بالفعل لعناصر
يتطلب الأمر الثاني مجموعة من JavaScript للحفاظ على تلك القائمة المرتبة: إضافة/إزالة
لذلك انتهيت من إنشاء هجين.
إنها صورة SVG يتم إنشاؤها ديناميكيًا، ويتم تخزينها كخاصية CSS مخصصة - ويتم استخدامها كصورة خلفية، حيث ترث الأنماط من العنصر
دعونا نتعمق.
أولاً الطريقة الرئيسية:
lineNumbers(element, numLines = 50, inline = false)
العنصر هو عنصر
بعد ذلك، نحدد بادئة للخاصية المخصصة:
const prefix = '--linenum-';
قبل أن نواصل، نتحقق مما إذا كنا سنعيد استخدام أي عقار موجود:
if (!inline) { const styleString = document.body.getAttribute('style') || ''; const regex = new RegExp(`${prefix}[^:]*`, 'g'); const match = styleString.match(regex); if (match) { element.style.backgroundImage = `var(${match[0]})`; return; } }
بعد ذلك، نقوم باستخراج الأنماط من العنصر، وتقديم SVG بنفس عائلة الخطوط، وحجم الخط، وارتفاع الخط وما إلى ذلك. :
const bgColor = getComputedStyle(element).borderColor; const fillColor = getComputedStyle(element).color; const fontFamily = getComputedStyle(element).fontFamily; const fontSize = parseFloat(getComputedStyle(element).fontSize); const lineHeight = parseFloat(getComputedStyle(element).lineHeight) / fontSize; const paddingTop = parseFloat(getComputedStyle(element).paddingTop) / 2; const translateY = (fontSize * lineHeight).toFixed(2);نحتاج إلى معرف عشوائي لممتلكاتنا أيضًا:
const bgColor = getComputedStyle(element).borderColor; const fillColor = getComputedStyle(element).color; const fontFamily = getComputedStyle(element).fontFamily; const fontSize = parseFloat(getComputedStyle(element).fontSize); const lineHeight = parseFloat(getComputedStyle(element).lineHeight) / fontSize; const paddingTop = parseFloat(getComputedStyle(element).paddingTop) / 2; const translateY = (fontSize * lineHeight).toFixed(2);والآن حان الوقت لعرض SVG:
const bgColor = getComputedStyle(element).borderColor; const fillColor = getComputedStyle(element).color; const fontFamily = getComputedStyle(element).fontFamily; const fontSize = parseFloat(getComputedStyle(element).fontSize); const lineHeight = parseFloat(getComputedStyle(element).lineHeight) / fontSize; const paddingTop = parseFloat(getComputedStyle(element).paddingTop) / 2; const translateY = (fontSize * lineHeight).toFixed(2);
دعونا نقسمها:
في قسمتنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3