페이지를 <div>
요소 .
다음 코드를 사용해 보았습니다.
document.getElementById("divFirst").style.visibility = 'visible';
document.getElementById("divFirst").style.display = 'block';
페이지를 <div>
요소 .
다음 코드를 사용해 보았습니다.
document.getElementById("divFirst").style.visibility = 'visible';
document.getElementById("divFirst").style.display = 'block';
답변:
앵커를 사용하여 div에 "포커스"할 수 있습니다. 즉 :
<div id="myDiv"></div>
다음 자바 스크립트를 사용하십시오.
// the next line is required to work around a bug in WebKit (Chrome / Safari)
location.href = "#";
location.href = "#myDiv";
location.href="#";location.href="#myDiv"
. 사용하는 id="myDiv"
것이 선호 name="myDiv"
되고 작동합니다.
scrollIntoView가 잘 작동합니다.
document.getElementById("divFirst").scrollIntoView();
MDN 문서에서 전체 참조 :
https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollIntoView
귀하의 질문과 답변이 다르게 보입니다. 실수인지 모르겠지만 Google에 접속하여 여기에 도달하는 사람들의 경우 내 대답은 다음과 같습니다.
내 답변은 다음과 같이 설명했다.
여기에 간단한 자바 스크립트가 있습니다.
id = "yourSpecificElementId"가있는 요소로 화면을 스크롤해야 할 때 이것을 호출하십시오.
window.scroll(0,findPos(document.getElementById("yourSpecificElementId")));
즉. 위의 질문에 대해, ID가 'divFirst'인 div로 화면을 스크롤하려는 경우
코드는 다음과 같습니다. window.scroll(0,findPos(document.getElementById("divFirst")));
작업 에이 기능이 필요합니다.
//Finds y value of given object
function findPos(obj) {
var curtop = 0;
if (obj.offsetParent) {
do {
curtop += obj.offsetTop;
} while (obj = obj.offsetParent);
return [curtop];
}
}
화면이 특정 요소로 스크롤됩니다.
window
오버플로가 발생하는보기 영역이 아니라 스크롤하려는 경우
[curtop]
에 curtop
말
(window.screen.height/2)
findPos
나는 이것에 대해 조금 보았고 어떻게 든 가장 자연스러운 방법처럼 느껴지는 것을 알아 냈습니다. 물론 이것은 제가 개인적으로 가장 좋아하는 스크롤입니다. :)
const y = element.getBoundingClientRect().top + window.scrollY;
window.scroll({
top: y,
behavior: 'smooth'
});
참고 window.scroll({ ...options })
IE, 에지 및 사파리에서 지원되지 않습니다. 이 경우을 사용하는 것이 가장 좋습니다
element.scrollIntoView()
. (IE 6에서 지원됨). 당신은 대부분 할 수 있습니다부작용없이 옵션을 읽을 (읽지 : 테스트되지 않음).
이것들은 물론 어떤 브라우저가 사용되는지에 따라 동작하는 함수에 싸여있을 수 있습니다.
window.scroll
이 시도:
var divFirst = document.getElementById("divFirst");
divFirst.style.visibility = 'visible';
divFirst.style.display = 'block';
divFirst.tabIndex = "-1";
divFirst.focus();
예 : @ :
element.tabIndex
가 아니라 element.tabindex
; 두 번째는 Firefox에서는 작동하지만 Chrome에서는 작동하지 않습니다 (적어도 얼마 전에 시도했을 때). 물론,하는 HTML 속성을 모두 사용 tabIndex
및 tabindex
작업 (및 XHTML에 tabindex
사용되어야한다)
주어진 요소로 스크롤하려면 아래 에서이 자바 스크립트 전용 솔루션을 만들었습니다.
간단한 사용법 :
EPPZScrollTo.scrollVerticalToElementById('signup_form', 20);
엔진 객체 (필터, fps 값으로 바이올린을 칠 수 있음) :
/**
*
* Created by Borbás Geri on 12/17/13
* Copyright (c) 2013 eppz! development, LLC.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
var EPPZScrollTo =
{
/**
* Helpers.
*/
documentVerticalScrollPosition: function()
{
if (self.pageYOffset) return self.pageYOffset; // Firefox, Chrome, Opera, Safari.
if (document.documentElement && document.documentElement.scrollTop) return document.documentElement.scrollTop; // Internet Explorer 6 (standards mode).
if (document.body.scrollTop) return document.body.scrollTop; // Internet Explorer 6, 7 and 8.
return 0; // None of the above.
},
viewportHeight: function()
{ return (document.compatMode === "CSS1Compat") ? document.documentElement.clientHeight : document.body.clientHeight; },
documentHeight: function()
{ return (document.height !== undefined) ? document.height : document.body.offsetHeight; },
documentMaximumScrollPosition: function()
{ return this.documentHeight() - this.viewportHeight(); },
elementVerticalClientPositionById: function(id)
{
var element = document.getElementById(id);
var rectangle = element.getBoundingClientRect();
return rectangle.top;
},
/**
* Animation tick.
*/
scrollVerticalTickToPosition: function(currentPosition, targetPosition)
{
var filter = 0.2;
var fps = 60;
var difference = parseFloat(targetPosition) - parseFloat(currentPosition);
// Snap, then stop if arrived.
var arrived = (Math.abs(difference) <= 0.5);
if (arrived)
{
// Apply target.
scrollTo(0.0, targetPosition);
return;
}
// Filtered position.
currentPosition = (parseFloat(currentPosition) * (1.0 - filter)) + (parseFloat(targetPosition) * filter);
// Apply target.
scrollTo(0.0, Math.round(currentPosition));
// Schedule next tick.
setTimeout("EPPZScrollTo.scrollVerticalTickToPosition("+currentPosition+", "+targetPosition+")", (1000 / fps));
},
/**
* For public use.
*
* @param id The id of the element to scroll to.
* @param padding Top padding to apply above element.
*/
scrollVerticalToElementById: function(id, padding)
{
var element = document.getElementById(id);
if (element == null)
{
console.warn('Cannot find element with id \''+id+'\'.');
return;
}
var targetPosition = this.documentVerticalScrollPosition() + this.elementVerticalClientPositionById(id) - padding;
var currentPosition = this.documentVerticalScrollPosition();
// Clamp.
var maximumScrollPosition = this.documentMaximumScrollPosition();
if (targetPosition > maximumScrollPosition) targetPosition = maximumScrollPosition;
// Start animation.
this.scrollVerticalTickToPosition(currentPosition, targetPosition);
}
};
다음은 고정 헤더에 대한 선택적 오프셋을 포함 할 수있는 기능입니다. 외부 라이브러리가 필요하지 않습니다.
function scrollIntoView(selector, offset = 0) {
window.scroll(0, document.querySelector(selector).offsetTop - offset);
}
JQuery를 사용하여 요소의 높이를 잡고 스크롤 할 수 있습니다.
var headerHeight = $('.navbar-fixed-top').height();
scrollIntoView('#some-element', headerHeight)
2018 년 3 월 업데이트
JQuery를 사용하지 않고이 답변으로 스크롤하십시오.
scrollIntoView('#answer-44786637', document.querySelector('.top-bar').offsetHeight)
요소에 초점을 맞출 수 있습니다. 보다 잘 작동합니다scrollIntoView
node.setAttribute('tabindex', '-1')
node.focus()
node.removeAttribute('tabindex')
애니메이션 효과에서도 작동하는 가장 짧은 답변 :
var scrollDiv = document.getElementById("myDiv").offsetTop;
window.scrollTo({ top: scrollDiv, behavior: 'smooth'});
고정 탐색 막대가있는 경우 상단 값에서 높이를 빼면 고정 막대 높이가 70px 인 경우 2 행은 다음과 같습니다.
window.scrollTo({ top: scrollDiv-70, behavior: 'smooth'});
설명 :
1 행은 요소 위치를 가져옵니다. 2 행은 요소 위치로 스크롤합니다. behavior
속성은 부드러운 애니메이션 효과를 추가합니다
div에 tabindex를 추가하면 포커스를 얻을 수 있다고 생각합니다.
<div class="divFirst" tabindex="-1">
</div>
나는 그것이 유효하다고 생각하지 않습니다 .tabindex는 a, area, button, input, object, select 및 textarea에만 적용될 수 있습니다. 그러나 시도해보십시오.
tabindex
에서 "핵심 속성"은 "글로벌 속성"(HTML 언어의 모든 요소에 공통적 인 속성)입니다. 참조 : w3.org/TR/2011/WD-html-markup-20110113/global-attributes.html
div에 집중할 수 없습니다. 해당 div의 입력 요소에만 집중할 수 있습니다. 또한 display () 대신 element.focus ()를 사용해야합니다.
<div>
사용하면 초점을 맞출 수 있습니다 tabindex
. 참조 dev.w3.org/html5/spec-author-view/editing.html#attr-tabindex
많이 둘러 본 후 이것이 마침내 나를 위해 일한 것입니다.
스크롤 막대가있는 DOM에서 div를 찾으십시오. 나를 위해, 그것은 다음과 같이 보였다 : "div class ="table_body table_body_div "scroll_top ="0 "scroll_left ="0 "style ="width : 1263px; 높이 : 499px; "
이 xpath와 함께 찾았습니다 : // div [@ class = 'table_body table_body_div']
JavaScript를 사용하여 다음과 같이 스크롤을 실행합니다. (JavascriptExecutor) driver) .executeScript ( "arguments [0] .scrollLeft = arguments [1];", element, 2000);
2000은 오른쪽으로 스크롤하려는 픽셀 수입니다. div를 아래로 스크롤하려면 scrollLeft 대신 scrollTop을 사용하십시오.
참고 : scrollIntoView를 사용해 보았지만 웹 페이지에 여러 div가 있으므로 제대로 작동하지 않았습니다. 포커스가있는 주 창이 하나만 있으면 작동합니다. 이것은 내가 원하지 않는 jQuery를 사용하지 않으려는 경우에 만난 최고의 솔루션입니다.
컨테이너를 내용으로 스크롤하는 데 자주 사용하는 방법.
/**
@param {HTMLElement} container : element scrolled.
@param {HTMLElement} target : element where to scroll.
@param {number} [offset] : scroll back by offset
*/
var scrollAt=function(container,target,offset){
if(container.contains(target)){
var ofs=[0,0];
var tmp=target;
while (tmp!==container) {
ofs[0]+=tmp.offsetWidth;
ofs[1]+=tmp.offsetHeight;
tmp=tmp.parentNode;
}
container.scrollTop = Math.max(0,ofs[1]-(typeof(offset)==='number'?offset:0));
}else{
throw('scrollAt Error: target not found in container');
}
};
Whish가 전역 적으로 재정의되는 경우 다음을 수행 할 수도 있습니다.
HTMLElement.prototype.scrollAt=function(target,offset){
if(this.contains(target)){
var ofs=[0,0];
var tmp=target;
while (tmp!==this) {
ofs[0]+=tmp.offsetWidth;
ofs[1]+=tmp.offsetHeight;
tmp=tmp.parentNode;
}
container.scrollTop = Math.max(0,ofs[1]-(typeof(offset)==='number'?offset:0));
}else{
throw('scrollAt Error: target not found in container');
}
};
Safari, Safari ios, Explorer에서는 "부드러운"동작이 작동하지 않습니다. 나는 보통 requestAnimationFrame을 사용하여 간단한 함수를 작성합니다.
(function(){
var start;
var startPos = 0;
//Navigation scroll page to element
function scrollTo(timestamp, targetTop){
if(!start) start = timestamp
var runtime = timestamp - start
var progress = Math.min(runtime / 700, 1)
window.scroll(0, startPos + (targetTop * progress) )
if(progress >= 1){
return;
}else {
requestAnimationFrame(function(timestamp){
scrollTo(timestamp, targetTop)
})
}
};
navElement.addEventListener('click', function(e){
var target = e.target //or this
var targetTop = _(target).getBoundingClientRect().top
startPos = window.scrollY
requestAnimationFrame(function(timestamp){
scrollTo(timestamp, targetTop)
})
}
})();
이 기능을 사용해보십시오
function navigate(divId) {
$j('html, body').animate({ scrollTop: $j("#"+divId).offset().top }, 1500);
}
div id를 매개 변수로 전달하면 이미 사용하고 있습니다.
$j
에서 왔습니까?
visibility
및display
요소 (투입)을 표시하기 위해 사용된다. 화면에서 div를 스크롤 하시겠습니까?