"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > أرقام الأسطر لاستخدام SVG

أرقام الأسطر لاستخدام SVG

تم النشر بتاريخ 2024-08-23
تصفح:755

في اليوم الآخر كنت أعمل على JSON Schema Generator، وأردت عرض أرقام الأسطر في

لقد أجريت بعض الأبحاث، ووجدت طرقًا متعددة:

  1. استخدام صورة الخلفية (يفعل TinyMCE ذلك باستخدام PNG)
  2. استخدام قائمة مرتبة
      .

لم يعجبني أي منهم! لم يبدو الشكل الأول واضحًا - ولم يتطابق مع الأنماط التي استخدمتها بالفعل لعناصر

يتطلب الأمر الثاني مجموعة من JavaScript للحفاظ على تلك القائمة المرتبة: إضافة/إزالة

  • -عناصر ديناميكيًا، ومزامنة أحداث التمرير وغير ذلك الكثير.

    لذلك انتهيت من إنشاء هجين.

    إنها صورة SVG يتم إنشاؤها ديناميكيًا، ويتم تخزينها كخاصية CSS مخصصة - ويتم استخدامها كصورة خلفية، حيث ترث الأنماط من العنصر

    Line Numbers for <textarea> باستخدام SVG

    دعونا نتعمق.


    جافا سكريبت

    أولاً الطريقة الرئيسية:

    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 TranslationY = (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);
    
    نحتاج إلى معرف عشوائي لممتلكاتنا أيضًا:


    معرف const = `${prefix}${Math.random().toString(36).substr(2, 6)}`;
    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 svg = ` SVG { الخلفية: ${bgColor}; } نص { ملء: hsl(from ${fillColor} h s l / 50%); عائلة الخط: ${fontFamily}; حجم الخط: ${fontSize}px; ارتفاع الخط: ${lineHeight}; مرساة النص: النهاية؛ ترجمة: 0 calc((var(--n) * ${translateY}px) ${paddingTop}px); } نمط> ${Array.from({ length: numLines }, (_, i) => `${i 1} نص>`).الانضمام("")} `;
    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);
    

    دعونا نقسمها:

    في قسم
  • بيان الافراج تم نشر هذه المقالة على: https://dev.to/madsstoumann/line-numbers-for-using-svg-1216?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
    أحدث البرنامج التعليمي أكثر>

    تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

    Copyright© 2022 湘ICP备2022001581号-3