Задать вопрос
  • Swiper JS вертикальный слайдер скроллится на жестах "слева направо" и наоборот?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Достаточно поменять
    mousewheel: true

    на
    mousewheel: {
              forceToAxis: true,
            },
    Ответ написан
    Комментировать
  • Из-за чего сайт может отображаться как текст в Telegram WebView?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Лови, была у нас такая проблема, тоже на nuxt3

    https://bugs.telegram.org/c/46110

    https://github.com/nuxt/nuxt/pull/30163 - фикс, отпишись потом, если получилось
    Ответ написан
    1 комментарий
  • Как найти стили в шаблоне Битрикс?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Это пересчет у тебя в JS

    файл лежит по адресу "/bitrix/templates/aspro-scorp/js/general.min.js"
    Метод - CheckStickyFooter
    Его выключи и не будет считаться у тебя там, однако, возможно это зааффектит все страницы,
    Ответ написан
    Комментировать
  • Как уменьшить отступ между столбцами в echarts?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Привет, суть в том, что тебе надо использовать barGap
    Только у тебя в примере, у тебя значение бара - это массив, и он не будет работать, тебе надо каждый serias сделать в виде бара, тогда ты сможешь его использовать

    Пример
    Ответ написан
    Комментировать
  • Как отследить события в DatePickerPanel у инпутов отвечающих за дату и время?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Посмотрел, суть в том, что у тебя при вводе с инпута, валидация проходит тогда, когда полностью ввел дату.
    Если же, ты хоче на этапе ввода блокировать, то тебе нужна некая маска или валидатор, ввода.
    Маска

    Введенная дата + 14, как раз, будет валидироваться, обычно, при вводе , делают какую-то дельту, и автоматом заполняют. Тем самым, ты сможешь валидировать только либо месяц, либо день, если введенная дата на границе дней.

    Либо, повесить реф на компонент, получать реактивно инпут и там валидировать value.
    Сам компонент вряд-ли что-то сможет сделать
    Ответ написан
    Комментировать
  • Как сделать горизонтальный скролл стрелками?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    1- Вам нужно пределить контейнер, который вы будете инициализировать, не важно, это вся страница или что-то внутри страницы со скроллом.
    2- Задать свдиг на сколько пикселей вам надо крутить контейнер.
    3- В идеале, еще через обсервер смотреть, находитесь ли вы в видимой области экрана, если да, то , автоматически ставить слушатели, если нет, то убирать их, чтобы они просто так не работали, если вы вне зоны области
    Важный момент, вы хотите сделать чтобы стрелки были статичны или названия классов тоже передавать туда ?

    Примерный код будет такой

    const scroll = new HorizontalScroll('#scrollContainer1', {
        scrollStep: 400, // шаг в пикселях
        scrollBehavior: 'smooth' // плавная прокрутка
    });
    
    class HorizontalScroll {
                constructor(container, options = {}) {
                    this.container = typeof container === 'string' 
                        ? document.querySelector(container) 
                        : container;
                    
                    this.options = {
                        scrollStep: 300,
                        scrollBehavior: 'smooth',
                        ...options
                    };
                    
                    this.content = this.container.querySelector('.scroll-content'); // если нужно, чтобы вы передавали классы, можно сделать в виде опшинов и объект со значением. 
                    this.leftArrow = this.container.querySelector('.scroll-arrow.left');
                    this.rightArrow = this.container.querySelector('.scroll-arrow.right');
                    
                    this.isInViewport = false;  //переменная, которая как раз смотрит и говорит, есть ли скроллы в зоне видимости или нет
                    this.observer = null;   // обсервер, если вам нужен
                    
                    this.init();
                }
                
                init() {
                    // Инициализация Intersection Observer
                    this.initObserver(); // метод, логику думаю можно описать
                     
                    // Обновление состояния стрелок
                    this.updateArrows();
                    
                    // Обработка изменения размера окна
                    window.addEventListener('resize', () => this.updateArrows());
                    
                    // Обработка скролла контента
                    this.content.addEventListener('scroll', () => this.updateArrows());
    
    
                } 
          }
    }
    Ответ написан
    Комментировать
  • Как сделать такую маску в CSS?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    https://css-shape.com/inverted-radius/
    Оставлю тут )
    Ответ написан
    Комментировать
  • Как создать карточки в рядах со смещением?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    не совсем понятно
    1- Если у вас слайдер, именно идет скролл, то, выбираете сдвиг первого изображения на 50% , визуально видно, что там так и есть
    2- Если это статично, делаете сетку, грид, размечая, сколько у вас колонок и по высоте и по ширине, у первой колонки и последней, можете сделать сдвиг, тогда, пересчет будет как вам нужно.

    Но, вопрос требует уточнений, что именно вы хотите, что за изображения, нужно, чтобы они были оазличными, или же, это просто одно изображение, в виде картинки, которое повторяется с учетом строк ?
    Ответ написан
    Комментировать
  • Как такое сверстать?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Держи
    Недавно нашли, нам очень помогло, переменные можешь так же, отрегулировать

    Можно еще что-то тут глянуть
    Ответ написан
    1 комментарий
  • Как выровнять в гриде по горизонтали?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    justify-items - выравнивает элементы внутри их ячеек
    justify-content - выравнивает всю сетку по горизонтали

    Вот ссылка
    https://doka.guide/css/grid-guide/

    Либо вы как-то не так задали вопрос, либо покажите полный код, что вы хотите.
    Ответ написан
    Комментировать
  • Как отследить повторный клик по элементу?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Проблема в том, что вам нужно отслеживать состояние конкретной кнопки, а не только предыдущий массив.

    Примерно, как-то так будет

    data() {
      return {
        activeItems: [],
        lastClickedId: null
      }
    },
    
    methods: {
      click(items, buttonId) {
        const itemsArray = Array.isArray(items) ? items : [items];
        
        // Если кликаем второй раз по той же кнопке
        if (this.lastClickedId === buttonId) {
          this.activeItems = [];
          this.lastClickedId = null;
        } else {
          this.activeItems = itemsArray;
          this.lastClickedId = buttonId;
        }
        
        this.applyStyles();
      },
      
      applyStyles() {
        for (let node in this.nodes) {
          this.nodes[node].style.opacity = this.activeItems.includes(node) ? 1 : 0.3;
        }
      }
    }
    
    
    
    В коде при событии клик, передавай и id   @click="click(button.items, button.id)" - который как раз является индексом
    Ответ написан
  • На какое событие жизненного цикла в компонент приходят новые пропсы?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Есть события жизненный цикл у компонента, однако, явного иструмента , который следи за props нет, они по умолчанию реактивны.
    Если вам надо явно отследить изменения именно пропсов, предполагаю, у вас там вложенный объект, то вам нужен watch с опцией immediate, и вы явно можете отследить изменения и сделать что-то с ними, так как, не всегда изменения пропсов, затрагивают изменение обновления компонента и его перерисовку
    Ответ написан
    Комментировать
  • Как дождаться полной загрузки файла перед загрузкой следующего?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Проблема в том, что все fetch запросы запускаются параллельно, и filePosition вычисляется до того, как предыдущие файлы успевают добавиться в массив. Вот несколько способов решения:

    // В дочернем компоненте - передаем все файлы сразу
    attachThumbnail: function (e, curObj) {
      e.target.closest('.area-upload').classList.remove('drag-file');
      e.target.closest('.area-upload').style.display = 'flex';
    
      let files = e.target.files || e.dataTransfer.files;
      let allowFiles = this.validateFiles(e, files, curObj);
    
      this.$emit('attachThumbnail', curObj, Array.from(allowFiles));
    },
    
    // В родительском компоненте - обрабатываем последовательно
    async attachThumbnail(curObj, files) {
      let index = this.formData.materialFiles.findIndex(item => item.lang === curObj.lang);
      
      for (let i = 0; i < files.length; i++) {
        let file = files[i];
        let filePosition = this.formData.materialFiles[index].files.restFiles.length;
    
        console.log('Array length ' + filePosition);
    
        try {
          const response = await this.uploadFile(curObj, file, 'rest', filePosition);
          const data = await response.json();
          
          console.log('append file');
          this.formData.materialFiles[index].files.restFiles.push({
            name: data.fileName,
            id: data.id
          });
        } catch (error) {
          console.log(error);
        }
      }
    }


    Примерно как-то так
    Ответ написан
    Комментировать
  • Как глубоко сравнить копию реактивного объекта и реактивный объект Vue 2?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Кажется я понял о чем вы.
    Так обычно делают для того, чтобы сравнить, были ли изменения в форме и показать окно выхода.

    Судя по всему, у вас 2vue.
    На моменте инициализации, что мешает вам скопировать объект, сохранить его исходные данные и написать метод useCompare, который как раз, будет через cloneDeep сравнивать оригинал с тем, что было изменено.

    Далее, на вотчкер смотрит за стейтом и сравнивает с оригиналом скопированным.
    Скорее всего, у вас комирование идет по ссылке и значения у вас идентичные.

    Но, если объект слишком глубокой вложенности, то, кажется, вы что-то делаете не так,
    Ответ написан
    Комментировать
  • Как сделать модальное окно, которое всегда рядом с кнопкой, его вызывающей?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Вот решение
    В библиотеках это называется контекстное меню, можно самому сделать, как писали выше, через floating-ui, либо через готовые библиотеки
    Ответ написан
    Комментировать
  • Почему выдает выдает ошибку при изменении ИБ битрикс?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Вы пересоздавали индексы , после того, как копировали ?
    Убедитесь, что привязки в новом разделе не ведут на старые ИБ
    Ответ написан
    Комментировать
  • Блоки с товарами на главной АСПРО?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    А что мешает вам вывести компонент и указать у него количество ?
    У вас все эти компоненты лежат в index.php
    Ответ написан
  • Как сделать расширенную область при наведении курсора?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Хмм, а что мешает тебе подставить в эту иконку какой-то слой, типа

    А дальше, слушателем на позицию мышки делать подсветку при наведении, радиус ты можешь вычислить сам.
    Пришли всю иконку или сделай ссылку, так непонятно, что ты хочешь. Соседние точки , ты можешь вычислить по
    https://developer.mozilla.org/en-US/docs/Web/API/S...

    Пример определения
    function getMousePosition(evt) {
          const CTM = svg.getScreenCTM();
          return {
            x: (evt.clientX - CTM.e) / CTM.a,
            y: (evt.clientY - CTM.f) / CTM.d
          };
        }
    Ответ написан
    Комментировать
  • Как корректно реализовать работу с таймерами?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Рекомендую рассмотреть библиотеку Interval

    Вот по таймеру
    Time out

    библиотека очень мощная и много чего уже сделано
    Ответ написан
    Комментировать
  • Можно ли вернуть помимо статической страницы данные с сервера?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Как вариант, ранее на PHP делали следующее, при рендере страницы, можно создать некий атрибут и туда класть данные, и потом с ним работать, такой подход делал Bitrix в свое время, чтобы передать данных из сервера в js
    Ответ написан
    Комментировать