الفرق بين المراجعتين ل"jQuery/animate"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
ط (استبدال النص - 'JQuery' ب'jQuery')
 
(8 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:التابع <code>‎‎.animate()‎‎</code>‎ في jQuery}}</noinclude>
+
==<code>‎.animate( properties [, duration ] [, easing ] [, complete ] )‎</code>==
 
+
===القيمة المعادة===
== <code>‎.animate( properties [, duration ] [, easing ] [, complete ] )‎</code> ==
 
 
 
=== القيمة المعادة ===
 
 
كائن [[jQuery/jQuery|jQuery]].
 
كائن [[jQuery/jQuery|jQuery]].
 
+
===الوصف===
=== الوصف ===
 
 
يُستخدَم التّابع <code>‎.animate()‎</code> في تنفيذ تحريك (animation) مُخصَّص لمجموعة من خاصيّات CSS.
 
يُستخدَم التّابع <code>‎.animate()‎</code> في تنفيذ تحريك (animation) مُخصَّص لمجموعة من خاصيّات CSS.
 
+
===<code>‎.animate( properties [, duration ] [, easing ] [, complete ] )‎</code>===
=== <code>‎.animate( properties [, duration ] [, easing ] [, complete ] )‎</code> ===
 
 
أضيفت في الإصدار 1.0.
 
أضيفت في الإصدار 1.0.
 
+
====<code>properties</code>====
==== <code>properties</code> ====
 
 
[[JavaScript/Object|كائن مُجرَّد (PlainObject)]]، ويُمثِّل خاصيّات CSS والقيم التي سيتجه التحريك باتجاهها.
 
[[JavaScript/Object|كائن مُجرَّد (PlainObject)]]، ويُمثِّل خاصيّات CSS والقيم التي سيتجه التحريك باتجاهها.
 
+
====<code>duration</code>====
==== <code>duration (القيمة الافتراضيّة: 400)</code> ====
+
[[JavaScript/Number|عدد]] أو [[JavaScript/String|سلسلة نصيّة]]، وتُمثِّل القيمة التي ستُحدِّد فترة تشغيل التحريك. القيمة الافتراضيّة: <code>400</code>.
[[JavaScript/Number|عدد]] أو [[JavaScript/String|سلسلة نصيّة]]، وتُمثِّل القيمة التي ستُحدِّد فترة تشغيل التحريك.
+
====<code>easing</code>====
 
+
[[JavaScript/String|سلسلة نصيّة]]، وتُمثِّل دالة الحركة السّلسة (easing function) المُستخدَمة لأجل الانتقال. القيمة الافتراضيّة: <code>swing</code>.
==== <code>easing (القيمة الافتراضيّة: swing)</code> ====
+
====<code>complete</code>====
[[JavaScript/String|سلسلة نصيّة]]، وتُمثِّل دالة الحركة السّلسة (easing function) المُستخدَمة لأجل الانتقال.
 
 
 
==== <code>complete</code> ====
 
 
[[JavaScript/Function|دالة]]، وتُمثِّل الدالة المطلوب استدعاؤها عندما يكتمل التحريك، تُستَدعى مرّة واحدة لكل عنصر مُطابِق.
 
[[JavaScript/Function|دالة]]، وتُمثِّل الدالة المطلوب استدعاؤها عندما يكتمل التحريك، تُستَدعى مرّة واحدة لكل عنصر مُطابِق.
 
+
===<code>‎.animate( properties, options )‎</code>===
=== <code>‎.animate( properties, options )‎</code> ===
 
 
أضيفت في الإصدار 1.0.
 
أضيفت في الإصدار 1.0.
 
+
====<code>properties</code>====
==== <code>properties</code> ====
 
 
[[JavaScript/Object|كائن مُجرَّد (PlainObject)]]، ويُمثِّل خاصيّات CSS والقيم التي سيتجه التحريك باتجاهها.
 
[[JavaScript/Object|كائن مُجرَّد (PlainObject)]]، ويُمثِّل خاصيّات CSS والقيم التي سيتجه التحريك باتجاهها.
 
+
====<code>options</code>====
==== <code>options</code> ====
 
 
[[JavaScript/Object|كائن مُجرَّد (PlainObject)]]، ويُمثِّل مجموعة خيارات إضافيّة لتمريرها إلى التّابع.
 
[[JavaScript/Object|كائن مُجرَّد (PlainObject)]]، ويُمثِّل مجموعة خيارات إضافيّة لتمريرها إلى التّابع.
 
+
=====<code>duration</code>=====
===== <code>duration (القيمة الافتراضيّة: 400)</code> =====
+
[[JavaScript/Number|عدد]] أو [[JavaScript/String|سلسلة نصيّة]]، وتُمثِّل القيمة التي ستُحدِّد فترة تشغيل التحريك. القيمة الافتراضيّة: <code>400</code>.
[[JavaScript/Number|عدد]] أو [[JavaScript/String|سلسلة نصيّة]]، وتُمثِّل القيمة التي ستُحدِّد فترة تشغيل التحريك.
+
=====<code>easing</code>=====
 
+
[[JavaScript/String|سلسلة نصيّة]]، وتُمثِّل دالة الحركة السّلسة (easing function) المُستخدَمة لأجل الانتقال. القيمة الافتراضيّة: <code>swing</code>.
===== <code>easing (القيمة الافتراضيّة: swing)</code> =====
+
=====<code>queue</code>=====
[[JavaScript/String|سلسلة نصيّة]]، وتُمثِّل دالة الحركة السّلسة (easing function) المُستخدَمة لأجل الانتقال.
+
[[JavaScript/Boolean|قيمة منطقيّة]] أو [[JavaScript/String|سلسلة نصيّة]]، وتُمثِّل قيمة منطقيّة تُحدِّد ما إذا كان يجب وضع التحريك في طابور التأثيرات، إن كانت قيمتها <code>false</code> فسيبدأ التحريك فورًا. بدءًا من إصدار jQuery 1.7 أصبح الخيار <code>queue</code> يقبل سلسلة نصيّة أيضًا، وفي تلك الحالة يُضاف التحريك إلى الطابور مُمثَّلًا بتلك السلسلة النصيّة. عند استخدام اسم مُخصَّص للطابور فلن يبدأ التحريك تلقائيًّا ويجب أن تستدعي التّابع ‎<code>.[[jQuery/dequeue|dequeue]]("queuename")</code>‎ لكي يبدأ. القيمة الافتراضيّة: <code>true</code>.
 
+
=====<code>specialEasing</code>=====
===== <code>queue (القيمة الافتراضيّة: true)</code> =====
+
[[JavaScript/Object|كائن مُجرَّد (PlainObject)]]، ويُمثِّل كائنًا يحتوي على واحدة أو أكثر من خاصيّات CSS المُعرَّفة عن طريق الوسيط <code>properties</code> ودوال الحركة السّلسة (easing function) المُوافقة لها. أضيف في الإصدار: 1.4.
[[JavaScript/Boolean|قيمة منطقيّة]] أو [[JavaScript/String|سلسلة نصيّة]]، وتُمثِّل قيمة منطقيّة تُحدِّد ما إذا كان يجب وضع التحريك في طابور التأثيرات، إن كانت قيمتها <code>false</code> فسيبدأ التحريك فورًا. بدءًا من إصدار jQuery 1.7 أصبح الخيار <code>queue</code> يقبل سلسلة نصيّة أيضًا، وفي تلك الحالة يُضاف التحريك إلى الطابور مُمثَّلًا بتلك السلسلة النصيّة. عند استخدام اسم مُخصَّص للطابور فلن يبدأ التحريك تلقائيًّا ويجب أن تستدعي التّابع ‎<code>.dequeue("queuename")</code>‎ لكي يبدأ.
+
=====<code>step</code>=====
 
+
دالة على الشكل ‎<code>[[JavaScript/Function|Function]]( [[JavaScript/Number|Number]] now, Tween tween )‎</code>، وتُمثِّل الدالة المُستدعاة لكل خاصيّة كائن (property) مُحرَّكة لكل عنصر مُحرَّك. تُزوِّدنا هذه الدالة بفرصة لتعديل الكائن <code>Tween</code> وذلك لتغيير قيمة خاصيّة الكائن قبل تعيينها.
===== <code>specialEasing</code> =====
+
=====<code>progress</code>=====
[[JavaScript/Object|كائن مُجرَّد (PlainObject)]]، ويُمثِّل كائنًا يحتوي على واحدة أو أكثر من خاصيّات CSS المُعرَّفة عن طريق الوسيط <code>properties</code> ودوال الحركة السّلسة (easing function) المُوافقة لها. (أضيف في الإصدار: 1.4)
+
دالة على الشكل <code>[[JavaScript/Function|‎Function]]( [[JavaScript/Promise|Promise]] animation, [[JavaScript/Number|Number]] progress, [[JavaScript/Number|Number]] remainingMs )</code>‎، وتُمثِّل الدالة المُستدعاة بعد كل خطوة من التحريك، تُستدعى مرةً واحدةً لكل عنصر مُحرَّك بغض النظر عن عدد الخاصيّات المُحرَّكة. أضيف في الإصدار: 1.8.
 
+
=====<code>complete</code>=====
===== <code>step</code> =====
 
دالة على الشكل ‎<code>[[JavaScript/Function|Function]]( [[JavaScript/Number|Number]] now, [[JavaScript/Tween|Tween]] tween )‎</code>، وتُمثِّل الدالة المُستدعاة لكل خاصيّة كائن (property) مُحرَّكة لكل عنصر مُحرَّك. تُزوِّدنا هذه الدالة بفرصة لتعديل الكائن <code>Tween</code> وذلك لتغيير قيمة خاصيّة الكائن قبل تعيينها.
 
 
 
===== <code>progress</code> =====
 
دالة على الشكل <code>[[JavaScript/Function|‎Function]]( [[JavaScript/Promise|Promise]] animation, [[JavaScript/Number|Number]] progress, [[JavaScript/Number|Number]] remainingMs )</code>‎، وتُمثِّل الدالة المُستدعاة بعد كل خطوة من التحريك، تُستدعى مرةً واحدةً لكل عنصر مُحرَّك بغض النظر عن عدد الخاصيّات المُحرَّكة. (أضيف في الإصدار: 1.8)
 
 
 
===== <code>complete</code> =====
 
 
[[JavaScript/Function|دالة]]، وتُمثِّل الدالة المستدعاة عندما ينتهي تحريك العنصر.
 
[[JavaScript/Function|دالة]]، وتُمثِّل الدالة المستدعاة عندما ينتهي تحريك العنصر.
 
+
=====<code>start</code>=====
===== <code>start</code> =====
+
دالة على الشكل <code>‎[[JavaScript/Function|Function]]( [[JavaScript/Promise|Promise]] animation )</code>‎، وتُمثِّل الدالة المُستدعاة عندما يبدأ تحريك العنصر. أضيف في الإصدار: 1.8.
دالة على الشكل <code>‎[[JavaScript/Function|Function]]( [[JavaScript/Promise|Promise]] animation )</code>‎، وتُمثِّل الدالة المُستدعاة عندما يبدأ تحريك العنصر. (أضيف في الإصدار: 1.8)
+
=====<code>done</code>=====
 
+
دالة على الشكل ‎<code>[[JavaScript/Function|Function]]( [[JavaScript/Promise|Promise]] animation, [[JavaScript/Boolean|Boolean]] jumpedToEnd )</code>‎، وتُمثِّل الدالة المُستدعاة عندما ينتهي تحريك العنصر (أي قُبِلَ كائن <code>Promise</code> الخاص به). أضيف في الإصدار: 1.8.
===== <code>done</code> =====
+
=====<code>fail</code>=====
دالة على الشكل ‎<code>[[JavaScript/Function|Function]]( [[JavaScript/Promise|Promise]] animation, [[JavaScript/Boolean|Boolean]] jumpedToEnd )</code>‎، وتُمثِّل الدالة المُستدعاة عندما ينتهي تحريك العنصر (أي انتهى تحليل كائن <code>Promise</code> الخاص به). (أضيف في الإصدار: 1.8)
+
دالة على الشكل ‎<code>[[JavaScript/Function|Function]]( [[JavaScript/Promise|Promise]] animation, [[JavaScript/Boolean|Boolean]] jumpedToEnd )</code>‎، وتُمثِّل الدالة المُستدعاة عند فشل اكتمال تحريك العنصر (أي رُفِض كائن <code>Promise</code> الخاص به). أضيف في الإصدار: 1.8.
 
+
=====<code>always</code>=====
===== <code>fail</code> =====
+
دالة على الشكل ‎<code>[[JavaScript/Function|Function]]( [[JavaScript/Promise|Promise]] animation, [[JavaScript/Boolean|Boolean]] jumpedToEnd )‎</code>، وتُمثِّل الدالة المُستدعاة عند اكتمال تحريك العنصر أو توقّف تحريكه بدون أن يكتمل (أي سواءً قُبِلَ كائن <code>Promise</code> الخاص به أو رُفِض). أضيف في الإصدار: 1.8.
دالة على الشكل ‎<code>[[JavaScript/Function|Function]]( [[JavaScript/Promise|Promise]] animation, [[JavaScript/Boolean|Boolean]] jumpedToEnd )</code>‎، وتُمثِّل الدالة المُستدعاة عند فشل اكتمال تحريك العنصر (أي رُفِض كائن <code>Promise</code> الخاص به). (أضيف في الإصدار: 1.8)
 
 
 
===== <code>always</code> =====
 
دالة على الشكل ‎<code>[[JavaScript/Function|Function]]( [[JavaScript/Promise|Promise]] animation, [[JavaScript/Boolean|Boolean]] jumpedToEnd )‎</code>، وتُمثِّل الدالة المُستدعاة عند اكتمال تحريك العنصر أو توقّف تحريكه بدون أن يكتمل (أي سواءً انتهى تحليل كائن <code>Promise</code> الخاص به أو رُفِض). (أضيف في الإصدار: 1.8)
 
  
 
يسمح لنا التّابع ‎<code>.animate()‎</code> بإنشاء تأثيرات تحريك لأي خاصيّة CSS عدديّة، والمُعامِل الوحيد المطلوب هو كائن مُجرَّد مُؤلَّف من خاصيّات CSS، يُشبِه هذا الكائن ذلك الكائن المُمكِن إرساله إلى التّابع <code>‎.css()‎</code> عدا أنّ مجال الخاصيّات هنا يكون محصورًا أكثر.
 
يسمح لنا التّابع ‎<code>.animate()‎</code> بإنشاء تأثيرات تحريك لأي خاصيّة CSS عدديّة، والمُعامِل الوحيد المطلوب هو كائن مُجرَّد مُؤلَّف من خاصيّات CSS، يُشبِه هذا الكائن ذلك الكائن المُمكِن إرساله إلى التّابع <code>‎.css()‎</code> عدا أنّ مجال الخاصيّات هنا يكون محصورًا أكثر.
 
+
===قيم وخاصيّات التحريك===
=== قيم وخاصيّات التحريك ===
+
ينبغي تحريك جميع الخاصيّات المُحرَّكة إلى قيمة عدديّة واحدة، لا يُمكِن تحريك معظم الخاصيّات غير العدديّة باستخدام وظائف jQuery الأساسيّة (على سبيل المثال يُمكِن تحريك الخاصيّات <code>[[CSS/width|width]]</code>، و <code>[[CSS/height|height]]</code>، و <code>[[CSS/left|left]]</code>، ولكن لا يُمكِن تحريك الخاصيّة <code>[[CSS/background-color|background-color]]</code> ما لم نستخدم الإضافة [https://github.com/jquery/jquery-color jQuery Color]). تُعامَل قيم الخاصيّات كعدد من البكسلات (Pixels) ما لم يُذكَر خلاف ذلك، ويُمكِن تحديد الواحدات <code>em</code> و <code>%</code> بحسب ما هو مُناسِب.
ينبغي تحريك جميع الخاصيّات المُحرَّكة إلى قيمة عدديّة واحدة، لا يُمكِن تحريك معظم الخاصيّات غير العدديّة باستخدام وظائف jQuery الأساسيّة (على سبيل المثال يُمكِن تحريك الخاصيّات <code>width</code>، و <code>height</code>، و <code>left</code>، ولكن لا يُمكِن تحريك الخاصيّة <code>background-color</code> ما لم نستخدم الإضافة [https://github.com/jquery/jquery-color jQuery Color]). تُعامَل قيم الخاصيّات كعدد من البكسلات (Pixels) ما لم يُذكَر خلاف ذلك، ويُمكِن تحديد الواحدات <code>em</code> و <code>%</code> بحسب ما هو مُناسِب.
 
  
 
بالإضافة إلى خاصيّات التنسيق يُمكننا تحريك بعض الخاصيّات غير المستخدمة للتنسيق مثل <code>scrollTop</code>، و <code>scrollLeft</code>، والخاصيّات المُخصَّصة أيضًا.
 
بالإضافة إلى خاصيّات التنسيق يُمكننا تحريك بعض الخاصيّات غير المستخدمة للتنسيق مثل <code>scrollTop</code>، و <code>scrollLeft</code>، والخاصيّات المُخصَّصة أيضًا.
  
إنّ خاصيّات CSS المختصرة (مثل <code>font</code>، و <code>background</code>، و <code>border</code>) غير مدعومة بشكل كامل، فإذا أردنا على سبيل المثال تحريك عرض الحد (border width) فيجب على الأقل مُسبقًا تعيين قيمة تنسيق الحد (border style) وعرض الحد (border width) إلى قيمة أخرى غير "auto"، أو إن أردنا تحريك حجم الخط (font size) فيجب استخدام خاصيّة الكائن fontSize أو ما يُكافئها في CSS وهي 'font-size' وذلك بدلًا من كتابة 'font' ببساطة.
+
إنّ خاصيّات CSS المختصرة (مثل <code>[[CSS/font|font]]</code>، و <code>[[CSS/background|background]]</code>، و <code>[[CSS/border|border]]</code>) غير مدعومة بشكل كامل، فإذا أردنا على سبيل المثال تحريك عرض الإطار (border width) فيجب على الأقل مُسبقًا تعيين نمط الإطار (<code>[[CSS/border-style|border-style]]</code>) وعرض الإطار (<code>[[CSS/border-width|border-width]]</code>) إلى قيمة أخرى غير <code>"auto"</code>، أو إن أردنا تحريك حجم الخط (<code>[[CSS/font-size|font-size]]</code>) فيجب استخدام خاصيّة الكائن <code>fontSize</code> أو ما يُكافئها في CSS وهي <code>'font-size'</code> وذلك بدلًا من كتابة <code>'font'</code> ببساطة.
  
وبالإضافة للقيم العدديّة، يُمكِن للخاصيّة أن تأخذ قيم على شكل سلسلة نصيّة وهي 'show'، و 'hide'، و 'toggle'. تسمح هذه الاختصارات بإجراء تحريك مُخصَّص للإخفاء أو الإظهار والتي تأخذ بعين الاعتبار نوع العرض للعنصر. من أجل استخدام تتبّع حالة الإطفاء والتشغيل (toggle state)، يجب إعطاء الكلمة المفتاحيّة 'toggle' كقيمة للخاصيّة المطلوب تحريكها.
+
وبالإضافة للقيم العدديّة، يُمكِن للخاصيّة أن تأخذ قيم على شكل سلسلة نصيّة وهي <code>'show'</code>، و <code>'hide'</code>، و <code>'toggle'</code>. تسمح هذه الاختصارات بإجراء تحريك مُخصَّص للإخفاء أو الإظهار والتي تأخذ بالحسبان نوع العرض للعنصر. من أجل التبديل بين وضعيتين (toggle)، يجب إعطاء الكلمة المفتاحيّة <code>'toggle'</code> كقيمة للخاصيّة المطلوب تحريكها.
  
يُمكِن للخاصيّات المُحرَّكة أن تكون نسبيّة، فإن أضفنا ‎+=‎ أو ‎-=‎ إلى بداية القيمة فستُحسَب القيمة عن طريق جمع أو طرح العدد المُعطَى مع القيمة الحاليّة للخاصيّة.
+
يُمكِن للخاصيّات المُحرَّكة أن تكون نسبيّة، فإن أضفنا ‎<code>+=</code>‎ أو <code>‎-=</code>‎ إلى بداية القيمة فستُحسَب القيمة عن طريق جمع أو طرح العدد المُعطَى مع القيمة الحاليّة للخاصيّة.
 
 
ملاحظة: على عكس توابع التحريك الأخرى مثل ‎.slideDown()‎ و ‎.fadeIn()‎، لا يُظهِر التّابع ‎.animate()‎ العناصر المخفيّة كجزء من التأثير، على سبيل المثال عند إعطاء الشيفرة ‎$( "someElement" ).hide().animate({height: "20px"}, 500)‎ سيُنفَّذ التحريك ولكن سيبقى العنصر مخفيًّا.
 
 
 
=== المدة ===
 
تُقدَّر المدّة بالميلي ثانية، تُشير القيم الأعلى إلى تحريك أبطأ وليس أسرع. المدّة الافتراضيّة هي 400 ميلي ثانية، يُمكننا إعطاء السلاسل النصيّة 'slow' و 'fast' للإشارة إلى المدّة 600 و 200 على التوالي وبالترتيب.
 
 
 
=== دوال الاستدعاء ===
 
عند إضافة مُعامِلات دوال الاستدعاء وهي start، و step، و progress، و complete، و done، و fail، و always فستُستدعى الدوال على أساس كل عنصر، تُشير this إلى العنصر المُحرَّك، وإن لم يكن هناك عناصر فلن تُستدعى الدوال، وإن كان هناك عناصر مُتعدّدة فسيُنفَّذ الاستدعاء مرّة لكل عنصر مُطابِق وليس مرّة لكامل التحريك. استخدم التابع ‎.promise()‎ للحصول على promise والذي يُمكننا إرفاق الاستدعاءات إليه التي تُطلَق مرّة للمجموعة المُحرَّكة من أي حجم، بما في ذلك المجموعة التي لا تملك أيّة عناصر.
 
 
 
=== الاستخدام الأساسي ===
 
لتحريك أي عنصر مثل صورة بسيطة:
 
 
 
<nowiki><div id="clickme"></nowiki>
 
  
 +
ملاحظة: على عكس توابع التحريك الأخرى مثل ‎<code>.slideDown()</code>‎ و <code>‎.fadeIn()‎</code>، لا يُظهِر التّابع <code>‎.animate()</code>‎ العناصر المخفيّة كجزء من التأثير، على سبيل المثال عند إعطاء الشيفرة ‎<code>$( "someElement" ).hide().animate({height: "20px"}, 500)‎</code> سيُنفَّذ التحريك ولكن سيبقى العنصر مخفيًّا.
 +
===المدة===
 +
تُقدَّر المدّة بالميلي ثانية، تُشير القيم الأعلى إلى تحريك أبطأ وليس أسرع. المدّة الافتراضيّة هي 400 ميلي ثانية، يُمكننا إعطاء السلاسل النصيّة <code>'slow'</code> و <code>'fast'</code> للإشارة إلى المدّة 600 و 200 على التوالي وبالترتيب.
 +
===دوال الاستدعاء===
 +
عند إضافة مُعامِلات دوال الاستدعاء وهي <code>start</code>، و <code>step</code>، و <code>progress</code>، و <code>complete</code>، و <code>done</code>، و <code>fail</code>، و <code>always</code> فستُستدعى الدوال على أساس كل عنصر، تُشير <code>[[JavaScript/this|this]]</code> إلى العنصر المُحرَّك، وإن لم يكن هناك عناصر فلن تُستدعى الدوال، وإن كان هناك عناصر مُتعدّدة فسيُنفَّذ الاستدعاء مرّة لكل عنصر مُطابِق وليس مرّة لكامل التحريك. استخدم التابع <code>[[jQuery/promise|‎.promise()‎]]</code> للحصول على <code>promise</code> والذي يُمكننا إرفاق الاستدعاءات إليه التي تُطلَق مرّة للمجموعة المُحرَّكة من أي حجم، بما في ذلك المجموعة التي لا تملك أيّة عناصر.
 +
===الاستخدام الأساسي===
 +
لتحريك أي عنصر مثل صورة بسيطة:<syntaxhighlight lang="html">
 +
<div id="clickme">
 
 اضغط هنا
 
 اضغط هنا
 +
</div>
 +
<img id="book" src="book.png" alt="" width="100" height="123"  style="position: relative; left: 10px;">
  
<nowiki></div></nowiki>
 
 
<img id="book" src="book.png" alt="" width="100" height="123"
 
 
 style="position: relative; left: 10px;">
 
 
لتحريك الشفافية (opacity)، والإزاحة اليسرى (left offset)، وارتفاع الصورة (height) معًا:
 
  
 +
</syntaxhighlight>لتحريك الشفافية (<code>[[CSS/opacity|opacity]]</code>)، والإزاحة اليسرى (<code>[[CSS/left|left]]</code>)، وارتفاع الصورة (<code>[[CSS/height|height]]</code>) معًا:<syntaxhighlight lang="javascript">
 
$( "#clickme" ).click(function() {
 
$( "#clickme" ).click(function() {
 
 
 $( "#book" ).animate({
 
 $( "#book" ).animate({
 
 
   opacity: 0.25,
 
   opacity: 0.25,
 
 
   left: "+=50",
 
   left: "+=50",
 
 
   height: "toggle"
 
   height: "toggle"
 
 
 }, 5000, function() {
 
 }, 5000, function() {
 
 
   // اكتمل التحريك
 
   // اكتمل التحريك
 
 
 });
 
 });
 
 
});
 
});
  
لاحظ أنّ قيمة خاصيّة الارتفاع height هي 'toggle'، وبما أنّ الصورة كانت مرئيّة سيُقلِّص التحريك الارتفاع إلى الصفر لإخفائه، وعند الضغط مرّة أخرى سينعكس هذا الانتقال.
 
 
بعد النقرة الأولى تكون شفافيّة الصورة opacity بقيمتها المطلوبة، لذا لن تُحرَّك هذه الخاصيّة بعد النقرة الثانية. بما أنّ القيمة المطلوبة للخاصيّة left هي قيمة نسبيّة فستتحرّك الصورة إلى اليمين مرّة أخرى خلال التحريك الثاني.
 
  
لا تملك خاصيّات الاتجاهات (top، و right، و bottom، و left) تأثيرًا واضحًا على العناصر إن كانت قيمة خاصيّة الموقع position هي static، وهي القيمة الافتراضيّة.
+
</syntaxhighlight>لاحظ أنّ قيمة خاصيّة الارتفاع <code>[[CSS/height|height]]</code> هي <code>'toggle'</code>، ولمّا كانت الصورة مرئيّةً فسيُقلِّص التحريك الارتفاع إلى الصفر لإخفائه، وعند الضغط مرّة أخرى سينعكس هذا الانتقال.
  
ملاحظة: يُوسِّع مشروع jQuery UI التّابع ‎.animate()‎ عن طريق السّماح بتحريك بعض الخاصيّات غير العدديّة مثل الألوان. يتضمّن المشروع أيضًا آليات لتخصيص التحريك عبر أصناف CSS بدلًا من خاصيّات HTML المفردة.
+
بعد النقرة الأولى تكون شفافيّة الصورة <code>opacity</code> بقيمتها المطلوبة، لذا لن تُحرَّك هذه الخاصيّة بعد النقرة الثانية. ولمّا كانت القيمة المطلوبة للخاصيّة <code>left</code> هي قيمة نسبيّة فستتحرّك الصورة إلى اليمين مرّة أخرى خلال التحريك الثاني.
  
ملاحظة: عند محاولة تحريك عنصر ارتفاعه أو عرضه هو 0px والذي تكون محتوياته مرئيّة نتيجة الفيض (overflow)، فقد تقص jQuery هذا الفيض خلال التحريك، ومع ذلك من المُمكِن بإصلاح أبعاد العنصر الأصلي المطلوب إخفاؤه أن نضمن تنفيذ التحريك بسلاسة. يُستخدَم [[Bootstrap/clearfix|حذف تعويم المحتوى (clearfix)]] لإصلاح الأبعاد تلقائيًّا لعنصرك الأساسي بدون الحاجة لتعيينها يدويًّا.
+
لا تملك خاصيّات الاتجاهات (<code>[[CSS/top|top]]</code>، و <code>[[CSS/right|right]]</code>، و <code>[[CSS|bottom]]</code>، و <code>[[CSS/left|left]]</code>) تأثيرًا واضحًا على العناصر إن كانت قيمة خاصيّة الموقع <code>[[CSS/position|position]]</code> هي <code>static</code>، وهي القيمة الافتراضيّة.
  
=== دالة الخطوة (Step Function) ===
+
'''ملاحظة:''' يُوسِّع مشروع [https://jqueryui.com/ jQuery UI] التّابع <code>‎.animate()</code>‎ عن طريق السّماح بتحريك بعض الخاصيّات غير العدديّة مثل الألوان. يتضمّن المشروع أيضًا آليات لتخصيص التحريك عبر أصناف CSS بدلًا من خاصيّات HTML المفردة.
يُزوِّدنا الإصدار الآخر للتّابع ‎.animate()‎ بخيار الخطوة (step)، وهو عبارة عن دالة استدعاء تُطلَق عند كل خطوة من التحريك، تفيدنا هذه الدالة لأجل تمكين أنواع تحريك مُخصَّصة أو تبديل التحريك بينما يحدث، تقبل هذه الدالة وسيطين (هما now و fx)، وتُشير this إلى عنصر DOM قيد التحريك.
 
* now: القيمة العدديّة للخاصيّة قيد التحريك في كل خطوة.
 
* Fx: مرجع إلى نموذج الكائن jQuery.fx، والذي يحتوي على عدد من الخاصيّات مثل elem لأجل العناصر المُحرَّكة، و start و end لأجل أول وآخر قيمة للخاصيّة المُحرَّكة على التوالي وبالترتيب، و prop لأجل الخاصيّة قيد التحريك.
 
لاحظ أنّ دالة الخطوة تُستدعى لكل خاصيّة مُحرَّكة لكل عنصر مُحرَّك. على سبيل المثال إن أخذنا عنصرين من القائمة، فستُطلَق الدالة step أربع مرات في كل خطوة من التحريك:
 
  
 +
'''ملاحظة:''' عند محاولة تحريك عنصر ارتفاعه أو عرضه هو <code>0px</code> والذي تكون محتوياته مرئيّة نتيجة الفيض (overflow)، فقد تقص jQuery هذا الفيض خلال التحريك، ومع ذلك من المُمكِن بإصلاح أبعاد العنصر الأصلي المطلوب إخفاؤه أن نضمن تنفيذ التحريك بسلاسة. يُستخدَم [[CSS/clear|حذف تعويم المحتوى (clearfix)]] لإصلاح الأبعاد تلقائيًّا لعنصرك الأساسي بدون الحاجة لتعيينها يدويًّا.
 +
===دالة الخطوة (Step Function)===
 +
يُزوِّدنا الإصدار الآخر للتّابع ‎<code>.animate()</code>‎ بخيار الخطوة (<code>step</code>)، وهو عبارة عن دالة استدعاء تُطلَق عند كل خطوة من التحريك، تفيدنا هذه الدالة من أجل تمكين أنواع تحريك مُخصَّصة أو تبديل الحركة أثناء حدوثها، تقبل هذه الدالة وسيطين (هما <code>now</code> و <code>fx</code>)، وتُشير <code>[[JavaScript/this|this]]</code> إلى عنصر DOM قيد التحريك.
 +
*<code>now</code>: القيمة العدديّة للخاصيّة قيد التحريك في كل خطوة.
 +
*<code>fx</code>: مرجع إلى كائن prototype المشار إليه بالخاصية [[jQuery/jQuery/fx/|jQuery.fx]]، والذي يحتوي على عدد من الخاصيّات مثل <code>elem</code> لأجل العناصر المُحرَّكة، و <code>start</code> و <code>end</code> لأجل أول وآخر قيمة للخاصيّة المُحرَّكة على التوالي وبالترتيب، و <code>prop</code> لأجل الخاصيّة قيد التحريك.
 +
لاحظ أنّ دالة الخطوة تُستدعى لكل خاصيّة مُحرَّكة لكل عنصر مُحرَّك. على سبيل المثال إن أخذنا عنصرين من القائمة، فستُطلَق الدالة <code>step</code> أربع مرات في كل خطوة من التحريك:<syntaxhighlight lang="javascript">
 
$( "li" ).animate({
 
$( "li" ).animate({
 
 
 opacity: .5,
 
 opacity: .5,
 
 
 height: "50%"
 
 height: "50%"
 
 
}, {
 
}, {
 
 
 step: function( now, fx ) {
 
 step: function( now, fx ) {
 
 
   var data = fx.elem.id + " " + fx.prop + ": " + now;
 
   var data = fx.elem.id + " " + fx.prop + ": " + now;
 
+
   $( "body" ).append( "<div>" + data + "</div>" );
   $( "body" ).append( "<nowiki><div>" + data + "</div></nowiki>" );
 
 
 
 
 }
 
 }
 
 
});
 
});
  
=== سلاسة الحركة (easing) ===
 
المُعامِل الباقي من التّابع ‎.animate()‎ هو عبارة عن سلسلة نصيّة تُحدِّد اسم دالة الحركة السّلسة المُستخدَمة. تُحدِّد دالة الحركة السّلسة السّرعة التي يتقدّم بها التحريك خلال نقاط مختلفة من الحركة. إنّ دوال الحركة السّلسة المُطبَّقة في مكتبة jQuery هي swing (القيمة الافتراضيّة)، وتلك التي تتقدّم بفواصل ثابتة وتُدعى linear. تتوفّر دوال حركة سلسة أخرى عن طريق استخدام إضافات، خاصّة مجموعة jQuery UI.
 
 
=== سلاسة الحركة بحسب الخاصيّة ===
 
نستطيع بدءًا من إصدار jQuery 1.4 تعيين دوال حركة سلسة بحسب الخاصيّة خلال استدعاء وحيد للتّابع ‎.animate()‎، في الإصدار الأول للتّابع ‎.animate()‎ بإمكان كل خاصيّة أن تأخذ مصفوفة كقيمة لها، يُمثِّل العضو الأول للمصفوفة خاصيّة CSS والعضو الثاني دالة الحركة السلسة، وإن لم تُعرَّف دالة حركة سلسة بحسب الخاصيّة لخاصيّة ما، فستستخدم القيمة الموجودة في الوسيط الاختياري لسلاسة الحركة للتابع ‎.animate()‎، وإن لم يكن هذا الوسيط مُعرَّفًا ستُستخدَم القيمة الافتراضيّة swing.
 
  
لتحريك العرض والارتفاع معًا باستخدام دالة الحركة السّلسة swing وتحريك الشفافيّة (opacity) باستخدام دالة الحركة السّلسة linear:
+
</syntaxhighlight>
 +
===سلاسة الحركة (easing)===
 +
المُعامِل الباقي من التّابع ‎<code>.animate()</code>‎ هو عبارة عن سلسلة نصيّة تُحدِّد اسم دالة الحركة السّلسة المُستخدَمة. تُحدِّد دالة الحركة السّلسة السّرعة التي يتقدّم بها التحريك خلال نقاط مختلفة من الحركة. إنّ دوال الحركة السّلسة المُطبَّقة في مكتبة jQuery هي <code>swing</code> (القيمة الافتراضيّة)، وتلك التي تتقدّم بفواصل ثابتة وتُدعى <code>linear</code>. تتوفّر دوال حركة سلسة أخرى عن طريق استخدام إضافات، خاصّة [https://jqueryui.com/ مجموعة jQuery UI].
 +
===سلاسة الحركة بحسب الخاصيّة===
 +
نستطيع بدءًا من إصدار jQuery 1.4 تعيين دوال حركة سلسة بحسب الخاصيّة خلال استدعاء وحيد للتّابع <code>‎.animate()‎</code>، في الإصدار الأول للتّابع <code>‎.animate()</code>‎ بإمكان كل خاصيّة أن تأخذ مصفوفة كقيمة لها، يُمثِّل العضو الأول للمصفوفة خاصيّة CSS والعضو الثاني دالة الحركة السلسة، وإن لم تُعرَّف دالة حركة سلسة بحسب الخاصيّة لخاصيّة ما، فستستخدم القيمة الموجودة في الوسيط الاختياري لسلاسة الحركة للتابع <code>‎.animate()‎</code>، وإن لم يكن هذا الوسيط مُعرَّفًا ستُستخدَم القيمة الافتراضيّة <code>swing</code>.
  
 +
لتحريك العرض والارتفاع معًا باستخدام دالة الحركة السّلسة <code>swing</code> وتحريك الشفافيّة (opacity) باستخدام دالة الحركة السّلسة <code>linear</code>:<syntaxhighlight lang="javascript">
 
$( "#clickme" ).click(function() {
 
$( "#clickme" ).click(function() {
 
 
 $( "#book" ).animate({
 
 $( "#book" ).animate({
 
 
   width: [ "toggle", "swing" ],
 
   width: [ "toggle", "swing" ],
 
 
   height: [ "toggle", "swing" ],
 
   height: [ "toggle", "swing" ],
 
 
   opacity: "toggle"
 
   opacity: "toggle"
 
 
 }, 5000, "linear", function() {
 
 }, 5000, "linear", function() {
 
+
   $( this ).after( "<div>اكتمل التحريك.</div>" );
   $( this ).after( "<nowiki><div>اكتمل التحريك.</div></nowiki>" );
 
 
 
 
 });
 
 });
 
 
});
 
});
  
في الإصدار الثاني من التّابع ‎.animate()‎، يُمكِن لكائن الاختيارات أن يتضمّن الخاصيّة specialEasing والتي هي بحد ذاتها كائن من خاصيّات CSS ودوال الحركة السّلسة المُوافقة لها. على سبيل المثال لتحريك العرض باستخدام دالة الحركة السّلسة linear وتحريك الارتفاع باستخدام دالة الحركة السّلسة easeOutBounce:
 
  
 +
</syntaxhighlight>في الإصدار الثاني من التّابع ‎<code>.animate()</code>‎، يُمكِن لكائن الاختيارات أن يتضمّن الخاصيّة <code>specialEasing</code> والتي هي بحد ذاتها كائن من خاصيّات CSS ودوال الحركة السّلسة المُوافقة لها. على سبيل المثال لتحريك العرض باستخدام دالة الحركة السّلسة <code>linear</code> وتحريك الارتفاع باستخدام دالة الحركة السّلسة <code>easeOutBounce</code>:<syntaxhighlight lang="javascript">
 
$( "#clickme" ).click(function() {
 
$( "#clickme" ).click(function() {
 
 
 $( "#book" ).animate({
 
 $( "#book" ).animate({
 
 
   width: "toggle",
 
   width: "toggle",
 
 
   height: "toggle"
 
   height: "toggle"
 
 
 }, {
 
 }, {
 
 
   duration: 5000,
 
   duration: 5000,
 
 
   specialEasing: {
 
   specialEasing: {
 
 
     width: "linear",
 
     width: "linear",
 
 
     height: "easeOutBounce"
 
     height: "easeOutBounce"
 
 
   },
 
   },
 
 
   complete: function() {
 
   complete: function() {
 
+
     $( this ).after( "<div>اكتمل التحريك.</div>" );
     $( this ).after( "<nowiki><div>اكتمل التحريك.</div></nowiki>" );
 
 
 
 
   }
 
   }
 
 
 });
 
 });
 
 
});
 
});
  
نحتاج كما أشرنا سابقًا إلى إضافة لاستخدام الدالة easeOutBounce.
 
 
=== ملاحظات إضافية ===
 
يُمكِن إيقاف جميع تأثيرات jQuery عامّةً بما في ذلك التّابع ‎.animate()‎ عن طريق تعيين jQuery.fx.off = true والتي تقوم بكفاءة بتعيين المدّة إلى الصفر، للمزيد من المعلومات انظر إلى [[jQuery/jQuery/fx/off|jQuery.fx.off]].
 
 
=== أمثلة ===
 
اضغط على الزر لتحريك عنصر <nowiki><div> عن طريق خاصيّات مُتعدّدة مختلفة:</nowiki>
 
  
 +
</syntaxhighlight>نحتاج كما أشرنا سابقًا إلى إضافة لاستخدام الدالة <code>easeOutBounce</code>.
 +
===ملاحظات إضافية===
 +
يُمكِن إيقاف جميع تأثيرات jQuery عامّةً بما في ذلك التّابع <code>‎.animate()</code>‎ عن طريق تعيين <code>jQuery.fx.off = true</code> والتي تقوم بكفاءة بتعيين المدّة إلى الصفر، للمزيد من المعلومات انظر إلى [[jQuery/jQuery/fx/off|jQuery.fx.off]].
 +
===أمثلة===
 +
اضغط على الزر لتحريك عنصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> عن طريق خاصيّات مُتعدّدة مختلفة:<syntaxhighlight lang="html">
 
<!doctype html>
 
<!doctype html>
 
 
<html lang="en">
 
<html lang="en">
 
+
<head> 
<head>
+
<meta charset="utf-8"> 
 
+
<title>مثال عن التحريك</title> 
 <meta charset="utf-8">
+
<style>
 
 
 <title>مثال عن التحريك</title>
 
 
 
 <style>
 
 
 
 
 div {
 
 div {
 
 
   background-color: #bca;
 
   background-color: #bca;
 
 
   width: 100px;
 
   width: 100px;
 
 
   border: 1px solid green;
 
   border: 1px solid green;
 
+
 } 
 }
+
</style>
 
+
 
 </style>
+
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
 
 
 <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
 
 
 
 
</head>
 
</head>
  
 
<body>
 
<body>
 
+
<button id="go">&raquo; Run</button>
<button id="go">&amp;raquo; Run</button>
+
<div id="block">مرحبًا!</div>
 
 
<nowiki><div id="block">مرحبًا!</div></nowiki>
 
 
 
 
<script>
 
<script>
 
 
// استخدام أنواع واحدات متعددة بداخل تحريك واحد
 
// استخدام أنواع واحدات متعددة بداخل تحريك واحد
  
 
$( "#go" ).click(function() {
 
$( "#go" ).click(function() {
 
 
 $( "#block" ).animate({
 
 $( "#block" ).animate({
 
 
   width: "70%",
 
   width: "70%",
 
 
   opacity: 0.4,
 
   opacity: 0.4,
 
 
   marginLeft: "0.6in",
 
   marginLeft: "0.6in",
 
 
   fontSize: "3em",
 
   fontSize: "3em",
 
 
   borderWidth: "10px"
 
   borderWidth: "10px"
 
 
 }, 1500 );
 
 }, 1500 );
 
 
});
 
});
 
 
</script>
 
</script>
  
 
</body>
 
</body>
 
 
</html>
 
</html>
  
تحريك خاصيّة اليسار left لعنصر <nowiki><div> عن طريق قيمة نسبيّة، اضغط عدّة مرات على الأزرار لمشاهدة عدّة تحريكات نسبيّة مُتتابعة خلف بعضها:</nowiki>
+
</syntaxhighlight>تحريك خاصيّة اليسار <code>[[CSS/left|left]]</code> لعنصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> عن طريق قيمة نسبيّة، اضغط عدّة مرات على الأزرار لمشاهدة عدّة تحريكات نسبيّة مُتتابعة خلف بعضها:<syntaxhighlight lang="html">
 
 
 
<!doctype html>
 
<!doctype html>
 
 
<html lang="en">
 
<html lang="en">
 
 
<head>
 
<head>
 +
<meta charset="utf-8">
 +
<title>مثال عن التحريك</title>
  
 <meta charset="utf-8">
+
<style>
 
 
 <title>مثال عن التحريك</title>
 
 
 
 <style>
 
 
 
 
 div {
 
 div {
 
 
   position: absolute;
 
   position: absolute;
 
 
   background-color: #abc;
 
   background-color: #abc;
 
 
   left: 50px;
 
   left: 50px;
 
 
   width: 90px;
 
   width: 90px;
 
 
   height: 90px;
 
   height: 90px;
 
 
   margin: 5px;
 
   margin: 5px;
 
+
 } 
 }
+
</style>
 
+
 
 </style>
+
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
 
 
 <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
 
 
 
 
</head>
 
</head>
  
 
<body>
 
<body>
  
<button id="left">&amp;laquo;</button>
+
<button id="left">&laquo;</button>
 
+
<button id="right">&raquo;</button>
<button id="right">&amp;raquo;</button>
+
<div class="block"></div>
 
 
<nowiki><div class="block"></div></nowiki>
 
 
 
 
<script>
 
<script>
 
 
$( "#right" ).click(function() {
 
$( "#right" ).click(function() {
 
 
 $( ".block" ).animate({ "left": "+=50px" }, "slow" );
 
 $( ".block" ).animate({ "left": "+=50px" }, "slow" );
 
 
});
 
});
  
 
$( "#left" ).click(function(){
 
$( "#left" ).click(function(){
 
 
 $( ".block" ).animate({ "left": "-=50px" }, "slow" );
 
 $( ".block" ).animate({ "left": "-=50px" }, "slow" );
 
 
});
 
});
  
 
</script>
 
</script>
 
 
</body>
 
</body>
  
 
</html>
 
</html>
  
في المثال التالي يُظهِر الزر الأول كيفيّة عمل التحريك غير المُتتابِع، حيث يُوسِّع عنصر <nowiki><div> إلى العرض 90% في نفس الوقت الذي يزداد فيه حجم الخط font-size، وعندما يكتمل تغيير حجم الخط يبدأ تحريك الحدود. يبدأ الزر الثاني تحريك متسلسل تقليدي، حيث يبدأ كل تحريك حالما ينتهي التحريك السابق للعنصر:</nowiki>
+
</syntaxhighlight>في المثال التالي يُظهِر الزر الأول كيفيّة عمل التحريك غير المُتتابِع، حيث يُوسِّع عنصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> إلى العرض <code>90%</code> في نفس الوقت الذي يزداد فيه حجم الخط <code>[[CSS/font-size|font-size]]</code>، وعندما يكتمل تغيير حجم الخط يبدأ تحريك الحدود. يبدأ الزر الثاني تحريك متسلسل تقليدي، حيث يبدأ كل تحريك حالما ينتهي التحريك السابق للعنصر:<syntaxhighlight lang="html">
 
 
 
<!doctype html>
 
<!doctype html>
 
 
<html lang="en">
 
<html lang="en">
 
 
<head>
 
<head>
 
+
<meta charset="utf-8">
 <meta charset="utf-8">
+
<title>مثال عن التحريك</title>
 
+
 
 <title>مثال عن التحريك</title>
+
<style>
 
 
 <style>
 
 
 
 
 div {
 
 div {
 
 
   background-color: #bca;
 
   background-color: #bca;
 
 
   width: 200px;
 
   width: 200px;
 
 
   height: 1.1em;
 
   height: 1.1em;
 
 
   text-align: center;
 
   text-align: center;
 
 
   border: 2px solid green;
 
   border: 2px solid green;
 
 
   margin: 3px;
 
   margin: 3px;
 
 
   font-size: 14px;
 
   font-size: 14px;
 
 
 }
 
 }
  
 
 button {
 
 button {
 
 
   font-size: 14px;
 
   font-size: 14px;
 +
 } 
 +
</style>
  
 }
+
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
 
 
 </style>
 
 
 
 <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
 
  
 
</head>
 
</head>
سطر 392: سطر 251:
 
<body>
 
<body>
  
<button id="go1">&amp;raquo; حرّك الكتلة الأولى</button>
+
<button id="go1">&raquo; حرّك الكتلة الأولى</button>
 
+
<button id="go2">&raquo; حرّك الكتلة الثانية</button>
<button id="go2">&amp;raquo; حرّك الكتلة الثانية</button>
+
<button id="go3">&raquo; حرّك الكتلتين معًا</button>
 
+
<button id="go4">&raquo; إعادة التعيين</button>
<button id="go3">&amp;raquo; حرّك الكتلتين معًا</button>
+
<div id="block1">الكتلة الأولى</div>
 
+
<div id="block2">الكتلة الثانية</div>
<button id="go4">&amp;raquo; إعادة التعيين</button>
 
 
 
<nowiki><div id="block1">الكتلة الأولى</div></nowiki>
 
 
 
<nowiki><div id="block2">الكتلة الثانية</div></nowiki>
 
 
 
 
<script>
 
<script>
  
 
$( "#go1" ).click(function() {
 
$( "#go1" ).click(function() {
 
 
 $( "#block1" )
 
 $( "#block1" )
 
 
   .animate({
 
   .animate({
 
 
     width: "90%"
 
     width: "90%"
 
 
   }, {
 
   }, {
 
 
     queue: false,
 
     queue: false,
 
 
     duration: 3000
 
     duration: 3000
 
 
   })
 
   })
 
 
   .animate({ fontSize: "24px" }, 1500 )
 
   .animate({ fontSize: "24px" }, 1500 )
 
 
   .animate({ borderRightWidth: "15px" }, 1500 );
 
   .animate({ borderRightWidth: "15px" }, 1500 );
 
 
});
 
});
  
 
$( "#go2" ).click(function() {
 
$( "#go2" ).click(function() {
 
 
 $( "#block2" )
 
 $( "#block2" )
 
 
   .animate({ width: "90%" }, 1000 )
 
   .animate({ width: "90%" }, 1000 )
 
 
   .animate({ fontSize: "24px" }, 1000 )
 
   .animate({ fontSize: "24px" }, 1000 )
 
 
   .animate({ borderLeftWidth: "15px" }, 1000 );
 
   .animate({ borderLeftWidth: "15px" }, 1000 );
 
 
});
 
});
  
 
$( "#go3" ).click(function() {
 
$( "#go3" ).click(function() {
 
 
 $( "#go1" ).add( "#go2" ).click();
 
 $( "#go1" ).add( "#go2" ).click();
 
 
});
 
});
  
 
$( "#go4" ).click(function() {
 
$( "#go4" ).click(function() {
 
 
 $( "div" ).css({
 
 $( "div" ).css({
 
 
   width: "",
 
   width: "",
 
 
   fontSize: "",
 
   fontSize: "",
 
 
   borderWidth: ""
 
   borderWidth: ""
 
 
 });
 
 });
 
 
});
 
});
  
 
</script>
 
</script>
 
 
</body>
 
</body>
 
 
</html>
 
</html>
  
تحريك خاصيّة اليسار left لعنصر <nowiki><div> الأول ومزامنة عناصر <div> الأخرى، باستخدام دالة step لتعيين خاصيّات اليسار لها في كل مرحلة من التحريك:</nowiki>
+
</syntaxhighlight>تحريك خاصيّة اليسار <code>[[CSS/left|left]]</code> لعنصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> الأول ومزامنة عناصر <code>[[HTML/div|<nowiki><div></nowiki>]]</code> الأخرى، باستخدام دالة <code>step</code> لتعيين خاصيّات اليسار لها في كل مرحلة من التحريك:<syntaxhighlight lang="html">
 
 
 
<!doctype html>
 
<!doctype html>
 
 
<html lang="en">
 
<html lang="en">
 
 
<head>
 
<head>
 
+
<meta charset="utf-8">
 <meta charset="utf-8">
+
<title>مثال عن التحريك</title>
 
+
 
 <title>مثال عن التحريك</title>
+
<style>
 
 
 <style>
 
 
 
 
 div {
 
 div {
 
 
   position: relative;
 
   position: relative;
 
 
   background-color: #abc;
 
   background-color: #abc;
 
 
   width: 40px;
 
   width: 40px;
 
 
   height: 40px;
 
   height: 40px;
 
 
   float: left;
 
   float: left;
 
 
   margin: 5px;
 
   margin: 5px;
 +
 } 
  
 }
+
</style>
 
+
 
 </style>
+
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
 
 
 <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
 
  
 
</head>
 
</head>
سطر 504: سطر 319:
 
<body>
 
<body>
  
<nowiki><p><button id="go">تشغيل »</button></nowiki><nowiki></p></nowiki>
+
<p><button id="go">تشغيل »</button></p>
 
+
<div class="block"></div>
<nowiki><div class="block"></div></nowiki>
+
<div class="block"></div>
 
+
<div class="block"></div>
<nowiki><div class="block"></div></nowiki>
+
<div class="block"></div>
 
+
<div class="block"></div>
<nowiki><div class="block"></div></nowiki>
+
<div class="block"></div>
 
 
<nowiki><div class="block"></div></nowiki>
 
 
 
<nowiki><div class="block"></div></nowiki>
 
 
 
<nowiki><div class="block"></div></nowiki>
 
  
 
<script>
 
<script>
  
 
$( "#go" ).click(function() {
 
$( "#go" ).click(function() {
 
 
 $( ".block:first" ).animate({
 
 $( ".block:first" ).animate({
 
 
   left: 100
 
   left: 100
 
 
 }, {
 
 }, {
 
 
   duration: 1000,
 
   duration: 1000,
 
 
   step: function( now, fx ){
 
   step: function( now, fx ){
 
 
     $( ".block:gt(0)" ).css( "left", now );
 
     $( ".block:gt(0)" ).css( "left", now );
 
 
   }
 
   }
 
 
 });
 
 });
 
 
});
 
});
  
سطر 546: سطر 346:
 
</html>
 
</html>
  
تحريك جميع الفقرات بتعيين خاصيّة اليسار left إلى القيمة 50 والشفافية opacity إلى القيمة 1 (أي تُصبِح مرئيّة)، واستكمال الحركة خلال 500 ميلي ثانية:
+
</syntaxhighlight>تحريك جميع الفقرات بتعيين خاصيّة اليسار <code>[[CSS/left|left]]</code> إلى القيمة <code>50</code> والشفافية <code>[[CSS/opacity|opacity]]</code> إلى القيمة <code>1</code> (أي تُصبِح مرئيّة)، واستكمال الحركة خلال 500 ميلي ثانية:<syntaxhighlight lang="javascript">
 
 
 
$( "p" ).animate({
 
$( "p" ).animate({
 
 
 left: 50,
 
 left: 50,
 
 
 opacity: 1
 
 opacity: 1
 
 
}, 500 );
 
}, 500 );
  
تحريك خاصيّات اليسار left والشفافيّة opacity لكل الفقرات، شغّل الحركة خارج الطابور لكي تبدأ تلقائيًّا بدون انتظار دورها:
 
  
 +
</syntaxhighlight>تحريك خاصيّات اليسار <code>[[CSS/left|left]]</code> والشفافيّة <code>[[CSS/opacity|opacity]]</code> لكل الفقرات، شغّل الحركة خارج الطابور لكي تبدأ تلقائيًّا بدون انتظار دورها:<syntaxhighlight lang="javascript">
 
$( "p" ).animate({
 
$( "p" ).animate({
 
 
 left: "50px",
 
 left: "50px",
 
 
 opacity: 1
 
 opacity: 1
 
 
}, {
 
}, {
 
 
 duration: 500,
 
 duration: 500,
 
 
 queue: false
 
 queue: false
 
 
});
 
});
  
نشاهد هنا مثالًا عن استخدام دوال الحركة السّلسة لتزويدنا بتنسيقات مختلفة للتحريك، سيعمل هذا المثال فقط في حال امتلاكنا لإضافة تُزوِّدنا بدوال الحركة السّلسة. لاحظ عدم فعل هذه الشيفرة أي شيء ما لم يكن عنصر الفقرة مخفيًّا:
 
  
 +
</syntaxhighlight>نشاهد هنا مثالًا عن استخدام دوال الحركة السّلسة لتزويدنا بتنسيقات مختلفة للتحريك، سيعمل هذا المثال فقط في حال امتلاكنا لإضافة تُزوِّدنا بدوال الحركة السّلسة. لاحظ عدم فعل هذه الشيفرة أي شيء ما لم يكن عنصر الفقرة مخفيًّا:<syntaxhighlight lang="javascript">
 
$( "p" ).animate({
 
$( "p" ).animate({
 
 
 opacity: "show"
 
 opacity: "show"
 
 
}, "slow", "easein" );
 
}, "slow", "easein" );
 
+
</syntaxhighlight>تحريك جميع الفقرات بالتبديل بين وضعيتين (toggle) للخاصيّتين <code>[[CSS/height|height]]</code> و <code>[[CSS/opacity|opacity]]</code>، واستكمال الحركة خلال 600 ميلي ثانية:<syntaxhighlight lang="javascript">
تحريك جميع الفقرات بالتبديل بين وضعيتين (toggle) للخاصيّتين height و opacity، واستكمال الحركة خلال 600 ميلي ثانية:
 
 
 
 
$( "p" ).animate({
 
$( "p" ).animate({
 
 
 height: "toggle",
 
 height: "toggle",
 
 
 opacity: "toggle"
 
 opacity: "toggle"
 
 
}, {
 
}, {
 
 
 duration: "slow"
 
 duration: "slow"
 
 
});
 
});
  
استخدام دالة حركة سلسة لتزويدنا بتنسيق مختلف للحركة، سيعمل هذا المثال فقط إن كنّا نمتلك إضافة تُزوِّدنا بدالة الحركة السّلسة هذه:
 
  
 +
</syntaxhighlight>استخدام دالة حركة سلسة لتزويدنا بتنسيق مختلف للحركة، سيعمل هذا المثال فقط إن كنّا نمتلك إضافة تُزوِّدنا بدالة الحركة السّلسة هذه:<syntaxhighlight lang="javascript">
 
$( "p" ).animate({
 
$( "p" ).animate({
 
 
 opacity: "show"
 
 opacity: "show"
 
 
}, {
 
}, {
 
 
 duration: "slow",
 
 duration: "slow",
 
 
 easing: "easein"
 
 easing: "easein"
 
 
});
 
});
  
تحريك جميع الفقرات وتنفيذ دالة استدعاء عند انتهاء الحركة. الوسيط الأول هو كائن من خاصيّات CSS، يُحدِّد الوسيط الثاني أنّ التحريك سيستغرق 1000 ميلي ثانية لكي يكتمل، ويُحدِّد الوسيط الثالث نوع الحركة السّلسة، والوسيط الرابع هو عبارة عن دالة استدعاء مجهولة (anonymous callback function):
 
  
 +
</syntaxhighlight>تحريك جميع الفقرات وتنفيذ دالة استدعاء عند انتهاء الحركة. الوسيط الأول هو كائن من خاصيّات CSS، يُحدِّد الوسيط الثاني أنّ التحريك سيستغرق 1000 ميلي ثانية لكي يكتمل، ويُحدِّد الوسيط الثالث نوع الحركة السّلسة، والوسيط الرابع هو عبارة عن دالة استدعاء مجهولة (anonymous callback function):<syntaxhighlight lang="javascript">
 
$( "p" ).animate({
 
$( "p" ).animate({
 
 
 height: 200,
 
 height: 200,
 
 
 width: 400,
 
 width: 400,
 
 
 opacity: 0.5
 
 opacity: 0.5
 
 
}, 1000, "linear", function() {
 
}, 1000, "linear", function() {
 
 
 alert( "all done" );
 
 alert( "all done" );
 +
});
  
});
 
  
== مصادر ==
+
</syntaxhighlight>
* صفحة التابع ‎‎‎‎.animate()‎ في توثيق jQuery الرسمي.
+
==مصادر==
 +
*[http://api.jquery.com/animate/ صفحة التابع ‎‎‎‎.animate()‎ في توثيق jQuery الرسمي].<noinclude>{{DISPLAYTITLE:التابع <code>‎‎.animate()‎‎</code>‎ في jQuery}}</noinclude>
 +
[[تصنيف:jQuery]]
 +
[[تصنيف:jQuery Method]]
 +
[[تصنيف:jQuery Effects]]

المراجعة الحالية بتاريخ 09:21، 24 يونيو 2018

‎.animate( properties [, duration ] [, easing ] [, complete ] )‎

القيمة المعادة

كائن jQuery.

الوصف

يُستخدَم التّابع ‎.animate()‎ في تنفيذ تحريك (animation) مُخصَّص لمجموعة من خاصيّات CSS.

‎.animate( properties [, duration ] [, easing ] [, complete ] )‎

أضيفت في الإصدار 1.0.

properties

كائن مُجرَّد (PlainObject)، ويُمثِّل خاصيّات CSS والقيم التي سيتجه التحريك باتجاهها.

duration

عدد أو سلسلة نصيّة، وتُمثِّل القيمة التي ستُحدِّد فترة تشغيل التحريك. القيمة الافتراضيّة: 400.

easing

سلسلة نصيّة، وتُمثِّل دالة الحركة السّلسة (easing function) المُستخدَمة لأجل الانتقال. القيمة الافتراضيّة: swing.

complete

دالة، وتُمثِّل الدالة المطلوب استدعاؤها عندما يكتمل التحريك، تُستَدعى مرّة واحدة لكل عنصر مُطابِق.

‎.animate( properties, options )‎

أضيفت في الإصدار 1.0.

properties

كائن مُجرَّد (PlainObject)، ويُمثِّل خاصيّات CSS والقيم التي سيتجه التحريك باتجاهها.

options

كائن مُجرَّد (PlainObject)، ويُمثِّل مجموعة خيارات إضافيّة لتمريرها إلى التّابع.

duration

عدد أو سلسلة نصيّة، وتُمثِّل القيمة التي ستُحدِّد فترة تشغيل التحريك. القيمة الافتراضيّة: 400.

easing

سلسلة نصيّة، وتُمثِّل دالة الحركة السّلسة (easing function) المُستخدَمة لأجل الانتقال. القيمة الافتراضيّة: swing.

queue

قيمة منطقيّة أو سلسلة نصيّة، وتُمثِّل قيمة منطقيّة تُحدِّد ما إذا كان يجب وضع التحريك في طابور التأثيرات، إن كانت قيمتها false فسيبدأ التحريك فورًا. بدءًا من إصدار jQuery 1.7 أصبح الخيار queue يقبل سلسلة نصيّة أيضًا، وفي تلك الحالة يُضاف التحريك إلى الطابور مُمثَّلًا بتلك السلسلة النصيّة. عند استخدام اسم مُخصَّص للطابور فلن يبدأ التحريك تلقائيًّا ويجب أن تستدعي التّابع ‎.dequeue("queuename")‎ لكي يبدأ. القيمة الافتراضيّة: true.

specialEasing

كائن مُجرَّد (PlainObject)، ويُمثِّل كائنًا يحتوي على واحدة أو أكثر من خاصيّات CSS المُعرَّفة عن طريق الوسيط properties ودوال الحركة السّلسة (easing function) المُوافقة لها. أضيف في الإصدار: 1.4.

step

دالة على الشكل ‎Function( Number now, Tween tween )‎، وتُمثِّل الدالة المُستدعاة لكل خاصيّة كائن (property) مُحرَّكة لكل عنصر مُحرَّك. تُزوِّدنا هذه الدالة بفرصة لتعديل الكائن Tween وذلك لتغيير قيمة خاصيّة الكائن قبل تعيينها.

progress

دالة على الشكل ‎Function( Promise animation, Number progress, Number remainingMs )‎، وتُمثِّل الدالة المُستدعاة بعد كل خطوة من التحريك، تُستدعى مرةً واحدةً لكل عنصر مُحرَّك بغض النظر عن عدد الخاصيّات المُحرَّكة. أضيف في الإصدار: 1.8.

complete

دالة، وتُمثِّل الدالة المستدعاة عندما ينتهي تحريك العنصر.

start

دالة على الشكل ‎Function( Promise animation )‎، وتُمثِّل الدالة المُستدعاة عندما يبدأ تحريك العنصر. أضيف في الإصدار: 1.8.

done

دالة على الشكل ‎Function( Promise animation, Boolean jumpedToEnd )‎، وتُمثِّل الدالة المُستدعاة عندما ينتهي تحريك العنصر (أي قُبِلَ كائن Promise الخاص به). أضيف في الإصدار: 1.8.

fail

دالة على الشكل ‎Function( Promise animation, Boolean jumpedToEnd )‎، وتُمثِّل الدالة المُستدعاة عند فشل اكتمال تحريك العنصر (أي رُفِض كائن Promise الخاص به). أضيف في الإصدار: 1.8.

always

دالة على الشكل ‎Function( Promise animation, Boolean jumpedToEnd )‎، وتُمثِّل الدالة المُستدعاة عند اكتمال تحريك العنصر أو توقّف تحريكه بدون أن يكتمل (أي سواءً قُبِلَ كائن Promise الخاص به أو رُفِض). أضيف في الإصدار: 1.8.

يسمح لنا التّابع ‎.animate()‎ بإنشاء تأثيرات تحريك لأي خاصيّة CSS عدديّة، والمُعامِل الوحيد المطلوب هو كائن مُجرَّد مُؤلَّف من خاصيّات CSS، يُشبِه هذا الكائن ذلك الكائن المُمكِن إرساله إلى التّابع ‎.css()‎ عدا أنّ مجال الخاصيّات هنا يكون محصورًا أكثر.

قيم وخاصيّات التحريك

ينبغي تحريك جميع الخاصيّات المُحرَّكة إلى قيمة عدديّة واحدة، لا يُمكِن تحريك معظم الخاصيّات غير العدديّة باستخدام وظائف jQuery الأساسيّة (على سبيل المثال يُمكِن تحريك الخاصيّات width، و height، و left، ولكن لا يُمكِن تحريك الخاصيّة background-color ما لم نستخدم الإضافة jQuery Color). تُعامَل قيم الخاصيّات كعدد من البكسلات (Pixels) ما لم يُذكَر خلاف ذلك، ويُمكِن تحديد الواحدات em و % بحسب ما هو مُناسِب.

بالإضافة إلى خاصيّات التنسيق يُمكننا تحريك بعض الخاصيّات غير المستخدمة للتنسيق مثل scrollTop، و scrollLeft، والخاصيّات المُخصَّصة أيضًا.

إنّ خاصيّات CSS المختصرة (مثل font، و background، و border) غير مدعومة بشكل كامل، فإذا أردنا على سبيل المثال تحريك عرض الإطار (border width) فيجب على الأقل مُسبقًا تعيين نمط الإطار (border-style) وعرض الإطار (border-width) إلى قيمة أخرى غير "auto"، أو إن أردنا تحريك حجم الخط (font-size) فيجب استخدام خاصيّة الكائن fontSize أو ما يُكافئها في CSS وهي 'font-size' وذلك بدلًا من كتابة 'font' ببساطة.

وبالإضافة للقيم العدديّة، يُمكِن للخاصيّة أن تأخذ قيم على شكل سلسلة نصيّة وهي 'show'، و 'hide'، و 'toggle'. تسمح هذه الاختصارات بإجراء تحريك مُخصَّص للإخفاء أو الإظهار والتي تأخذ بالحسبان نوع العرض للعنصر. من أجل التبديل بين وضعيتين (toggle)، يجب إعطاء الكلمة المفتاحيّة 'toggle' كقيمة للخاصيّة المطلوب تحريكها.

يُمكِن للخاصيّات المُحرَّكة أن تكون نسبيّة، فإن أضفنا ‎+=‎ أو ‎-=‎ إلى بداية القيمة فستُحسَب القيمة عن طريق جمع أو طرح العدد المُعطَى مع القيمة الحاليّة للخاصيّة.

ملاحظة: على عكس توابع التحريك الأخرى مثل ‎.slideDown()‎ و ‎.fadeIn()‎، لا يُظهِر التّابع ‎.animate()‎ العناصر المخفيّة كجزء من التأثير، على سبيل المثال عند إعطاء الشيفرة ‎$( "someElement" ).hide().animate({height: "20px"}, 500)‎ سيُنفَّذ التحريك ولكن سيبقى العنصر مخفيًّا.

المدة

تُقدَّر المدّة بالميلي ثانية، تُشير القيم الأعلى إلى تحريك أبطأ وليس أسرع. المدّة الافتراضيّة هي 400 ميلي ثانية، يُمكننا إعطاء السلاسل النصيّة 'slow' و 'fast' للإشارة إلى المدّة 600 و 200 على التوالي وبالترتيب.

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

عند إضافة مُعامِلات دوال الاستدعاء وهي start، و step، و progress، و complete، و done، و fail، و always فستُستدعى الدوال على أساس كل عنصر، تُشير this إلى العنصر المُحرَّك، وإن لم يكن هناك عناصر فلن تُستدعى الدوال، وإن كان هناك عناصر مُتعدّدة فسيُنفَّذ الاستدعاء مرّة لكل عنصر مُطابِق وليس مرّة لكامل التحريك. استخدم التابع ‎.promise()‎ للحصول على promise والذي يُمكننا إرفاق الاستدعاءات إليه التي تُطلَق مرّة للمجموعة المُحرَّكة من أي حجم، بما في ذلك المجموعة التي لا تملك أيّة عناصر.

الاستخدام الأساسي

لتحريك أي عنصر مثل صورة بسيطة:

<div id="clickme">
 اضغط هنا
</div>
<img id="book" src="book.png" alt="" width="100" height="123"  style="position: relative; left: 10px;">

لتحريك الشفافية (opacity)، والإزاحة اليسرى (left)، وارتفاع الصورة (height) معًا:

$( "#clickme" ).click(function() {
 $( "#book" ).animate({
   opacity: 0.25,
   left: "+=50",
   height: "toggle"
 }, 5000, function() {
   // اكتمل التحريك
 });
});

لاحظ أنّ قيمة خاصيّة الارتفاع height هي 'toggle'، ولمّا كانت الصورة مرئيّةً فسيُقلِّص التحريك الارتفاع إلى الصفر لإخفائه، وعند الضغط مرّة أخرى سينعكس هذا الانتقال.

بعد النقرة الأولى تكون شفافيّة الصورة opacity بقيمتها المطلوبة، لذا لن تُحرَّك هذه الخاصيّة بعد النقرة الثانية. ولمّا كانت القيمة المطلوبة للخاصيّة left هي قيمة نسبيّة فستتحرّك الصورة إلى اليمين مرّة أخرى خلال التحريك الثاني.

لا تملك خاصيّات الاتجاهات (top، و right، و bottom، و left) تأثيرًا واضحًا على العناصر إن كانت قيمة خاصيّة الموقع position هي static، وهي القيمة الافتراضيّة.

ملاحظة: يُوسِّع مشروع jQuery UI التّابع ‎.animate()‎ عن طريق السّماح بتحريك بعض الخاصيّات غير العدديّة مثل الألوان. يتضمّن المشروع أيضًا آليات لتخصيص التحريك عبر أصناف CSS بدلًا من خاصيّات HTML المفردة.

ملاحظة: عند محاولة تحريك عنصر ارتفاعه أو عرضه هو 0px والذي تكون محتوياته مرئيّة نتيجة الفيض (overflow)، فقد تقص jQuery هذا الفيض خلال التحريك، ومع ذلك من المُمكِن بإصلاح أبعاد العنصر الأصلي المطلوب إخفاؤه أن نضمن تنفيذ التحريك بسلاسة. يُستخدَم حذف تعويم المحتوى (clearfix) لإصلاح الأبعاد تلقائيًّا لعنصرك الأساسي بدون الحاجة لتعيينها يدويًّا.

دالة الخطوة (Step Function)

يُزوِّدنا الإصدار الآخر للتّابع ‎.animate()‎ بخيار الخطوة (step)، وهو عبارة عن دالة استدعاء تُطلَق عند كل خطوة من التحريك، تفيدنا هذه الدالة من أجل تمكين أنواع تحريك مُخصَّصة أو تبديل الحركة أثناء حدوثها، تقبل هذه الدالة وسيطين (هما now و fx)، وتُشير this إلى عنصر DOM قيد التحريك.

  • now: القيمة العدديّة للخاصيّة قيد التحريك في كل خطوة.
  • fx: مرجع إلى كائن prototype المشار إليه بالخاصية jQuery.fx، والذي يحتوي على عدد من الخاصيّات مثل elem لأجل العناصر المُحرَّكة، و start و end لأجل أول وآخر قيمة للخاصيّة المُحرَّكة على التوالي وبالترتيب، و prop لأجل الخاصيّة قيد التحريك.

لاحظ أنّ دالة الخطوة تُستدعى لكل خاصيّة مُحرَّكة لكل عنصر مُحرَّك. على سبيل المثال إن أخذنا عنصرين من القائمة، فستُطلَق الدالة step أربع مرات في كل خطوة من التحريك:

$( "li" ).animate({
 opacity: .5,
 height: "50%"
}, {
 step: function( now, fx ) {
   var data = fx.elem.id + " " + fx.prop + ": " + now;
   $( "body" ).append( "<div>" + data + "</div>" );
 }
});

سلاسة الحركة (easing)

المُعامِل الباقي من التّابع ‎.animate()‎ هو عبارة عن سلسلة نصيّة تُحدِّد اسم دالة الحركة السّلسة المُستخدَمة. تُحدِّد دالة الحركة السّلسة السّرعة التي يتقدّم بها التحريك خلال نقاط مختلفة من الحركة. إنّ دوال الحركة السّلسة المُطبَّقة في مكتبة jQuery هي swing (القيمة الافتراضيّة)، وتلك التي تتقدّم بفواصل ثابتة وتُدعى linear. تتوفّر دوال حركة سلسة أخرى عن طريق استخدام إضافات، خاصّة مجموعة jQuery UI.

سلاسة الحركة بحسب الخاصيّة

نستطيع بدءًا من إصدار jQuery 1.4 تعيين دوال حركة سلسة بحسب الخاصيّة خلال استدعاء وحيد للتّابع ‎.animate()‎، في الإصدار الأول للتّابع ‎.animate()‎ بإمكان كل خاصيّة أن تأخذ مصفوفة كقيمة لها، يُمثِّل العضو الأول للمصفوفة خاصيّة CSS والعضو الثاني دالة الحركة السلسة، وإن لم تُعرَّف دالة حركة سلسة بحسب الخاصيّة لخاصيّة ما، فستستخدم القيمة الموجودة في الوسيط الاختياري لسلاسة الحركة للتابع ‎.animate()‎، وإن لم يكن هذا الوسيط مُعرَّفًا ستُستخدَم القيمة الافتراضيّة swing.

لتحريك العرض والارتفاع معًا باستخدام دالة الحركة السّلسة swing وتحريك الشفافيّة (opacity) باستخدام دالة الحركة السّلسة linear:

$( "#clickme" ).click(function() {
 $( "#book" ).animate({
   width: [ "toggle", "swing" ],
   height: [ "toggle", "swing" ],
   opacity: "toggle"
 }, 5000, "linear", function() {
   $( this ).after( "<div>اكتمل التحريك.</div>" );
 });
});

في الإصدار الثاني من التّابع ‎.animate()‎، يُمكِن لكائن الاختيارات أن يتضمّن الخاصيّة specialEasing والتي هي بحد ذاتها كائن من خاصيّات CSS ودوال الحركة السّلسة المُوافقة لها. على سبيل المثال لتحريك العرض باستخدام دالة الحركة السّلسة linear وتحريك الارتفاع باستخدام دالة الحركة السّلسة easeOutBounce:

$( "#clickme" ).click(function() {
 $( "#book" ).animate({
   width: "toggle",
   height: "toggle"
 }, {
   duration: 5000,
   specialEasing: {
     width: "linear",
     height: "easeOutBounce"
   },
   complete: function() {
     $( this ).after( "<div>اكتمل التحريك.</div>" );
   }
 });
});

نحتاج كما أشرنا سابقًا إلى إضافة لاستخدام الدالة easeOutBounce.

ملاحظات إضافية

يُمكِن إيقاف جميع تأثيرات jQuery عامّةً بما في ذلك التّابع ‎.animate()‎ عن طريق تعيين jQuery.fx.off = true والتي تقوم بكفاءة بتعيين المدّة إلى الصفر، للمزيد من المعلومات انظر إلى jQuery.fx.off.

أمثلة

اضغط على الزر لتحريك عنصر <div> عن طريق خاصيّات مُتعدّدة مختلفة:

<!doctype html>
<html lang="en">
<head> 
<meta charset="utf-8"> 
<title>مثال عن التحريك</title> 
<style>
 div {
   background-color: #bca;
   width: 100px;
   border: 1px solid green;
 } 
</style>
 
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>

<body>
<button id="go">&raquo; Run</button>
<div id="block">مرحبًا!</div>
<script>
// استخدام أنواع واحدات متعددة بداخل تحريك واحد

$( "#go" ).click(function() {
 $( "#block" ).animate({
   width: "70%",
   opacity: 0.4,
   marginLeft: "0.6in",
   fontSize: "3em",
   borderWidth: "10px"
 }, 1500 );
});
</script>

</body>
</html>

تحريك خاصيّة اليسار left لعنصر <div> عن طريق قيمة نسبيّة، اضغط عدّة مرات على الأزرار لمشاهدة عدّة تحريكات نسبيّة مُتتابعة خلف بعضها:

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>مثال عن التحريك</title>

<style>
 div {
   position: absolute;
   background-color: #abc;
   left: 50px;
   width: 90px;
   height: 90px;
   margin: 5px;
 } 
</style>
 
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>

<body>

<button id="left">&laquo;</button>
<button id="right">&raquo;</button>
<div class="block"></div>
<script>
$( "#right" ).click(function() {
 $( ".block" ).animate({ "left": "+=50px" }, "slow" );
});

$( "#left" ).click(function(){
 $( ".block" ).animate({ "left": "-=50px" }, "slow" );
});

</script>
</body>

</html>

في المثال التالي يُظهِر الزر الأول كيفيّة عمل التحريك غير المُتتابِع، حيث يُوسِّع عنصر <div> إلى العرض 90% في نفس الوقت الذي يزداد فيه حجم الخط font-size، وعندما يكتمل تغيير حجم الخط يبدأ تحريك الحدود. يبدأ الزر الثاني تحريك متسلسل تقليدي، حيث يبدأ كل تحريك حالما ينتهي التحريك السابق للعنصر:

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>مثال عن التحريك</title>
 
<style>
 div {
   background-color: #bca;
   width: 200px;
   height: 1.1em;
   text-align: center;
   border: 2px solid green;
   margin: 3px;
   font-size: 14px;
 }

 button {
   font-size: 14px;
 } 
</style>

<script src="https://code.jquery.com/jquery-1.10.2.js"></script>

</head>

<body>

<button id="go1">&raquo; حرّك الكتلة الأولى</button>
<button id="go2">&raquo; حرّك الكتلة الثانية</button>
<button id="go3">&raquo; حرّك الكتلتين معًا</button>
<button id="go4">&raquo; إعادة التعيين</button>
<div id="block1">الكتلة الأولى</div>
<div id="block2">الكتلة الثانية</div>
<script>

$( "#go1" ).click(function() {
 $( "#block1" )
   .animate({
     width: "90%"
   }, {
     queue: false,
     duration: 3000
   })
   .animate({ fontSize: "24px" }, 1500 )
   .animate({ borderRightWidth: "15px" }, 1500 );
});

$( "#go2" ).click(function() {
 $( "#block2" )
   .animate({ width: "90%" }, 1000 )
   .animate({ fontSize: "24px" }, 1000 )
   .animate({ borderLeftWidth: "15px" }, 1000 );
});

$( "#go3" ).click(function() {
 $( "#go1" ).add( "#go2" ).click();
});

$( "#go4" ).click(function() {
 $( "div" ).css({
   width: "",
   fontSize: "",
   borderWidth: ""
 });
});

</script>
</body>
</html>

تحريك خاصيّة اليسار left لعنصر <div> الأول ومزامنة عناصر <div> الأخرى، باستخدام دالة step لتعيين خاصيّات اليسار لها في كل مرحلة من التحريك:

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>مثال عن التحريك</title>
 
<style>
 div {
   position: relative;
   background-color: #abc;
   width: 40px;
   height: 40px;
   float: left;
   margin: 5px;
 } 

</style>
 
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>

</head>

<body>

<p><button id="go">تشغيل »</button></p>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>

<script>

$( "#go" ).click(function() {
 $( ".block:first" ).animate({
   left: 100
 }, {
   duration: 1000,
   step: function( now, fx ){
     $( ".block:gt(0)" ).css( "left", now );
   }
 });
});

</script>

</body>

</html>

تحريك جميع الفقرات بتعيين خاصيّة اليسار left إلى القيمة 50 والشفافية opacity إلى القيمة 1 (أي تُصبِح مرئيّة)، واستكمال الحركة خلال 500 ميلي ثانية:

$( "p" ).animate({
 left: 50,
 opacity: 1
}, 500 );

تحريك خاصيّات اليسار left والشفافيّة opacity لكل الفقرات، شغّل الحركة خارج الطابور لكي تبدأ تلقائيًّا بدون انتظار دورها:

$( "p" ).animate({
 left: "50px",
 opacity: 1
}, {
 duration: 500,
 queue: false
});

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

$( "p" ).animate({
 opacity: "show"
}, "slow", "easein" );

تحريك جميع الفقرات بالتبديل بين وضعيتين (toggle) للخاصيّتين height و opacity، واستكمال الحركة خلال 600 ميلي ثانية:

$( "p" ).animate({
 height: "toggle",
 opacity: "toggle"
}, {
 duration: "slow"
});

استخدام دالة حركة سلسة لتزويدنا بتنسيق مختلف للحركة، سيعمل هذا المثال فقط إن كنّا نمتلك إضافة تُزوِّدنا بدالة الحركة السّلسة هذه:

$( "p" ).animate({
 opacity: "show"
}, {
 duration: "slow",
 easing: "easein"
});

تحريك جميع الفقرات وتنفيذ دالة استدعاء عند انتهاء الحركة. الوسيط الأول هو كائن من خاصيّات CSS، يُحدِّد الوسيط الثاني أنّ التحريك سيستغرق 1000 ميلي ثانية لكي يكتمل، ويُحدِّد الوسيط الثالث نوع الحركة السّلسة، والوسيط الرابع هو عبارة عن دالة استدعاء مجهولة (anonymous callback function):

$( "p" ).animate({
 height: 200,
 width: 400,
 opacity: 0.5
}, 1000, "linear", function() {
 alert( "all done" );
});

مصادر