#javascript #function #onscroll
#javascript #функция #onscroll
Вопрос:
Здесь я столкнулся с небольшой проблемой. У меня есть базовые знания о Javascript, и я хочу сделать следующее:
Прямо сейчас, когда вы прокручиваете вниз, меню становится меньше. когда вы вернетесь назад, все вернется в нормальное состояние. Я вызываю это событие с помощью window.onscroll:
var diff = 0;
function effects(){
var topDistance = (document.documentElement amp;amp; document.documentElement.scrollTop) || document.body.scrollTop;
var clientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
var clientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
if(topDistance > diff){
diff = topDistance;
if(clientWidth > 1024){
if(topDistance > 300){
document.getElementById("header").style.marginTop= "-100px";
}
}
}else if(topDistance < diff){
diff = topDistance;
if(clientWidth > 1024){
if(topDistance > 300){
document.getElementById("header").style.marginTop= "0";
}
}
}
}
window.onscroll = effects();
Теперь я хочу, чтобы другая функция имела некоторые эффекты для моих кнопок призыва к действию, давайте вызовем функцию «test», но если я хочу сделать это так же, как указано выше, функции эффектов больше не работают:
function test(){
//do something
}
window.onscroll = test();
Любая помощь приветствуется! Я думаю, что это не будет большой проблемой, но я делаю это неправильно, я думаю. (PS: ПОЖАЛУЙСТА, БЕЗ JQUERY)
Комментарии:
1. Итак, вы хотите вызвать две функции при прокрутке? Но вы также хотите иметь
effects
стиль заголовка иtest
стиль некоторых кнопок, но оба выполняют одинаковые проверки высоты прокрутки / смещения?2. Кроме того, вы можете также рассмотреть возможность отмены вашей функции onscroll: davidwalsh.name/javascript-debounce-function
Ответ №1:
Вы переопределяете функцию onscroll, выполнив window.onscroll = blabla
Вы можете сделать :
window.onscroll = function() {
effects();
test();
}
или
window.addEventListener('scroll', effects);
window.addEventListener('scroll', test);
Комментарии:
1. Так просто, но так сложно найти ответ. Спасибо!
Ответ №2:
Вы можете использовать несколько прослушивателей для события прокрутки.
window.addEventListener('scroll', effects);
window.addEventListener('scroll', test);
Таким образом, вы не переопределяете window.onscroll
Ответ №3:
вы должны использовать
window.addEventListener
вместо window.onscroll
Комментарии:
1. Добро пожаловать в SO! Пожалуйста, взгляните на другие ответы, которые были даны ранее. Ваш подход уже упоминается там. Чтобы сохранить сайт понятным и упростить поиск ответов, мы стараемся избегать двойных ответов.