그래서 JavaScript on scroll
를 사용하여 함수를 호출하려고합니다. 하지만 jQuery를 사용하지 않고 스크롤 방향을 감지 할 수 있는지 알고 싶었습니다. 그렇지 않은 경우 해결 방법이 있습니까?
나는 단지 ‘위로’버튼을 넣는 것을 생각하고 있었지만 가능하다면 그것을 피하고 싶습니다.
이제이 코드를 사용해 보았지만 작동하지 않았습니다.
if document.body.scrollTop <= 0 {
alert ("scrolling down")
} else {
alert ("scrolling up")
}
답변
이전 scrollTop
값 을 저장 하고 현재 scrollTop 값과 비교하여 감지 할 수 있습니다 .
자바 스크립트 :
var lastScrollTop = 0;
// element should be replaced with the actual target element on which you have applied scroll, use window in case of no target element.
element.addEventListener("scroll", function(){ // or window.addEventListener("scroll"....
var st = window.pageYOffset || document.documentElement.scrollTop; // Credits: "https://github.com/qeremy/so/blob/master/so.dom.js#L426"
if (st > lastScrollTop){
// downscroll code
} else {
// upscroll code
}
lastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling
}, false);
답변
모든 스크롤 이벤트를 잡는 간단한 방법 (터치 및 휠)
window.onscroll = function(e) {
// print "false" if direction is down and "true" if up
console.log(this.oldScroll > this.scrollY);
this.oldScroll = this.scrollY;
}
답변
스크롤 방향을 찾는 데 사용합니다. 세로 스크롤의 방향을 찾기위한 것입니다. 모든 크로스 브라우저를 지원합니다.
var scrollableElement = document.body; //document.getElementById('scrollableElement');
scrollableElement.addEventListener('wheel', checkScrollDirection);
function checkScrollDirection(event) {
if (checkScrollDirectionIsUp(event)) {
console.log('UP');
} else {
console.log('Down');
}
}
function checkScrollDirectionIsUp(event) {
if (event.wheelDelta) {
return event.wheelDelta > 0;
}
return event.deltaY < 0;
}
답변
이것을 시도 할 수 있습니다.
function scrollDetect(){
var lastScroll = 0;
window.onscroll = function() {
let currentScroll = document.documentElement.scrollTop || document.body.scrollTop; // Get Current Scroll Value
if (currentScroll > 0 && lastScroll <= currentScroll){
lastScroll = currentScroll;
document.getElementById("scrollLoc").innerHTML = "Scrolling DOWN";
}else{
lastScroll = currentScroll;
document.getElementById("scrollLoc").innerHTML = "Scrolling UP";
}
};
}
scrollDetect();
html,body{
height:100%;
width:100%;
margin:0;
padding:0;
}
.cont{
height:100%;
width:100%;
}
.item{
margin:0;
padding:0;
height:100%;
width:100%;
background: #ffad33;
}
.red{
background: red;
}
p{
position:fixed;
font-size:25px;
top:5%;
left:5%;
}
<div class="cont">
<div class="item"></div>
<div class="item red"></div>
<p id="scrollLoc">0</p>
</div>
답변
이것은 prateek이 대답 한 내용에 추가 된 것입니다. IE의 코드에 결함이있는 것 같아서 약간 멋지게 수정하기로 결정했습니다 (다른 조건)
$('document').ready(function() {
var lastScrollTop = 0;
$(window).scroll(function(event){
var st = $(this).scrollTop();
if (st > lastScrollTop){
console.log("down")
}
else if(st == lastScrollTop)
{
//do nothing
//In IE this is an important condition because there seems to be some instances where the last scrollTop is equal to the new one
}
else {
console.log("up")
}
lastScrollTop = st;
});});
답변
- oldValue 초기화
- 이벤트를 수신하여 newValue 가져 오기
- 둘 빼기
- 결과에서 결론
- newValue로 oldValue 업데이트
// 초기화
let oldValue = 0;
// 이벤트 청취
window.addEventListener('scroll', function(e){
// Get the new Value
newValue = window.pageYOffset;
//Subtract the two and conclude
if(oldValue - newValue < 0){
console.log("Up");
} else if(oldValue - newValue > 0){
console.log("Down");
}
// Update the old value
oldValue = newValue;
});
답변
을 사용하여 스크롤바 위치를 얻을 수 있습니다 document.documentElement.scrollTop
. 그리고 그것은 단순히 이전 위치와 비교하는 것입니다.