هل سبق لك أن تساءلت عن كيفية تتبع العناصر التي لها positions: sticky
أصبحت positions: sticky
ثابتة؟ إريك بيلدمان لديه مشاركة مذهلة حول هذا الموضوع ، اذهب واقرأها الآن.
لقد وجدت بعض الصعوبات أثناء استخدامه في مشروعي. ها هم:
- انه يكسر التغليف. يتعلق حدث
sticky-change
بعنصر الرأس ، ولكن يجب عليك إدخال حراس إلى أصل الرأس (وجعله position: relative
). - أنه ينطوي على الكثير من العوامل التي ينبغي أن تكون متسقة واتصالهم ليس واضحًا دائمًا. على سبيل المثال ، لا يمكنك ضبط
--default-padding
أكبر من 40px
، وهو ارتفاع الحارس العلوي. - لا يمكنك تتبع كتلة في منتصف مقال.
دعونا نحاول تحسينه!
تعكس كل هذه المشكلات المشكلة نفسها: حل إريك هو تتبع الموقف الأصلي لزجة ، وليس كتلة لزجة نفسها. دعونا تحسين هذا مع الحفاظ على الفكرة الأصلية. كيف؟ سنقوم بإضافة حراس لرأس نفسه ومراقبة تقاطعهم مع الحاوية.

إليك كيفية القيام بذلك:
- تحتاج إلى حارس واحد لكل جانب مثبت تريد مراقبته.
- تعيين الخاصية
top
sentinel top
تساوي رأس الصفحة ولكن مع علامة عكس ناقص 1. على سبيل المثال إذا كان رأسك top: 10px
، ثم قم بتعيين رأس sentinel على -11px
. يمكنك استخدام شيء مثل top: calc(-1px + -1 * var( -- header-sticky-top))
أو فقط تعيين -1px
إذا كان لديك رأس رأس يساوي الصفر. - إضافة حراس أخرى إذا لزم الأمر.
- راقب تقاطع الحراس مع الحاوية.
- يمكنك أن تقول أن الرأس عالق إذا كان سجل تقاطع الحارس هو
isIntersecting = true
، intersectionRatio = 0
، و intersectionRect.top = rootBounds.top
- نفس الجوانب الأخرى ، فقط شاهد الجزء السفلي أو اليسار أو اليمين بدلاً من الأعلى.
- لا تنس أن تضيف
visibility: hidden
pointer-events: none
visibility: hidden
pointer-events: none
إلى الحراس.
تحقق من التجريبي والمصادر هنا