@moiseev1788

Как изменить URL, когда прокручивается страница?

Есть страница с контентом, которая имеет адрес example.ru/article_s.html, когда страница прокручивается до конца, загружается другой файл с контентом из другой папки: data/article.html.

С помощью window.history.pushState я изменил URL страницы, но он меняется только один раз, а в папке /data страниц много.

Как сделать так, чтобы URL заменялся при прокрутке страницы, при загрузке другого содержимого и при перезагрузке страницы сохранялось исходное состояние страницы?

html код, который указывает путь к новым загружаемым файлам:

<div class="article__article" data-url="/data/article.html">Content...</div>
<div class="article__article" data-url="/data/article2.html">Content...</div>


Скрипт прокрутки:

'use strict';

var width = $(window).width();
var height = $(window).height();
var $article_list = $('#article_list');
var sticky = 0;
var send = true;
var page = {
  init: function init() {
    var top = page.getScrollTop();

  },

  getScrollTop: function() {
    if (typeof pageYOffset != 'undefined') {
      //most browsers except IE before #9
      return pageYOffset;
    } else {
      var B = document.body; //IE 'quirks'
      var D = document.documentElement; //IE with doctype
      D = D.clientHeight ? D : B;
      return D.scrollTop;
    }
  },
  scrollPage: function() {
    var topPos = $('#get_article').offset().top;
    var top = page.getScrollTop();
    var diff = topPos - top;
    // console.log( diff +'||'+ top +'||'+ topPos);

    if ((diff <= (height - sticky)) && send) {

      var $last_article = $article_list.children().last()
      var _url = $last_article.attr('data-url');
      send = false;
      if (_url) {
        $.ajax({
          url: _url,
          type: 'GET',
          dataType: 'html',
          beforeSend: function() {
            // включение прелоудера
            send = false;
          },
          complete: function() {
            // отключение прелоудера
          },
          success: function(obj) {
            send = true;
            $article_list.append(obj);
            window.history.pushState({
                page: 'article__article'
              },
              'article',
              '/data/article.html',
            );
            const players = Array.from(document.querySelectorAll('#videoPlay')).map(p => new Plyr(p));
            const plyrs = Array.from(document.querySelectorAll('#plyrVideo')).map(plyrs => new Plyr(plyrs));
          },
          error: function(xhr, ajaxOptions, thrownError) {
            console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText + "\r\n" + xhr);
          }
        });
      }
    }
  }
};
/**
 * section init
 */
$(document).ready(function() {
  page.init();
});
/**
 * section scroll animation
 */
$(document).on("scroll", function() {
  page.scrollPage();

});
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Нужно в функции window.history.pushState() указать значения переменных, а не констант (как сделано сейчас).
Ответ написан
@kur4chyt
Качественный говнокод от производителя
var newUrl = '/page/12';
history.pushState('', '', newUrl);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы