استفاده از History API برای مدیریت URL های خود بسیار جذاب است و همانطور که اتفاق می افتد، یکی از ویژگی های مهم برنامه های وب خوب است. با این حال، یکی از معایب آن این است که موقعیتهای اسکرول ذخیره میشوند و مهمتر از آن، هر زمان که تاریخ را طی کنید، بازیابی میشوند . این اغلب به معنای پرش های ناخوشایند است که موقعیت اسکرول به طور خودکار تغییر می کند، مخصوصاً اگر برنامه شما انتقال را انجام دهد یا محتوای صفحه را به هر نحوی تغییر دهد. در نهایت این منجر به یک تجربه کاربری وحشتناک می شود.
برای بدتر شدن اوضاع، کار بسیار کمی می توانید در مورد آن انجام دهید: Chrome یک رویداد popState
را قبل از رویداد scroll
راه اندازی می کند، به این معنی که می توانید موقعیت فعلی اسکرول را در popState
بخوانید و سپس آن را در کنترل کننده رویداد scroll
با window.scrollTo
(Ewww) معکوس کنید. ، اما حداقل کار می کند!). با این حال، فایرفاکس رویداد scroll
قبل از popState
راهاندازی میکند، بنابراین شما نمیدانید که مقدار اسکرول قدیمی برای بازیابی آن چه بوده است. باه!
با این حال، خبر خوب این است که یک راه حل بالقوه وجود دارد: history.scrollRestoration
. به دو مقدار رشته نیاز دارد: auto
، که همه چیز را همانطور که امروز هست نگه میدارد (و مقدار پیشفرض آن است)، و manual
، که به این معنی است که شما بهعنوان توسعهدهنده مالکیت تغییرات پیمایشی را که ممکن است هنگام عبور کاربر از برنامه مورد نیاز باشد، در اختیار خواهید گرفت. تاریخچه در صورت نیاز، میتوانید موقعیت اسکرول را هنگام فشار دادن ورودیهای history با history.pushState()
پیگیری کنید.
این ویژگی جدید و آزمایشی است (اگرچه کاملاً عالی است)، بنابراین قبل از استفاده از آن مطمئن شوید که در دسترس است:
if ('scrollRestoration' in history) {
// Back off, browser, I got this...
history.scrollRestoration = 'manual';
}
history.scrollRestoration
در Chrome 46 به بعد پیدا خواهید کرد و میتوانید مشخصات آن را در اینجا بیابید .
فراموش نکنید که بازخورد خود را با ما در میان بگذارید و به فروشندگان دیگر اطلاع دهید که آیا میخواهید از scrollRestoration
نیز پشتیبانی کنند.