scrollIntoView는 모든 브라우저에서 작동합니까?


답변:


81

예, 지원되지만 사용자 경험은 ... 나쁩니다.

@ 9bits가 지적했듯이 이것은 모든 주요 브라우저에서 오랫동안 지원되어 왔습니다 . 그것에 대해 걱정하지 마십시오. 주요 문제는 작동 방식입니다. 단순히 페이지의 끝에있을 수있는 특정 요소로 이동합니다. 여기로 이동하면 사용자는 다음 사항을 알 수 없습니다.

  • 페이지가 위로 스크롤되었습니다
  • 페이지가 아래로 스크롤되었습니다
  • 그들은 다른 곳으로 리디렉션되었습니다

처음 두 개는 스크롤 위치로 결정할 수 있지만 점프가 완료되기 전에 사용자가 스크롤 위치를 추적했다고 누가 말했습니까? 그래서 그것은 비 결정적 행동입니다.

마지막 한 페이지가있다 특히 해당 할 수 있습니다 이동 보기 밖으로 스크롤됩니다 헤더 및 페이지 디자인을 남아 그것은 또한 왼쪽 메뉴 같은 어떤 전체 높이의 수직 요소가없는 경우 (같은 페이지에있는 아무 것도 의미하지 않는다 바). 얼마나 많은 페이지에이 문제가 있는지 놀랄 것입니다. 직접 확인해보세요. 일부 페이지로 이동하여 상단을 본 다음 End키 를 누르고 다시보십시오. 다른 페이지라고 생각할 가능성이 높습니다.

scrollintoview구조에 애니메이션 jQuery 플러그인

그렇기 때문에 네이티브 DOM 기능을 사용하는 대신 스크롤을 수행 하는 플러그인 이 여전히 있습니다 . 일반적으로 스크롤링을 애니메이션화하여 위에서 설명한 3 가지 문제를 모두 제거합니다. 사용자는 움직임을 쉽게 추적 할 수 있습니다.


1
참고 : 스크롤 된 요소가 iframe에있는 경우 (분명한 이유로) jQuery 플러그인이 작동하지 않습니다 (오른쪽). element.scrollIntoView는 그래도 작동합니다.
panzi

7
와 새로운 스펙 ScrollIntoViewOptions을 지정할 수 있습니다 behavior: 'smooth'. 불행하게도이 옵션은 ... 브라우저에서 지원되는 경우 쉽게 감지 할 수있는 방법은 없습니다
비행 양

6
Firefox는를 지원하는 것 같지만 behavior: "smooth"Chrome 또는 Safari는 지원 하지 않습니다.
Flimm

1
화살표 키가 위 / 아래를 제어하고 메뉴가 스크롤하는 선택된 항목에 따라 사용자 정의 드롭 다운 메뉴를 만드는 것과 같은 작업에 유용합니다. 이 경우 항목간에 즉시 점프하지 않는 것은 나쁜 사용자 경험입니다.
user2867288

1
IE / Edge에서는 @Flimm이 아닙니다. 참조 참조 , FF36 +에만이 기능이 있습니다. 따라서 불행히도 쓸모가 없습니다.
Alex Zhukovskiy


3

Matteo Spinnelli의 iScroll-4를 사용 하며 iOS 사파리에서도 작동합니다. scrollTo, scrollToElement 및 scrollToPage의 세 가지 메소드가 있습니다. div 내부에 정렬되지 않은 요소 목록이 있다고 가정 해 보겠습니다. Robert Koritnik이 위에서 작성했듯이 스크롤했음을 보여주는 약간의 애니메이션이 필요합니다. 아래 방법은 그 효과를 얻습니다.

scrollToElement(element, time); 

2
iScroll-4로 링크가 죽었
로맹 빈센트

1

이것을 시도하지 않았지만, 내장 된 scrollIntoView 함수에 편승하면 많은 코드를 절약 할 수있는 것 같습니다. 애니메이션 액션을 원한다면 다음과 같이하겠습니다.

  1. 컨테이너의 현재 스크롤 위치를 START POSITION으로 캐시합니다.
  2. scrollIntoView 내장 실행
  3. 스크롤 위치를 END POSITION으로 다시 캐시합니다.
  4. 컨테이너를 START POSITION으로 되돌립니다.
  5. END POSITION까지 스크롤 애니메이션

1

scrollIntoViewIfNeeded에 대해 읽어주세요

if(el.scrollIntoViewIfNeeded){
el.scrollIntoViewIfNeeded()
}else{
el.scrollIntoView()
}

0

jQuery 대안을 사용 <html>하고 애니메이션 및 <body>요소를 사용할 수 있습니다 .

$('html, body').animate({
  scrollTop: $("#myElem").offset().top
}, 1000);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.