Javascript - Тернарный оператор - Сравнение одной и той же функции дважды? - PullRequest
0 голосов
/ 19 июня 2019

У меня есть 3 переменные top, mid, bot, которые я хочу зарегистрировать, в зависимости от того, какая часть всплывает div (если будет зарегистрирована самая верхняя часть div, тогда top будет)

ВсеВам нужно знать, что когда пользователь прокручивает страницу вниз, есть определенные divs, на которые мы хотим нацелиться.Эти 3 переменные представляют то, что нужно регистрировать всякий раз, когда мы нажимаем на определенную часть div.

Как бы переписать троичный оператор console.log, чтобы иметь смысл, прямо сейчас, mid не запускается вообще.

РЕДАКТИРОВАТЬ

trgt1 and trgt2 - это 2 деления с классом (.column).trgt1 - это самый первый div, который появляется, trgt2 должен появиться, когда мы прокручиваем половину этого div.

CODE

function onScroll(event){

let top = "Column with id:`id-10` started to become visible on the page."
let mid = "Column with id:`id-50` is now more than 50% visible on the page."
let bot = "Column with id:`id-40` is now fully visible on the page."

targets.forEach(

    function(trgt,index){

          let isVisible = isScrolledIntoView(trgt);

          if (visibleStates[index] != isVisible)

          console.log(`Element index ${index} is now ${isVisible === trgt1 ? top : (isVisible === trgt2 ? mid : bot)}`);

          visibleStates[index] = isVisible;
        }
    );
}

1 Ответ

1 голос
/ 19 июня 2019

Вы можете работать со скриптом, который запускается при прокрутке страницы. Так что добавьте список событий на страницу. Затем вы можете отменить прокрутку, чтобы контролировать количество шума, которое вы разрешаете в окне. Включенная функция - это рабочая функция отладки, просто поиграйте с ожиданием в миллисекундах. А затем используйте функцию debounce в функции checkSlide (), куда вы помещаете свой исполняемый код.

Я знаю, что это не прямой ответ, это другой способ решения проблемы. Это может сработать. Если ты хочешь сделать это по-своему, иди на это ..

Удачи!

window.addEventListener('scroll', debounce(checkSlide));

function checkSlide(){}

function debounce(func, wait=20, immediate = true){

var timeout; 

//debounce is a higher order function and will return another function 
return function run_code() {
    var context = this;

    //arguments is local variable of a function, refers to all arguments 
    var args = arguments; 

    //variable later is a function
    var later = function(){
        timeout = null;

        //if it is not time zero, apply checkSlide function 
        if(!immediate) func.apply(context, args);
    };

    var Callnow = immediate && !timeout;
    clearTimeout(timeout);
    timeout = setTimeout(later, wait);
    if(Callnow) func.apply(context, args);
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...