• Как выполнять итерацию по каждому клику?

    lina666
    @lina666
    Изучаю веб ЯП.
    1. Зачем было оборачивать все еще в 1 функцию
    2. Там цикл совсем не нужен внутри другой функции.
    3. Можешь использовать style и добавлять туда % нужный в width, если нужны классы можно сделать 4 класса и добавлять их, используя так же счетчик который будет пополняться на 1 после каждого вызова, т.е кликнули 3 раза.
    Сначала count = 1 поставили класс element.classList.add('line-active' + count

    Вот рабочий пример

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
    </head>
    <body>
      <div class="level">
        <div class="line">5%</div>
      </div>
      <button class="btn"></button>
    </body>
    </html>
    
    <code lang="css">
    .level {
      width: 100%;
      height: 50px;
      background: #eee;
    }
    .line {
      width: 10%;
      height: 50px;
      background: #ccc;
      display: flex;
      align-items: center;
      justify-content: center;
      transition: 0.3s;
    }
    
    .line.active1 {
        transition: 0.3s;
        width: 25%;
    }
    .btn {
      width: 10%;
      height: 20px;
      background: red;
      margin-top: 15px;
    }
    </code>


    let levelFull = document.querySelector('.line');
        let levelBtn = document.querySelector('.btn');
    let startPercent = 5
    
    function progressActive() {
        startPercent = startPercent + 25
        if (startPercent > 100) startPercent = 100
        levelFull.style.width = startPercent + '%'
        levelFull.textContent = startPercent + ' %'
     }
    
    levelBtn.addEventListener('click', progressActive);
    Ответ написан
    1 комментарий
  • Как добавить класс при клике?

    @limpch
    ты не правильно используешь querySelector. Селектор класса нужно указывать с точкой в начале, вот так:
    const contact_btn = document.querySelector('#cms_contacts'); // id
    const block = document.querySelector('.block'); // class
    const sub_contacts = document.querySelector('.header_sub_cms_contacts'); //class


    У тебя из за этого не находит элемент, из за того что он ищет по тегу, и ты типа пытаешься найти
    <block></block>
    а не
    <div class="block"></div>
    Ответ написан
    3 комментария
  • Почему при глубоком копировании объектов переполняется стек вызовов?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вероятно, клонируемый объект содержит циклические ссылки, типа
    const a = {};
    const b = {};
    a.b = b;
    b.a = a;
    
    cloneDeep(a); // бесконечный цикл

    Попробуйте подсмотреть реализацию cloneDeep() в loDash. В реале там вызывается baseClone()

    Можно сохранять каждый обработанный ранее объект в Map – и проверять, не имели ли с ним уже дела ранее – тогда вместо изготовления ещё одной копии просто вставлять ранее сделанный клон.
    Ответ написан
    1 комментарий
  • Почему при глубоком копировании объектов переполняется стек вызовов?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const entries = Object.entries(obj);
    for (const entry of entries) {
      if (!isObject(entry)) {
        result = Object.assign(result, Object.fromEntries(entry));
      } else return cloneDeep(entry);

    Что такое entries? - массив, состоящий из массивов.
    Чем, соответственно, является entry? - массивом.
    Что возвращает isObject для массивов? - true.
    То есть, вне зависимости от содержимого конкретного entry произойдёт рекурсивный вызов.
    Всё.
    Ответ написан
    1 комментарий
  • Как сделать горизонтальную прокрутку как на мобильном устройстве?

    lina666
    @lina666
    Изучаю веб ЯП.
    Можешь отслеживать зажатие мыши над элементом. После чего читать движение влево вправо и на это же расстояние двигать скролл

    document.getElementById('block').mousemove = function(e) {
        if (e.which == 1) {} // Нажата левая кнопка мыши
        if (e.which == 2) {} // Нажато колёсико мыши
        if (e.which == 3) {} // Нажата правая кнопка мыши
    }


    В целом можешь между срабатываниями считать разницу в координатах и менять значение у елемента element.scrollLeft

    Я бы так сделал, но не знаю на сколько это нужно, скорее всего пользователь просто не поймет, что там нужно скролить, если ему это никак не обозначить + рушится опыт пользователя т.к я не видел, что бы где то на десктопе делали скролл вбок при помощи мыши (не считая слайдеров)
    Ответ написан
    1 комментарий