Чи scrollIntoView()
працює у всіх браузерах? Якщо ні, то чи є jQuery
альтернатива?
Відповіді:
Як зазначав @ 9bits, це вже давно підтримується усіма основними браузерами . Щоб про це не турбуватися. Основна проблема полягає в тому, як це працює. Він просто переходить до певного елемента, який також може бути в кінці сторінки. Перескакуючи до нього, користувачі не уявляють, чи:
Перші два можна визначити за позицією прокрутки, але хто каже, що користувачі відстежували позицію прокрутки до того, як був зроблений стрибок? Отже, це недетермінована дія.
Останнє може бути вірним, особливо якщо сторінка має рухомий заголовок, який прокручується з поля зору, а дизайн сторінки, що залишився, нічого не означає на знаходженні на одній сторінці (якщо вона також не має жодного вертикального елемента загальної висоти, як ліве меню бар). Ви були б здивовані, як багато сторінок мають цю проблему. просто перевірте їх самі. Перейдіть на якусь сторінку, подивіться на неї вгорі, потім натисніть Endклавішу і подивіться на неї ще раз. Швидше за все, ви подумаєте, що це інша сторінка.
scrollintoview
На допомогу анімований плагін jQueryОсь чому все ще існують плагіни, які виконують прокрутку до перегляду замість використання власної функції DOM. Зазвичай вони анімують прокрутку, що усуває всі 3 вищезазначені проблеми. Користувачі можуть легко відстежувати рух.
ScrollIntoViewOptions
дозволяє вказати behavior: 'smooth'
. на жаль, неможливо легко визначити, чи підтримується ця опція у браузері ...
behavior: "smooth"
, але не Chrome або Safari.
Схоже, це так: http://www.quirksmode.org/dom/w3c_cssom.html
Я використовую iScroll-4 Маттео Спінеллі, і він також працює в сафарі iOS. Він має три методи scrollTo, scrollToElement і scrollToPage. Скажімо, у вас є невпорядкований список елементів, загорнутий у div. Як писав Роберт Коритник вище, вам потрібно мати ту легку анімацію, щоб показати, що ви прокрутили. Наведений нижче метод досягає цього ефекту.
scrollToElement(element, time);
Я ще не пробував цього, але, схоже, підсилення вбудованої функції scrollIntoView дозволить заощадити багато коду. Ось що я б зробив, якщо ви хочете анімовані дії: