Обнаружение направления прокрутки
Поэтому я пытаюсь использовать JavaScript on scroll
для вызова функции. Но я хотел знать, могу ли я определить направление прокрутки без использования jQuery. Если нет, то есть ли какие-либо обходные пути?
Я думал просто положить кнопку "сверху", но хотел бы избежать этого, если бы мог.
Я просто попробовал использовать этот код, но он не работал:
if document.body.scrollTop <= 0 {
alert ("scrolling down")
} else {
alert ("scrolling up")
}
Ответы
Ответ 1
Его можно обнаружить, сохранив предыдущее значение scrollTop и сравнив текущее значение scrollTop с ним.
JS:
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);
Ответ 2
Простой способ поймать все события прокрутки (касание и колесо)
window.onscroll = function(e) {
// print "false" if direction is down and "true" if up
console.log(this.oldScroll > this.scrollY);
this.oldScroll = this.scrollY;
}
Ответ 3
Используйте это, чтобы найти направление прокрутки. Это только для того, чтобы найти направление вертикальной прокрутки. Поддерживает все кросс-браузеры.
var scrollableElement = document.getElementById('scrollableElement');
scrollableElement.addEventListener('wheel', findScrollDirectionOtherBrowsers);
function findScrollDirectionOtherBrowsers(event){
var delta;
if (event.wheelDelta){
delta = event.wheelDelta;
}else{
delta = -1 * event.deltaY;
}
if (delta < 0){
console.log("DOWN");
}else if (delta > 0){
console.log("UP");
}
}
пример
Ответ 4
Это дополнение к тому, что ответил 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;
});});
Ответ 5
Вы можете попробовать это сделать.
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>
Ответ 6
Вы можете получить позицию полосы прокрутки, используя document.documentElement.scrollTop
. И тогда это просто вопрос сравнения его с предыдущей позицией.
Ответ 7
- Инициализировать oldValue
- Получить новое значение, слушая событие
- Вычесть два
- Вывод из результата
- Обновите oldValue с помощью newValue
//Инициализация
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;
});
Ответ 8
Вот ответ @IT VLOG на то, что вы можете сделать. Это сработало идеально для меня, спасибо! все остальное не работает для мобильных свитков, и это очень просто, без использования какой-либо библиотеки.
window.onscroll = function(e) {
if(this.oldScroll > this.scrollY){
<!-- do something if TRUE -->
}
else {
<!-- Do something on FALSE -->
}
this.oldScroll = this.scrollY;
}
Ответ 9
Вы можете проверить deltaY
в onwheel
события:
window.onwheel = function(e) {
if(e.deltaY > 0) {
console.log("Scrolling downwards");
} else {
console.log("Scrolling upwards");
}
}
Ответ 10
Я лично использую этот код для определения направления прокрутки в JavaScript...
Просто вам нужно определить переменную для хранения lastscrollvalue, а затем использовать ее, если & else
let lastscrollvalue;
function headeronscroll() {
// document on which scroll event will occur
var a = document.querySelector('.refcontainer');
if (lastscrollvalue == undefined) {
lastscrollvalue = a.scrollTop;
// sets lastscrollvalue
} else if (a.scrollTop > lastscrollvalue) {
// downscroll rules will be here
lastscrollvalue = a.scrollTop;
} else if (a.scrollTop < lastscrollvalue) {
// upscroll rules will be here
lastscrollvalue = a.scrollTop;
}
}