Igor150195

табы + скролл

Jan 30th, 2026
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.47 KB | None | 0 0
  1. $(function() {
  2. function getTranslateX($el) {
  3. const transform = $el.css('transform');
  4. if (!transform || transform === 'none') return 0;
  5. const values = transform.match(/matrix\(([^)]+)\)/)[1].split(',');
  6. return parseFloat(values[4]);
  7. }
  8.  
  9. $(document).on('click', '.custom-tab-title', function(e) {
  10. e.preventDefault();
  11.  
  12. const $wrapper = $('.custom-tab-list');
  13. const $inner = $('.custom-tablist-track');
  14. const padding = parseFloat($inner.css('padding-left')) || 0;
  15.  
  16. $('.custom-tab-title').removeClass('btn-tab-active');
  17. $(this).addClass('btn-tab-active');
  18.  
  19. let index = $(this).index();
  20. $('.feature-tab-wrap').not(':eq(' + index + ')').slideUp(250);
  21. $('.feature-tab-wrap').eq(index).slideDown(250);
  22.  
  23. const currentTs = getTranslateX($inner);
  24.  
  25. // --- ЛОГИКА ВПРАВО ---
  26. let $next = $(this).next();
  27. if ($next.length) {
  28. const wrapperRight = $wrapper.offset().left + $wrapper.outerWidth();
  29. const nextRight = $next.offset().left + $next.outerWidth();
  30.  
  31. if (nextRight > wrapperRight) {
  32. const diff = nextRight - wrapperRight;
  33. // Сдвигаем влево на разницу + ваш паддинг
  34. $inner.css('transform', `translateX(${currentTs - (diff + padding)}px)`);
  35. return;
  36. }
  37. }
  38.  
  39. // --- ЛОГИКА ВЛЕВО ---
  40. let $prev = $(this).prev();
  41. if ($prev.length) {
  42. const wrapperLeft = $wrapper.offset().left;
  43. const prevLeft = $prev.offset().left;
  44.  
  45. // Если левый край ПРЕДЫДУЩЕГО элемента ушел за левую границу
  46. if (prevLeft < wrapperLeft) {
  47. // Вычисляем, на сколько именно пикселей он спрятан
  48. const diff = wrapperLeft - prevLeft;
  49.  
  50. // Сдвигаем вправо: текущее положение + разница + паддинг
  51. let targetTs = currentTs + diff + padding;
  52.  
  53. // Ограничитель: нельзя сдвинуть дальше нуля (в самое начало)
  54. if (targetTs > 0) targetTs = 0;
  55.  
  56. $inner.css('transform', `translateX(${targetTs}px)`);
  57. }
  58. }
  59. });
  60. });
Advertisement
Add Comment
Please, Sign In to add comment