Чи працює scrollIntoView у всіх браузерах?


Відповіді:


82

Це підтримується так, але досвід користувача ... поганий.

Як зазначав @ 9bits, це вже давно підтримується усіма основними браузерами . Щоб про це не турбуватися. Основна проблема полягає в тому, як це працює. Він просто переходить до певного елемента, який також може бути в кінці сторінки. Перескакуючи до нього, користувачі не уявляють, чи:

  • сторінка прокручена вгору
  • сторінку прокручено вниз
  • вони були перенаправлені в інше місце

Перші два можна визначити за позицією прокрутки, але хто каже, що користувачі відстежували позицію прокрутки до того, як був зроблений стрибок? Отже, це недетермінована дія.

Останнє може бути вірним, особливо якщо сторінка має рухомий заголовок, який прокручується з поля зору, а дизайн сторінки, що залишився, нічого не означає на знаходженні на одній сторінці (якщо вона також не має жодного вертикального елемента загальної висоти, як ліве меню бар). Ви були б здивовані, як багато сторінок мають цю проблему. просто перевірте їх самі. Перейдіть на якусь сторінку, подивіться на неї вгорі, потім натисніть Endклавішу і подивіться на неї ще раз. Швидше за все, ви подумаєте, що це інша сторінка.

scrollintoviewНа допомогу анімований плагін jQuery

Ось чому все ще існують плагіни, які виконують прокрутку до перегляду замість використання власної функції DOM. Зазвичай вони анімують прокрутку, що усуває всі 3 вищезазначені проблеми. Користувачі можуть легко відстежувати рух.


1
Примітка: Плагін jQuery не працює (праворуч), якщо прокручуваний елемент знаходиться у iframe (зі зрозумілих причин). element.scrollIntoView працює навіть тоді.
panzi

7
нова специфікація з ScrollIntoViewOptionsдозволяє вказати behavior: 'smooth'. на жаль, неможливо легко визначити, чи підтримується ця опція у браузері ...
літаюча вівця

6
Здається, Firefox підтримує behavior: "smooth", але не Chrome або Safari.
Флімм

1
Це корисно для таких речей, як створення власного випадаючого меню, де клавіші зі стрілками керують вгору / вниз і залежно від обраного пункту меню прокручується. Це було б поганим досвідом для користувача, якщо його миттєво не перескакувати між елементами в такому випадку.
користувач2867288

1
@Flimm ні в IE / Edge. Дивіться посилання , лише FF36 + має цю функцію. Таким чином, це марно, неприємно.
Олексій Жуковський,


3

Я використовую iScroll-4 Маттео Спінеллі, і він також працює в сафарі iOS. Він має три методи scrollTo, scrollToElement і scrollToPage. Скажімо, у вас є невпорядкований список елементів, загорнутий у div. Як писав Роберт Коритник вище, вам потрібно мати ту легку анімацію, щоб показати, що ви прокрутили. Наведений нижче метод досягає цього ефекту.

scrollToElement(element, time); 

2
ваше посилання на iScroll-4 мертве
Ромен Вінсент

2

Ви можете використовувати jQuery alternative та animate <html>та <body>елементи:

$('html, body').animate({
  scrollTop: $("#myElem").offset().top
}, 1000);

1

Я ще не пробував цього, але, схоже, підсилення вбудованої функції scrollIntoView дозволить заощадити багато коду. Ось що я б зробив, якщо ви хочете анімовані дії:

  1. Кешувати поточну позицію прокрутки контейнера як ПОЧАТКОВУ ПОЗИЦІЮ
  2. запустити вбудований в scrollIntoView
  3. Знову зафіксуйте позицію прокрутки як ЗАКЛЮЧЕННЯ
  4. Поверніть контейнер назад у ПОЧАТОК ПОЛОЖЕННЯ
  5. Анімація прокрутки до КОНЕЦЬ ПОЗИЦІЇ

1

прочитайте, будь ласка, про scrollIntoViewIfNeeded

if(el.scrollIntoViewIfNeeded){
el.scrollIntoViewIfNeeded()
}else{
el.scrollIntoView()
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.