Временное решение для версии 4.10.x:
I. Автоматический вариант:
Diff-файл:
Инструкция, как воспользоваться этим файлом:
https://www.cs-cart.ru/docs/latest/upgrade/apply_diff_file.html
II. Ручной вариант
II. Ручной вариант:
-
Открыть файл:
js/tygh/responsive.js
-
Найти функцию
detectMenuWidth
(около 154 строки). -
Найти в ней функцию
_getSubmenuOriginWidth
(около 198 строки). -
Заменить код:
function _getSubmenuOriginWidth ($submenu) { $submenu.css({ visibility: 'hidden', left: 0 }); var _width = $submenu.outerWidth() || 0; // remove inline styles perfectly $submenu.get(0).style.left = ''; $submenu.get(0).style.visibility = ''; return _width; }
на код:
function _getSubmenuOriginWidth ($submenu) {
// FIXEME: iOS 13 bug with visibility: hidden
// $submenu.css({ visibility: 'hidden', left: 0 });
// var _width = $submenu.outerWidth() || 0;
var _width = $submenu.position().left + $submenu.width();
// remove inline styles perfectly
// $submenu.get(0).style.left = '';
// $submenu.get(0).style.visibility = '';
return _width;
}
Временное решение для версии 4.9.x:
I. Автоматический вариант:
Diff-файл:
Инструкция, как воспользоваться этим файлом:
https://www.cs-cart.ru/docs/latest/upgrade/apply_diff_file.html
II. Ручной вариант
II. Ручной вариант:
-
Открыть файл:
js/tygh/responsive.js
-
Найти функцию
detectMenuWidth
(около 148 строки). -
Заменить код:
var elm = $(e.target); var menuElm = elm.parents(".cm-responsive-menu"); var isHorisontalMenu = menuElm.parent().hasClass("ty-menu-vertical") ? false : true; if(isHorisontalMenu) { var menuWidth = menuElm.outerWidth(); var menuOffset = menuElm.offset(); var menuItemElm = elm.closest('.cm-menu-item-responsive'); $('.ty-menu__submenu-to-right').removeClass('ty-menu__submenu-to-right'); var submenu, position; // Detect menu collisions if(menuItemElm) { if(typeof menuItemElm.offset() !== "undefined") { menuWidth = menuWidth - (menuItemElm.offset().left - menuOffset.left) } submenu = $('.cm-responsive-menu-submenu', menuItemElm).first(); if(submenu.length) { submenu.css({visibility: "hidden", left: 0}); position = submenu.outerWidth(); if(position > menuWidth) { submenu.parent().addClass('ty-menu__submenu-to-right'); } submenu.css({visibility: "", left: "auto"}); } } }
на код:
var elm = $(e.target);
var menuElm = elm.parents(".cm-responsive-menu");
var isHorisontalMenu = menuElm.parent().hasClass("ty-menu-vertical") ? false : true;
if(isHorisontalMenu) {
var menuWidth = menuElm.outerWidth();
var menuOffset = menuElm.offset();
var menuItemElm = elm.closest('.cm-menu-item-responsive');
$('.ty-menu__submenu-to-right').removeClass('ty-menu__submenu-to-right');
var submenu, position;
// FIXEME: iOS 13 bug with visibility: hidden
// Detect menu collisions
// if(menuItemElm) {
// if(typeof menuItemElm.offset() !== "undefined") {
// menuWidth = menuWidth - (menuItemElm.offset().left - menuOffset.left)
// }
// submenu = $('.cm-responsive-menu-submenu', menuItemElm).first();
// if(submenu.length) {
// submenu.css({visibility: "hidden", left: 0});
// position = submenu.outerWidth();
// if(position > menuWidth) {
// submenu.parent().addClass('ty-menu__submenu-to-right');
// }
// submenu.css({visibility: "", left: "auto"});
// }
// }
if (menuItemElm) {
var submenu = $('.cm-responsive-menu-submenu', menuItemElm);
if (submenu.length) {
var position = submenu.position().left + submenu.width();
if (position > menuWidth) {
submenu.parent().addClass('ty-menu__submenu-to-right');
}
}
}
}
Причина бага: баг вызван из-за некорректной работы CSS-свойства visibility: 'hidden'
на iOS 13.