الفرق بين المراجعتين لصفحة: «ReactNative/animatedvaluexy»
أنشأ الصفحة ب'== المتغيّر Animated.ValueXY == هو قيمة ثنائية الأبعاد 2D لتوجيه التأثيرات الحركية ثنائية الأبعاد، مثل...' |
جميل-بيلوني (نقاش | مساهمات) طلا ملخص تعديل |
||
(3 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:المتغير Animated.ValueXY في React Native}}</noinclude> | |||
هو قيمة ثنائية الأبعاد 2D لتوجيه التأثيرات الحركية ثنائية الأبعاد، مثل الإيماءات | هو قيمة ثنائية الأبعاد 2D لتوجيه التأثيرات الحركية ثنائية الأبعاد، مثل الإيماءات الشاملة pan gestures، وهو واجهة API متطابقة تقريبًا مع المتغيّر <code>[[ReactNative/animatedvalue|Animated.Value]]</code> العادي، ولكنها مضاعَفة. يحتوي هذا المتغير على متغيري <code>Animated.Value</code> نمطيتين ضمنيًا. | ||
== مثال توضيحي == | |||
<syntaxhighlight lang="javascript"> | إليك المثال التالي ([https://snack.expo.dev/@hsoubwiki/animated.valuexy تجربة حية]):<syntaxhighlight lang="javascript"> | ||
import React, { useRef } from "react"; | import React, { useRef } from "react"; | ||
import { Animated, PanResponder, StyleSheet, View } from "react-native"; | import { Animated, PanResponder, StyleSheet, View } from "react-native"; | ||
سطر 21: | سطر 21: | ||
onPanResponderRelease: () => { | onPanResponderRelease: () => { | ||
Animated.spring( | Animated.spring( | ||
pan, // | pan, // مُضاعَف نلقائيًا | ||
{ toValue: { x: 0, y: 0 } } // | { toValue: { x: 0, y: 0 } } // العودة إلى الصفر | ||
).start(); | ).start(); | ||
}, | }, | ||
سطر 54: | سطر 54: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== التوابع == | |||
===<code>setValue()</code>=== | |||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
setValue(value); | setValue(value); | ||
</syntaxhighlight>يضبط هذا التابع القيمة مباشرة، فهذا سيؤدي إلى إيقاف أي تأثيرات حركية تعمل على هذه القيمة وتحديث جميع الخصائص المرتبطة بها. | </syntaxhighlight>يضبط هذا التابع القيمة مباشرة، فهذا سيؤدي إلى إيقاف أي تأثيرات حركية تعمل على هذه القيمة وتحديث جميع الخصائص المرتبطة بها. | ||
المعاملات Parameters: | '''المعاملات Parameters''': | ||
{| class="wikitable" | {| class="wikitable" | ||
!الاسم | !الاسم | ||
سطر 69: | سطر 69: | ||
|- | |- | ||
|value | |value | ||
|number | |عدد number | ||
|نعم | |نعم | ||
|Value | |قيمة Value | ||
|} | |} | ||
===<code>setOffset()</code>=== | |||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
setOffset(offset); | setOffset(offset); | ||
</syntaxhighlight>يضبط هذا التابع الإزاحة المُطبَّقة على أية قيمة مضبوطة، سواء عبر التابع <code>setValue</code> أو التحريك أو | </syntaxhighlight>يضبط هذا التابع الإزاحة المُطبَّقة على أية قيمة مضبوطة، سواء عبر التابع <code>setValue</code> أو عبر التحريك أو عبر <code>Animated.event</code>، وهو مفيد لتعويض أشياء كبدء إيماءة شاملة pan gesture. | ||
المعاملات: | '''المعاملات''': | ||
{| class="wikitable" | {| class="wikitable" | ||
!الاسم | !الاسم | ||
سطر 87: | سطر 87: | ||
|- | |- | ||
|offset | |offset | ||
|number | |عدد number | ||
|نعم | |نعم | ||
|قيمة إزاحة | |قيمة إزاحة | ||
|} | |} | ||
===<code>flattenOffset()</code>=== | |||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
flattenOffset(); | flattenOffset(); | ||
</syntaxhighlight>يدمج هذا التابع قيمة الإزاحة مع القيمة الأساسية ويعيد ضبط الإزاحة إلى الصفر، أي لم يتغير خرج القيمة النهائي. | </syntaxhighlight>يدمج هذا التابع قيمة الإزاحة مع القيمة الأساسية ويعيد ضبط الإزاحة إلى الصفر، أي لم يتغير خرج القيمة النهائي. | ||
===<code>extractOffset()</code>=== | |||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
extractOffset(); | extractOffset(); | ||
</syntaxhighlight>يضبط قيمة الإزاحة على القيمة الأساسية، ويعيد ضبط القيمة الأساسية إلى الصفر، أي لم يتغير خرج القيمة النهائي. | </syntaxhighlight>يضبط هذا التابع قيمة الإزاحة على القيمة الأساسية، ويعيد ضبط القيمة الأساسية إلى الصفر، أي لم يتغير خرج القيمة النهائي. | ||
===<code>addListener()</code>=== | |||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
addListener(callback); | addListener(callback); | ||
</syntaxhighlight>يضيف هذا التابع مستمعًا غير متزامن إلى القيمة لتتمكّن من مراقبة | </syntaxhighlight>يضيف هذا التابع مستمعًا غير متزامن إلى القيمة لتتمكّن من مراقبة تحديثات التأثيرات الحركية، وهذا مفيد لأنه لا توجد طريقة لقراءة القيمة بصورة متزامنة لأنها قد تكون موجَّهة بطريقة أصيلة. يعيد هذا التابع سلسلة نية تعمل كمعرّف للمستمع. | ||
'''المعاملات''': | '''المعاملات''': | ||
سطر 117: | سطر 117: | ||
|دالة function | |دالة function | ||
|نعم | |نعم | ||
| | |دالة رد نداء callback التي ستتلقى كائنًا له مفتاح <code>value</code> مضبوط على القيمة الجديدة. | ||
|} | |} | ||
===<code>removeListener()</code>=== | |||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
removeListener(id); | removeListener(id); | ||
</syntaxhighlight>يلغي هذا التابع تسجيل مستمع. يجب أن يتطابق المعامل <code>id</code> مع المعرّف الذي أعاده | </syntaxhighlight>يلغي هذا التابع تسجيل مستمع. يجب أن يتطابق المعامل <code>id</code> مع المعرّف الذي أعاده التابع <code>addListener()</code> مسبقًا. | ||
المعاملات: | '''المعاملات''': | ||
{| class="wikitable" | {| class="wikitable" | ||
!الاسم | !الاسم | ||
سطر 133: | سطر 133: | ||
|- | |- | ||
|id | |id | ||
|سلسلة string | |سلسلة نصية string | ||
|نعم | |نعم | ||
| | |معرّف Id المستمع المحذوف. | ||
|} | |} | ||
===<code>removeAllListeners()</code>=== | |||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
removeAllListeners(); | removeAllListeners(); | ||
</syntaxhighlight> | </syntaxhighlight>يحذف هذا التابع جميع المستمعين المسجّلين. | ||
===<code>stopAnimation()</code>=== | |||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
stopAnimation([callback]); | stopAnimation([callback]); | ||
</syntaxhighlight>يوقف أي تأثيرات حركية أو تتبّع قيد التشغيل. تُستدعى الدالة <code>callback</code> مع القيمة النهائية بعد إيقاف التأثير الحركي، وهذا أمر مفيد لتحديث الحالة لمطابقة التحريك مع التخطيط. | </syntaxhighlight>يوقف هذا التابع أي تأثيرات حركية أو تتبّع قيد التشغيل. تُستدعى الدالة <code>callback</code> مع القيمة النهائية بعد إيقاف التأثير الحركي، وهذا أمر مفيد لتحديث الحالة لمطابقة مكان التحريك مع التخطيط. | ||
المعاملات: | '''المعاملات''': | ||
{| class="wikitable" | {| class="wikitable" | ||
!الاسم | !الاسم | ||
سطر 161: | سطر 161: | ||
|} | |} | ||
===<code>resetAnimation()</code>=== | |||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
resetAnimation([callback]); | resetAnimation([callback]); | ||
</syntaxhighlight>يوقف هذا التابع أي تأثير حركي ويعيد ضبط القيمة إلى | </syntaxhighlight>يوقف هذا التابع أي تأثير حركي ويعيد ضبط القيمة إلى أصلها. | ||
'''المعاملات''': | '''المعاملات''': | ||
سطر 179: | سطر 179: | ||
|} | |} | ||
===<code>getLayout()</code>=== | |||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
getLayout(); | getLayout(); | ||
سطر 186: | سطر 186: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===<code>getTranslateTransform()</code>=== | |||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
getTranslateTransform(); | getTranslateTransform(); | ||
سطر 198: | سطر 198: | ||
* [https://reactnative.dev/docs/animatedvaluexy صفحة Animated.ValueXY في توثيق React Native الرسمي.] | * [https://reactnative.dev/docs/animatedvaluexy صفحة Animated.ValueXY في توثيق React Native الرسمي.] | ||
[[تصنيف:ReactNative]] | |||
[[تصنيف:React Native API]] |
المراجعة الحالية بتاريخ 14:12، 9 أكتوبر 2021
هو قيمة ثنائية الأبعاد 2D لتوجيه التأثيرات الحركية ثنائية الأبعاد، مثل الإيماءات الشاملة pan gestures، وهو واجهة API متطابقة تقريبًا مع المتغيّر Animated.Value
العادي، ولكنها مضاعَفة. يحتوي هذا المتغير على متغيري Animated.Value
نمطيتين ضمنيًا.
مثال توضيحي
إليك المثال التالي (تجربة حية):
import React, { useRef } from "react";
import { Animated, PanResponder, StyleSheet, View } from "react-native";
const DraggableView = () => {
const pan = useRef(new Animated.ValueXY()).current;
const panResponder = PanResponder.create({
onStartShouldSetPanResponder: () => true,
onPanResponderMove: Animated.event([
null,
{
dx: pan.x, // x,y are Animated.Value
dy: pan.y,
},
]),
onPanResponderRelease: () => {
Animated.spring(
pan, // مُضاعَف نلقائيًا
{ toValue: { x: 0, y: 0 } } // العودة إلى الصفر
).start();
},
});
return (
<View style={styles.container}>
<Animated.View
{...panResponder.panHandlers}
style={[pan.getLayout(), styles.box]}
/>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignItems: "center",
},
box: {
backgroundColor: "#61dafb",
width: 80,
height: 80,
borderRadius: 4,
},
});
export default DraggableView;
التوابع
setValue()
setValue(value);
يضبط هذا التابع القيمة مباشرة، فهذا سيؤدي إلى إيقاف أي تأثيرات حركية تعمل على هذه القيمة وتحديث جميع الخصائص المرتبطة بها.
المعاملات Parameters:
الاسم | النوع | مطلوب | الوصف |
---|---|---|---|
value | عدد number | نعم | قيمة Value |
setOffset()
setOffset(offset);
يضبط هذا التابع الإزاحة المُطبَّقة على أية قيمة مضبوطة، سواء عبر التابع setValue
أو عبر التحريك أو عبر Animated.event
، وهو مفيد لتعويض أشياء كبدء إيماءة شاملة pan gesture.
المعاملات:
الاسم | النوع | مطلوب | الوصف |
---|---|---|---|
offset | عدد number | نعم | قيمة إزاحة |
flattenOffset()
flattenOffset();
يدمج هذا التابع قيمة الإزاحة مع القيمة الأساسية ويعيد ضبط الإزاحة إلى الصفر، أي لم يتغير خرج القيمة النهائي.
extractOffset()
extractOffset();
يضبط هذا التابع قيمة الإزاحة على القيمة الأساسية، ويعيد ضبط القيمة الأساسية إلى الصفر، أي لم يتغير خرج القيمة النهائي.
addListener()
addListener(callback);
يضيف هذا التابع مستمعًا غير متزامن إلى القيمة لتتمكّن من مراقبة تحديثات التأثيرات الحركية، وهذا مفيد لأنه لا توجد طريقة لقراءة القيمة بصورة متزامنة لأنها قد تكون موجَّهة بطريقة أصيلة. يعيد هذا التابع سلسلة نية تعمل كمعرّف للمستمع.
المعاملات:
الاسم | النوع | مطلوب | الوصف |
---|---|---|---|
callback | دالة function | نعم | دالة رد نداء callback التي ستتلقى كائنًا له مفتاح value مضبوط على القيمة الجديدة.
|
removeListener()
removeListener(id);
يلغي هذا التابع تسجيل مستمع. يجب أن يتطابق المعامل id
مع المعرّف الذي أعاده التابع addListener()
مسبقًا.
المعاملات:
الاسم | النوع | مطلوب | الوصف |
---|---|---|---|
id | سلسلة نصية string | نعم | معرّف Id المستمع المحذوف. |
removeAllListeners()
removeAllListeners();
يحذف هذا التابع جميع المستمعين المسجّلين.
stopAnimation()
stopAnimation([callback]);
يوقف هذا التابع أي تأثيرات حركية أو تتبّع قيد التشغيل. تُستدعى الدالة callback
مع القيمة النهائية بعد إيقاف التأثير الحركي، وهذا أمر مفيد لتحديث الحالة لمطابقة مكان التحريك مع التخطيط.
المعاملات:
الاسم | النوع | مطلوب | الوصف |
---|---|---|---|
callback | دالة function | لا | دالة ستتلقى القيمة النهائية. |
resetAnimation()
resetAnimation([callback]);
يوقف هذا التابع أي تأثير حركي ويعيد ضبط القيمة إلى أصلها.
المعاملات:
الاسم | النوع | مطلوب | الوصف |
---|---|---|---|
callback | دالة function | لا | دالة ستتلقى القيمة الأصلية. |
getLayout()
getLayout();
يحوّل هذا التابع {x, y}
إلى {left, top}
لاستخدامه في نمط style كما يلي:
style={this.state.anim.getLayout()}
getTranslateTransform()
getTranslateTransform();
يحوّل هذا التابع {x, y}
إلى تحوّل ترجمة قابل للاستخدام كما يلي:
style={{
transform: this.state.anim.getTranslateTransform()
}}