🏷️

Alpine.js HTML

مكتبة JavaScript خفيفة للتفاعلات في HTML (Minimal JavaScript Framework)

(3/5)
👁️ 7 مشاهدة
📅 02 Jul 2026
🌐 عام

مستوى الخبرة المطلوب:

🌱 مبتدئ ⚡ متوسط 🚀 محترف
🔗 زيارة الموقع الرسمي
3
تقييم المستخدمين
التصنيف 🏷️ HTML
المشاهدات 7
تاريخ الإضافة 02/07/2026
آخر تحديث 02/07/2026

📖 الوصف

Alpine.js هي مكتبة JavaScript خفيفة (15KB) تضيف تفاعلية لصفحات HTML مباشرة عبر attributes. تشبه Vue.js في الأسلوب ولكنها أخف بكثير ولا تحتاج build step. تُعرف بـ"Tailwind for JavaScript" - تكتب منطقك في HTML مباشرة. مثالية للمكونات البسيطة التي تحتاج تفاعلية بدون Framework كامل.

🎯 يستخدم في

مجالات استخدام هذه الأداة

إضافة تفاعلية لصفحات HTML ثابتة

قوائم منسدلة (Dropdowns)

نوافذ منبثقة (Modals)

تبديل محتوى (Tabs)

نماذج تفاعلية (Forms)

مواقع لا تحتاج SPA ولكن تحتاج تفاعلية

إضافة JS لـHTMX

مشاريع صغيرة إلى متوسطة

المميزات

أبرز مميزات هذه الأداة

خفيفة جداً (15KB)

لا يحتاج build step - فقط CDN

Directives في HTML - مثل Vue

Reactivity مدمج - تحديث تلقائي

Supports Components (x-data)

Stores مشتركة (x-data على window)

Transitions مدمجة (x-transition)

Fetch API مدمج ($fetch)

Magic Properties ($refs

$el

$store

etc.)

يعمل مع أي Backend

⚠️ العيوب

نقاط يجب مراعاتها

×

محدود - ليس لكل حالات الاستخدام

×

قد يصبح HTML فوضوي مع منطق معقد

×

لا يناسب SPA كبيرة

×

أداء أقل من React/Vue للمكونات المعقدة

×

Debugging أصعب - منطق مدمج في HTML

×

لا TypeScript support أصلي

×

مجتمع أصغر - موارد أقل

🔄 البدائل

أدوات بديلة يمكنك استخدامها

HTMX
Vue.js
Stimulus
Petite-Vue

💻 مثال على الاستخدام

كيفية استخدام هذه الأداة

Example Code
<!-- تحميل Alpine.js -->
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>

<!-- عداد بسيط -->
<div x-data="{ count: 0 }">
  <button @click="count++">Increment</button>
  <span x-text="count"></span>
</div>

<!-- قائمة منسدلة (Dropdown) -->
<div x-data="{ open: false }" @click.outside="open = false">
  <button @click="open = !open">القائمة</button>
  <ul x-show="open" x-transition>
    <li x-for="item in ['عنّا', 'خدمات', 'اتصل']" :key="item">
      <a href="#" x-text="item"></a>
    </li>
  </ul>
</div>

<!-- نافذة منبثقة (Modal) -->
<div x-data="{ show: false }">
  <button @click="show = true">فتح النافذة</button>

  <div x-show="show" x-transition.opacity>
    <div class="modal">
      <h2>عنوان</h2>
      <p>محتوى النافذة</p>
      <button @click="show = false">إغلاق</button>
    </div>
  </div>
</div>

<!-- تبويبات (Tabs) -->
<div x-data="{ tab: 'home' }">
  <nav>
    <button :class="{ 'active': tab === 'home' }" @click="tab = 'home'">الرئيسية</button>
    <button :class="{ 'active': tab === 'about' }" @click="tab = 'about'">عنّا</button>
  </nav>

  <div x-show="tab === 'home'">محتوى الرئيسية</div>
  <div x-show="tab === 'about'">محتوى عنّا</div>
</div>

<!-- نموذج مع تحقق -->
<form x-data="{ name: '', email: '', submitted: false }" @submit.prevent="submitted = true">
  <input x-model="name" placeholder="الاسم" required>
  <input x-model="email" type="email" placeholder="البريد" required>
  <button type="submit" :disabled="!name || !email">إرسال</button>

  <div x-show="submitted">
    <p>مرحباً <span x-text="name"></span>!</p>
  </div>
</form>

<!-- Stores مشتركة -->
<script>
  document.addEventListener('alpine:init', () => {
    Alpine.store('cart', {
      items: [],
      add(item) { this.items.push(item) },
      remove(id) { this.items = this.items.filter(i => i.id !== id) },
      get total() { return this.items.reduce((sum, i) => sum + i.price, 0) }
    });
  });
</script>

<div x-data>
  <button @click="$store.cart.add({id: 1, name: 'منتج', price: 100})">
    أضف إلى السلة
  </button>
  <p>الإجمالي: <span x-text="$store.cart.total"></span></p>
</div>

<!-- Directives الرئيسية: -->
<!-- x-data ← تعريف component مع state -->
<!-- x-bind / : ← ربط attribute -->
<!-- x-on / @ ← الاستماع لأحداث -->
<!-- x-model ← two-way binding -->
<!-- x-show ← إظهار/إخفاء -->
<!-- x-if ← شرط (يحتاج template) -->
<!-- x-for ← تكرار (يحتاج template) -->
<!-- x-transition ← رسوم متحركة -->
<!-- x-init ← تهيئة -->

<!-- Magic Properties: -->
<!-- $el ← العنصر الحالي -->
<!-- $refs ← العناصر المرجعية -->
<!-- $store ←stores المشتركة -->
<!-- $dispatch ← إطلاق أحداث -->
<!-- $nextTick ← الانتظار للتالي -->
<!-- $watch ← مراقبة تغييرات -->

📚 أدوات أخرى في HTML

قد يعجبك أيضاً