Задать вопрос
Ответы пользователя по тегу JavaScript
  • Как в SPA записать состояние в historyAPI при этом не отменить ветку при шаге назад?

    @Sviaznoi Автор вопроса
    Всё оказалось проще чем я думал. Просто надо было прикрепить replaceState к событию прокрутки и немного подтроттлить его:
    let scrollE = () => {     
        scrollP = window.scrollY;;
        history.replaceState({name: cp(), scroll: scrollP, path: window.location.pathname},"",window.location.pathname);
    }
    
    let throttle = (callee, timeout) => {
        let timer = null;
        return function perform(...arg){
            if(timer) return;
            timer = setTimeout(() => {
                callee(...arg);
                timer = null;
            }, timeout);
        }
    }
    
    let scrollET = throttle(scrollE, 100);
    
    window.addEventListener("scroll", scrollET);
    
    window.addEventListener("popstate", async(e) => { 
        if (e.state) {
            switch(e.state.name){
                case 'relax':
                    relaxWork("y");
                    break;
                case 'main':                
                    await res("y");                
                    break;
                default:                             
                    await contentF(e.state.name, "y");                
            }
            window.scrollTo(0, e.state.scroll);      
        }
    });
    Ответ написан
    Комментировать