jQuery والتعامل مع DOM

التأثيرات الأساسية

15 دقيقة الدرس 23 من 30

مقدمة إلى تأثيرات jQuery

توفر jQuery طرقًا قوية لإضافة تأثيرات بصرية إلى صفحات الويب الخاصة بك. تجعل هذه التأثيرات موقعك الإلكتروني أكثر تفاعلية وجاذبية للمستخدمين. في هذا الدرس، سنستكشف التأثيرات الأساسية للإظهار والإخفاء والتبديل.

دالة show()

تعرض دالة show() العناصر المخفية مع مدة رسوم متحركة اختيارية.

الاستخدام الأساسي:
<div id="box" style="display: none;">مرحبا بالعالم!</div>
<button id="showBtn">إظهار الصندوق</button>

<script>
$(document).ready(function() {
    $("#showBtn").click(function() {
        $("#box").show(); // إظهار فوري
    });
});
</script>
مع مدة الرسوم المتحركة:
// إظهار مع رسوم متحركة
$("#box").show(1000); // رسوم متحركة لمدة ثانية واحدة
$("#box").show("slow"); // رسوم متحركة بطيئة
$("#box").show("fast"); // رسوم متحركة سريعة

// مع دالة استدعاء
$("#box").show(500, function() {
    alert("اكتملت الرسوم المتحركة!");
});

دالة hide()

تخفي دالة hide() العناصر المرئية مع رسوم متحركة اختيارية.

أمثلة:
<button id="hideBtn">إخفاء الصندوق</button>

<script>
$("#hideBtn").click(function() {
    $("#box").hide(800); // إخفاء خلال 800 ميلي ثانية
});

// إخفاء عناصر متعددة
$(".alerts").hide("fast");

// إخفاء مع دالة استدعاء
$("#message").hide(500, function() {
    console.log("تم إخفاء الرسالة");
});
</script>

دالة toggle()

تتبدل دالة toggle() بين إظهار وإخفاء العناصر، مما يجعلها مثالية للواجهات التفاعلية.

مثال على التبديل:
<div id="content">
    <p>يمكن تبديل هذا المحتوى</p>
</div>
<button id="toggleBtn">تبديل المحتوى</button>

<script>
$(document).ready(function() {
    $("#toggleBtn").click(function() {
        $("#content").toggle(600);
    });
});
</script>
💡 نصيحة: يمكن تحديد المدة بالميلي ثانية (أرقام) أو باستخدام كلمات مفتاحية: "slow" (600 ميلي ثانية)، "fast" (200 ميلي ثانية)، أو أرقام مخصصة.

تأثيرات التلاشي

توفر jQuery تأثيرات تلاشي تغير شفافية العنصر أثناء الرسوم المتحركة.

fadeIn() و fadeOut():
// إظهار تدريجي للعنصر المخفي
$("#box").fadeIn(1000);

// إخفاء تدريجي للعنصر المرئي
$("#box").fadeOut(500);

// تبديل التلاشي
$("#box").fadeToggle(800);

// التلاشي إلى شفافية محددة
$("#box").fadeTo(1000, 0.5); // التلاشي إلى 50٪ شفافية
مثال عملي - مربع حوار منبثق:
<div id="overlay" style="display:none;">
    <div id="modal">
        <h3>مرحباً!</h3>
        <p>هذا مربع حوار منبثق</p>
        <button id="closeModal">إغلاق</button>
    </div>
</div>
<button id="openModal">فتح المربع المنبثق</button>

<script>
$(document).ready(function() {
    // فتح المربع المنبثق
    $("#openModal").click(function() {
        $("#overlay").fadeIn(400);
    });

    // إغلاق المربع المنبثق
    $("#closeModal").click(function() {
        $("#overlay").fadeOut(400);
    });
});
</script>

دوال الاستدعاء

تُنفذ دوال الاستدعاء بعد اكتمال الرسوم المتحركة، مما يسمح لك بربط الإجراءات أو تحديث الواجهة.

استخدام دوال الاستدعاء:
// استدعاء واحد
$("#message").fadeOut(500, function() {
    $(this).remove(); // إزالة العنصر بعد التلاشي
});

// تأثيرات متسلسلة
$("#box").fadeOut(300, function() {
    $(this).text("تم تحديث المحتوى").fadeIn(300);
});

// عناصر متعددة مع استدعاء
$(".notification").each(function() {
    $(this).fadeOut(500, function() {
        console.log($(this).attr("id") + " مخفي");
    });
});
⚠️ تحذير: عند تحريك عناصر متعددة، يتم تنفيذ دالة الاستدعاء مرة واحدة لكل عنصر. استخدم عدادًا أو تحقق إذا كنت بحاجة إلى تشغيل كود مرة واحدة فقط بعد اكتمال جميع الرسوم المتحركة.

إيقاف الرسوم المتحركة

توقف دالة stop() الرسوم المتحركة قيد التشغيل حاليًا، مما يمنع تراكم قائمة انتظار الرسوم المتحركة.

دالة الإيقاف:
// إيقاف الرسوم المتحركة الحالية
$("#box").stop();

// إيقاف ومسح قائمة الانتظار
$("#box").stop(true);

// إيقاف والقفز إلى النهاية
$("#box").stop(true, true);

// استخدام عملي - منع إزعاج التمرير
$("#box").hover(
    function() {
        $(this).stop().fadeIn(300);
    },
    function() {
        $(this).stop().fadeOut(300);
    }
);

مثال عملي: معرض صور

<style>
.gallery-item {
    display: inline-block;
    margin: 10px;
    cursor: pointer;
}
.gallery-item img {
    width: 200px;
    height: 150px;
    object-fit: cover;
}
.overlay {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0,0,0,0.8);
    z-index: 1000;
}
.overlay img {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    max-width: 90%;
    max-height: 90%;
}
</style>

<div class="gallery">
    <div class="gallery-item">
        <img src="photo1.jpg" alt="صورة 1">
    </div>
    <div class="gallery-item">
        <img src="photo2.jpg" alt="صورة 2">
    </div>
</div>

<div class="overlay">
    <img id="lightbox-img" src="" alt="">
</div>

<script>
$(document).ready(function() {
    // فتح عارض الصور
    $(".gallery-item img").click(function() {
        var imgSrc = $(this).attr("src");
        $("#lightbox-img").attr("src", imgSrc);
        $(".overlay").fadeIn(400);
    });

    // إغلاق عارض الصور
    $(".overlay").click(function() {
        $(this).fadeOut(400);
    });
});
</script>

📝 تمرين: نظام إشعارات

المهمة: أنشئ نظام إشعارات يقوم بـ:

  1. إظهار رسالة إشعار عند النقر على زر
  2. الظهور التدريجي للإشعار خلال 500 ميلي ثانية
  3. الاختفاء التلقائي بعد 3 ثوانٍ
  4. وجود زر إغلاق لإخفائه فورًا
  5. دعم عدة إشعارات متراكمة عموديًا

تحدي إضافي: أضف أنواع إشعارات مختلفة (نجاح، تحذير، خطأ) بألوان وأيقونات مختلفة.

الملخص

  • show()، hide()، toggle() - التحكم الأساسي بالرؤية
  • fadeIn()، fadeOut()، fadeToggle() - رسوم متحركة للشفافية
  • fadeTo() - التحريك إلى شفافية محددة
  • دوال الاستدعاء تُنفذ بعد اكتمال الرسوم المتحركة
  • stop() تمنع تراكم قائمة انتظار الرسوم المتحركة
  • المدة: أرقام (ميلي ثانية)، "slow" (600 ميلي ثانية)، "fast" (200 ميلي ثانية)