@Stanislav6

Просмотр корзины и нажатие кнопки Back браузера ломает работу скриптов. Как полечить?

Как появляется проблема:
Когда с любой страницы открываю выезжающее окно мини-корзины (из шапки сайта) и жму "Посмотреть корзину", после чего жму кнопку назад в браузере.

Тема с этим багом: https://maudern.thunder-stores.com/shop/

Ломается работа выезжающего окна (для мини-корзины и фильтров, например).
На html и body, после нажатия кнопки Назад вешается .noscroll, который по идее должен убираться после нажатия ссылки внутри выезжающего окна, если исходить из скрипта:
(function($) {
	"use strict";

	// open shop filters.
	$( document ).on(
		'click touch',
		'.woocommerce .woocommerce-product-loop-header .woocommerce-product-filters span.filters-toggle.offcanvas-filters-toggle',
		function(){
			$( 'html, body' ).addClass( 'noscroll' );
			$( '.offcanvas.offcanvas-shop-filters' ).addClass( 'open' );
			$( '.overlay' ).addClass( 'visible right' ).removeClass( 'delay' );
		}
	);

	// open minicart.
	$( document ).on(
		'click touch',
		'#site-header #secondary-menu-wrapper ul#menu-site-tools > li#shopping-bag-site-tool',
		function(){
			$( 'html, body' ).addClass( 'noscroll' );

			if ( $( document ).find( '#site-header' ).hasClass( 'search-open' ) ) {
				// close search form.
				$( '#site-header #secondary-menu-wrapper ul#menu-site-tools > li#search-site-tool' ).removeClass( 'active' );
				$( '.overlay' ).removeClass( 'visible' );

				setTimeout(
					function() {
						$( '#site-header' ).removeClass( 'search-open' );
					},
					200
				);

				setTimeout(
					function() {
						$( '.offcanvas.offcanvas-minicart' ).addClass( 'open' );
						$( '.overlay' ).addClass( 'visible right' );
					},
					800
				);
			} else {
				$( '.offcanvas.offcanvas-minicart' ).addClass( 'open' );
				$( '.overlay' ).addClass( 'visible right' ).removeClass( 'delay' );
			}
		}
	);

	$( document.body ).on(
		'added_to_cart',
		function(){
			$( '#site-header #secondary-menu-wrapper ul#menu-site-tools > li#shopping-bag-site-tool' ).trigger( 'click' );
		}
	);

	// close offcanvas.
	$( document ).on(
		'click touch',
		'.overlay, .offcanvas-close',
		function(){

			$( 'html, body' ).removeClass( 'noscroll' );
			$( '.offcanvas' ).removeClass( 'open' );
			$( '.overlay' ).removeClass( 'visible right left' ).addClass( 'delay' );
		}
	);

	// close offcanvas on link click.
	$( document ).on(
		'click touch',
		'.offcanvas a',
		function(){
			// check for internal links.
			if ( ! $( this ).attr( 'href' ).startsWith( '#' ) &&
			! $( this ).attr( 'href' ).startsWith( '/' ) &&
			! $( this ).attr( 'href' ).startsWith( './' ) &&
			! $( this ).attr( 'href' ).startsWith( '../' ) &&
			! $( this ).attr( 'href' ).startsWith( $( location ).attr( "href" ) ) &&
			! $( this ).hasClass( 'remove' ) ) {

				// hide offcanvas.
				$( '.offcanvas' ).hide();
				// hide overlay.
				$( '.overlay' ).hide();
			}
		}
	);

})( jQuery );


Если перейти с главной страницы через мини-корзину на страницу корзины, затем нажать Назад, то по возвращении мини-корзина открыта. Если тоже самое проделать, например, со страницы магазина — по нажатию Назад корзина не отображается, но классы запрещающие скролл навешиваются, полностью ломая любое взаимодействие с этим выезжающим окном и любыми кнопками его вызывающими.

Это функционал платной темы, на секундочку, с площадки Woocommerce.

Я попытался в меру своих сил и знаний это побороть, в частности проверять, есть ли на нужных элементах класс .noscroll и убирать его при window.onload. Не помогло.
Выручайте.
  • Вопрос задан
  • 150 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы