[javascript] 주어진 앵커로 HTML 페이지를 스크롤하는 방법은 무엇입니까?
JavaScript를 사용하여 브라우저가 페이지를 주어진 앵커로 스크롤하도록하고 싶습니다.
내 HTML 코드에서 name
또는 id
속성을 지정했습니다 .
<a name="anchorName">..</a>
또는
<h1 id="anchorName2">..</h1>
로 이동하여 얻을 수있는 것과 동일한 효과를 얻고 싶습니다 http://server.com/path#anchorName
. 앵커가 페이지의 보이는 부분의 상단 근처에 오도록 페이지를 스크롤해야합니다.
답변
function scrollTo(hash) {
location.hash = "#" + hash;
}
전혀 jQuery가 필요하지 않습니다!
답변
더 간단한 방법 :
var element_to_scroll_to = document.getElementById('anchorName2');
// Or:
var element_to_scroll_to = document.querySelectorAll('.my-element-class')[0];
// Or:
var element_to_scroll_to = $('.my-element-class')[0];
// Basically `element_to_scroll_to` just have to be a reference
// to any DOM element present on the page
// Then:
element_to_scroll_to.scrollIntoView();
답변
jQuerys .animate () , .offset () 및을 사용할 수 있습니다 scrollTop
. 처럼
$(document.body).animate({
'scrollTop': $('#anchorName2').offset().top
}, 2000);
링크 예 : http://jsbin.com/unasi3/edit
당신은 애니메이션을 사용하지 않으려면 .scrollTop () 와 같은
$(document.body).scrollTop($('#anchorName2').offset().top);
또는 자바 스크립트 location.hash
처럼
location.hash = '#' + anchorid;
답변
jAndy의 훌륭한 솔루션이지만 부드러운 스크롤은 firefox에서 작동하는 데 문제가있는 것 같습니다.
이 방법으로 작성하면 Firefox에서도 작동합니다.
(function($) {
$(document).ready(function() {
$('html, body').animate({
'scrollTop': $('#anchorName2').offset().top
}, 2000);
});
})(jQuery);
답변
2018-2020 순수 js :
요소로 스크롤하는 매우 편리한 방법이 있습니다.
el.scrollIntoView({
behavior: 'smooth', // smooth scroll
block: 'start' // the upper border of the element will be aligned at the top of the visible part of the window of the scrollable area.
})
그러나 내가 이해하는 한 그는 아래 옵션과 같은 훌륭한 지원을받지 못합니다.
요소가 맨 위에 있어야하는 경우 :
const element = document.querySelector('#element')
const topPos = element.getBoundingClientRect().top + window.pageYOffset
window.scrollTo({
top: topPos, // scroll so that the element is at the top of the view
behavior: 'smooth' // smooth scroll
})
요소를 중앙에 배치하려면 다음을 수행하십시오.
const element = document.querySelector('#element')
const rect = element.getBoundingClientRect() // get rects(width, height, top, etc)
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
window.scroll({
top: rect.top + rect.height / 2 - viewHeight / 2,
behavior: 'smooth' // smooth scroll
});
지원하다:
그들은 그것 scroll
과 같은 방법을 scrollTo
쓰지만, 지원은 더 잘 나타난다 scrollTo
.
답변
JQuery가없는 순수한 자바 스크립트 솔루션. Chrome 및 Ie에서 테스트되었으며 IOS에서는 테스트되지 않았습니다.
function ScrollTo(name) {
ScrollToResolver(document.getElementById(name));
}
function ScrollToResolver(elem) {
var jump = parseInt(elem.getBoundingClientRect().top * .2);
document.body.scrollTop += jump;
document.documentElement.scrollTop += jump;
if (!elem.lastjump || elem.lastjump > Math.abs(jump)) {
elem.lastjump = Math.abs(jump);
setTimeout(function() { ScrollToResolver(elem);}, "100");
} else {
elem.lastjump = null;
}
}
답변
2018 년에는 이와 같은 간단한 것을 위해 jQuery가 필요하지 않습니다. 내장 scrollIntoView()
메소드는 ” behavior
“특성을 지원 하여 페이지의 모든 요소로 부드럽게 스크롤합니다. 브라우저 URL을 해시로 업데이트하여 북마크 할 수 있습니다.
에서 HTML 책갈피를 스크롤에이 튜토리얼 , 여기에 자동으로 페이지의 모든 앵커 링크에 부드러운 스크롤을 추가하는 기본 방법입니다 :
let anchorlinks = document.querySelectorAll('a[href^="#"]')
for (let item of anchorlinks) { // relitere
item.addEventListener('click', (e)=> {
let hashval = item.getAttribute('href')
let target = document.querySelector(hashval)
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
})
history.pushState(null, null, hashval)
e.preventDefault()
})
}