History API - استعادة التمرير
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
يعد استخدام History API لإدارة عناوين URL ميزة رائعة، كما أنّها ميزة أساسية في تطبيقات الويب الجيدة. مع ذلك، من الجوانب السلبية لهذا الخيار أنّه يتم تخزين مواضع التمرير، والأهم من ذلك، استعادتها كلما اجتازت السجلّ. يعني هذا غالبًا قفزات سيئة مع تغير موضع التمرير تلقائيًا، خاصةً إذا كان تطبيقك ينتقل أو يغير محتوى الصفحة بأي شكل من الأشكال. يؤدي هذا في النهاية إلى تجربة سيئة للمستخدم.
ولزيادة الأمر سوءًا، ليس هناك الكثير من الإجراءات التي يمكنك اتّخاذها: يبدأ Chrome حدث popState
قبل الحدث scroll
، ما يعني أنّه يمكنك قراءة موضع الانتقال الحالي في popState
ثم عكسه في معالج الأحداث scroll
باستخدام window.scrollTo
(Ewww، ولكن على الأقل سينجح). في المقابل، يشغّل Firefox حدث scroll
قبل popState
، وبالتالي لا تكون لديك أي فكرة عن قيمة التمرير القديمة لاستعادتها. باه!
لكن الخبر السار هو أن هناك إصلاحًا محتملاً: history.scrollRestoration
. وتتطلّب هذه القيم قيمتَين للسلسلة، هما: auto
التي تحتفظ بكل البيانات كما هي في الوقت الحالي (وهي قيمتها التلقائية)، وmanual
، ما يعني أنّك باعتبارك المطوّر، ستتحمّل أنت، بصفتك المطوّر، أي تغييرات قد تكون مطلوبة عندما يجتاز المستخدم سجلّ التطبيق. يمكنك تتبُّع موضع الانتقال للأعلى أو للأسفل أثناء إرسال إدخالات السجلّ باستخدام "history.pushState()
"، إذا أردت ذلك.
الميزة جديدة وتجريبية (على الرغم من أنها رائعة تمامًا)، لذا تأكد من توفرها قبل استخدامها:
if ('scrollRestoration' in history) {
// Back off, browser, I got this...
history.scrollRestoration = 'manual';
}
ستظهر لك history.scrollRestoration
في الإصدار Chrome 46 والإصدارات الأحدث، ويمكنك الاطّلاع على مواصفاته هنا.
يُرجى إرسال ملاحظاتك وإعلام المورّدين الآخرين بما إذا كنت تريد منهم أيضًا تقديم الدعم لتطبيق scrollRestoration
.
إنّ محتوى هذه الصفحة مرخّص بموجب ترخيص Creative Commons Attribution 4.0 ما لم يُنصّ على خلاف ذلك، ونماذج الرموز مرخّصة بموجب ترخيص Apache 2.0. للاطّلاع على التفاصيل، يُرجى مراجعة سياسات موقع Google Developers. إنّ Java هي علامة تجارية مسجَّلة لشركة Oracle و/أو شركائها التابعين.
تاريخ التعديل الأخير: 2015-09-01 (حسب التوقيت العالمي المتفَّق عليه)
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"لا يحتوي على المعلومات التي أحتاج إليها."
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"الخطوات معقدة للغاية / كثيرة جدًا."
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"المحتوى قديم."
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"ثمة مشكلة في الترجمة."
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"مشكلة في العيّنات / التعليمات البرمجية"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"غير ذلك"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"يسهُل فهم المحتوى."
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"ساعَدني المحتوى في حلّ مشكلتي."
},{
"type": "thumb-up",
"id": "otherUp",
"label":"غير ذلك"
}]
{"lastModified": "\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0623\u062e\u064a\u0631: 2015-09-01 (\u062d\u0633\u0628 \u0627\u0644\u062a\u0648\u0642\u064a\u062a \u0627\u0644\u0639\u0627\u0644\u0645\u064a \u0627\u0644\u0645\u062a\u0641\u0651\u064e\u0642 \u0639\u0644\u064a\u0647)"}
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2015-09-01 (حسب التوقيت العالمي المتفَّق عليه)"],[],[]]