• Почему не работает функция проверки?

    @Sun_Day
    Исправить

    document.getElementById("form").innerHTML == sum
    На
    document.getElementById("form").value == sum
    Ответ написан
    1 комментарий
  • Какие есть руководства по верстке?

    @Sun_Day
    Препроцессор типа sass, бэм(если нужен), семантическая верстка, адаптивы всякие.

    руководства по верстке


    Нет никакого единого руководства по верстке, где бы было собрано все, что вы хотите. Ролики на ютубе/статьи в интернете. Мб какая-нибудь штмл академи, хз. Все зависит от вашего уровня знаний, верстать умею и каша в коде - как-то мало совместимо.

    Если просто нужен принцип организации css, то пользуйтесь каким-нибудь sass'ом. Если порядок в html, то изучайте семантическую верстку.
    Ответ написан
    Комментировать
  • Как должен выглядеть компонент загрузки картинок?

    @Sun_Day
    Скрывать, или добавлять инпуты по условию? Менять type у инпутов по условию? Сделать разные инпуты и отображать те или иные на выбор пользователя(по условию)?
    Вот 3 варианта. Пользуйтесь.
    Ответ написан
    Комментировать
  • Почему redux лежит на плечах фронтендера, когда это работа бэкэндера?

    @Sun_Day
    Когда юзер находится в вашем веб приложении, он создает определенные действия. Действия связаны с состоянием. А redux это набор утилит для глобального хранения состояния(state) в приложении.
    Таким образом, вы создаете какие-то объекты и они меняются в зависимости от состояния. Пользователь это видит как некие различные реакции на его действия.
    Ответ написан
    Комментировать
  • Как изменить значение свойства в итерируемом объекте?

    @Sun_Day
    export class AppComponent {
      public items = [
        {
          name: "Ivan",
          count: 2
        },
        {
          name: "Petr",
          count: 14
        }
      ];
    
      public increment(index) {
        this.items[index].count += 1;
      }
    
      public decrement(index) {
        this.items[index].count -= 1;
      }
    }


    <div *ngFor="let item of items; index as i">
      <p>{{item.name}}</p>
      <p>{{item.count}}</p>
      <button (click)="increment(i)">increment</button>
      <button (click)="decrement(i)">decrement</button>
    </div>
    Ответ написан
    Комментировать
  • Какой указать тип для event path на React?

    @Sun_Day
    Вероятно его туда не добавили по какой-то причине. Есть подозрение, что именно для того, чтобы вы его не использовали.
    В мозиле отыскать его не удалось, но вот в хроме оно есть. Конечно можно написать обходной тип, но наверное не стоит использовать это свойство, если важна какая никакая кроссбраузерность.
    А вот с функцией composedPath все впорядке.
    https://developer.mozilla.org/en-US/docs/Web/API/E...

    Но если прям необходимо, то как-то так:

    type M = MouseEvent & {
        path: Node[];
    }
      const handleOutsideClick = (event: M ) =>


    6059fcedca4bc829495530.jpeg
    6059fcf7e1b25851798383.jpeg
    Ответ написан
    1 комментарий
  • Как усовершенствовать алгоритм для уравнения Диофанта?

    @Sun_Day
    Во-первых, у вас в корне неверное решение, хотя бы потому что не соответствует условию:

    find all integers
    Тут же тест:
    solEquaStr(90005) --> "[[45003, 22501], [9003, 4499], [981, 467], [309, 37]]"


    Ваше решение вернет лишь первый и единичный случай. Нужно вернуть все.
    Поэтому, цикл вайл тут тоже не подойдет.
    Во-вторых, у вас неверное условие итерации. Нужно итерироваться iterator <= sqrt(N) (или pt1 <= sqrtN в вашем решении)
    Нецелых чисел может быть очень много, особенно для больших чисел, поэтому по условию нужно вернуть целые числа(isInteger). Если при итерации не будет пары целых чисел, то решений нет, возвращаем пустой массив.

    Ну и двигать поинтеры - тоже в корне неверно, нужно искать x,y.
    x = (d + i) / 2;
    y = (d - i) / 4

    Решение выше вполне норм. Вот что-то похожее.

    function solequa(n) {
        const sqrtN = Math.sqrt(n);
        const result = [];
        let x, y, d;
        for (let i = 1; i <= sqrtN; i++) {
            d = n / i;
            x = (d + i) / 2;
            y = (d - i) / 4
            if (Number.isInteger(x) && Number.isInteger(y)) {
                result.push([x, y]);
            }
        }
        return result;
    }
    Ответ написан
    Комментировать
  • Как правильно написать функцию которая при клику будет перемешивать Dom элементы?

    @Sun_Day
    const button = document.querySelector(".shuffle");
    const wrapper = document.querySelector(".wrapper");
    const image = document.querySelectorAll(".image")
    
    button.addEventListener("click", () => {
        const images = [...image];
        const shuffled = shuffle(images);
    
        shuffled.forEach(el => wrapper.appendChild(el));
    })
    
    
    function shuffle(arr) {
        let newArr = arr.slice();
        let i = newArr.length;
        let r;
        let temp;
        while (i--) {
            r = Math.floor(Math.random() * (i + 1));
    
            temp = newArr[i];
            newArr[i] = newArr[r];
            newArr[r] = temp;
        }
    
        return newArr;
    }


    <div class="wrapper">
    
    <div class="image">
    el1
    <img src="https://trikky.ru/wp-content/blogs.dir/1/files/2020/04/22/1564314090_3.jpg">
    </div>
    <div class="image">
    el2
    <img src="https://trikky.ru/wp-content/blogs.dir/1/files/2020/04/22/1564314090_3.jpg">
    </div>
    <div class="image">
    el3
    <img src="https://trikky.ru/wp-content/blogs.dir/1/files/2020/04/22/1564314090_3.jpg">
    </div>
    <div class="image">
    el4
    <img src="https://trikky.ru/wp-content/blogs.dir/1/files/2020/04/22/1564314090_3.jpg">
    </div>
    <div class="image">
    el5
    <img src="https://trikky.ru/wp-content/blogs.dir/1/files/2020/04/22/1564314090_3.jpg">
    </div>
    <div class="image">
    el6
    <img src="https://trikky.ru/wp-content/blogs.dir/1/files/2020/04/22/1564314090_3.jpg">
    </div>
    <div class="image">
    el7
    <img src="https://trikky.ru/wp-content/blogs.dir/1/files/2020/04/22/1564314090_3.jpg">
    </div>
    <div class="image">
    el8
    <img src="https://trikky.ru/wp-content/blogs.dir/1/files/2020/04/22/1564314090_3.jpg">
    </div>
    <div class="image">
    el9
    <img src="https://trikky.ru/wp-content/blogs.dir/1/files/2020/04/22/1564314090_3.jpg">
    </div>
    <div class="image">
    el10
    <img src="https://trikky.ru/wp-content/blogs.dir/1/files/2020/04/22/1564314090_3.jpg">
    </div>
    
    </div>
    
    <button class="shuffle">
     shuffle
    </button>


    https://jsfiddle.net/mvye5r2q/23/
    Ответ написан
    Комментировать
  • Как Добавлять/изменять методы прототипа?

    @Sun_Day
    Дело вкуса. Не могу сказать, что это очень плохой подход, но и используют его нечасто.

    Проблемы, которые могут возникнуть - это конфликт имен с другими либами, которые используют такой подход.
    Это пожалуй самая существенная проблема. Касается встроенных, стандартных объектов js'a, типа string, array и т.п.

    С другой стороны, это может быть очень удобно в некоторых кейсах. Вызывать вашу кастомную функцию на строке или массиве. Допустим, для своих нужд вы сделали более производительный метод, или очень полезный лично в вашем проекте, который отсутствует в стандартах.

    В общем, у стандартных объектов прототип я бы наверное трогать не стал, а у кастомных- почему бы и нет. Только в таком случае весь код нужно писать в прототипном стиле, без синтаксического сахарка.
    Ответ написан
    4 комментария
  • Как воспользоваться функцией closest()?

    @Sun_Day
    Использовал полифилл.
    Этот
    if (!Element.prototype.matches) {
      Element.prototype.matches =
        Element.prototype.msMatchesSelector ||
        Element.prototype.webkitMatchesSelector;
    }
    
    if (!Element.prototype.closest) {
      Element.prototype.closest = function(s) {
        var el = this;
    
        do {
          if (Element.prototype.matches.call(el, s)) return el;
          el = el.parentElement || el.parentNode;
        } while (el !== null && el.nodeType === 1);
        return null;
      };
    }


    Или

    (function(ELEMENT) {
        ELEMENT.matches = ELEMENT.matches || ELEMENT.mozMatchesSelector || ELEMENT.msMatchesSelector || ELEMENT.oMatchesSelector || ELEMENT.webkitMatchesSelector;
        ELEMENT.closest = ELEMENT.closest || function closest(selector) {
            if (!this) return null;
            if (this.matches(selector)) return this;
            if (!this.parentElement) {return null}
            else return this.parentElement.closest(selector)
          };
    }(Element.prototype));


    https://developer.mozilla.org/en-US/docs/Web/API/E...
    https://developer.mozilla.org/ru/docs/Web/API/Elem...
    Ответ написан
    Комментировать
  • Как правильно верстать на ReactJS?

    @Sun_Day
    Все зависит от задач. В реакте важно делать компоненты как можно более мелкими(главное совсем не переусердствовать, хоть это и непросто). Декомпозировать. Это важно особенно с компонентами, которые могут стать переиспользуемыми.

    Сделать темплейты хедера и футера, а в них вкладывать другие еще более мелкие компоненты - вполне оправданно и нормально. Тем более зачастую в этих частях бывает какая-то жаваскриптовая логика.

    То есть, будет вполне норм, если в стартовом компоненте, с которого начинается отрисовка приложения, и начальная логика - это как правило App component, у вас будет:

    const App = () => {
      <Header />
      ... other components
      <Footer />
    }


    В общем говоря, лучше вынести хедеры и футеры по отдельным компонентам, т.к там наверняка впоследствии будет какой-то js код. Плюс, это логично и упорядоченно выглядит.
    Ответ написан
    Комментировать
  • Как изменить placeholder элемента через js?

    @Sun_Day
    const input = document.querySelector(".placeholder");
    
    input.addEventListener("keydown", (e) => {
        const condition = e.target.value.length < 5 ? "new" : "password";
        input.placeholder = condition;
    })


    <input class="placeholder" placeholder="password">

    Но как указали в комментарии - лучше выводить какой-то текст рядом, потому что в плейсхолдере он скрывается введенным текстом. Например:

    const input = document.querySelector(".placeholder");
    const output = document.querySelector(".for-error");
    
    input.addEventListener("input", (e) => {
         const condition = e.target.value.length < 5 ? "the password is too short" : "";
         output.textContent = condition;
    })


    <input class="placeholder" placeholder="password">
    <span class="for-error"></span>


    Ну и поподробнее изучить тему валидации форм.
    click
    Ответ написан
    4 комментария
  • Почему Typescript считает аргумент функции корректным?

    @Sun_Day
    Насколько я помню, это известная проблема в тайпскрипте. Здесь нет такой точности типов на уровне дизайна языка, но то что вы ожидаете есть во Flow.
    Обсуждалось здесь:
    https://github.com/Microsoft/TypeScript/issues/12936
    Почти 5 лет, да, взгляните на количество ишьюс). Все обсуждение не читал, руки не доходят, но вроде подвижки есть.
    Ответ написан
    Комментировать
  • Почему VSCode не видит тип переменной?

    @Sun_Day
    Потому что у переменной repl должен быть явно заданный тип.

    const repl: Type = new REPL.REPLServer();

    возможно это:

    const repl: REPLServer = new REPL.REPLServer();
    Ответ написан
  • Как отключить на IOS (iphone, ipad) ховер при скролле?

    @Sun_Day
    .disable-hover {
      pointer-events: none;
    }


    let timer;
    
    window.addEventListener('scroll', () => {
        clearTimeout(timer);
      
        if (!document.body.classList.contains('disable-hover')) {
            document.body.classList.add('disable-hover')
        }
      
        timer = setTimeout(() => {
            body.classList.remove('disable-hover')
        }, 500);
      
    }, false);
    Ответ написан
    Комментировать
  • Как свойство modul влияет на файл?

    @Sun_Day
    Ну если вы говорите, что это модули, то вы можете использовать export/import между модулями, т.е шарить код среди этих файлов. Плюс у каждого модуля отдельная область видимости.
    На загрузку влияет в том смысле, что такие скрипты автоматически маркируются как defer(можно погуглить).

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

    @Sun_Day
    У чего конкретно? У select или у option?

    У select

    select {
      color: green;
    }
    //
    .personal_form-select_choise {
      color: green;
    }


    У option

    select option[value="1"] {
      color: green
    }
    //
    .personal_form-select_choise option[value="1"] {
      color: green
    }
    
    <option value="1">новый предмет</option>
    Ответ написан
  • Ревью кода. Что можно улучшить в этом коде?

    @Sun_Day
    Честно говоря, это плохой код. Смысла разбираться в нем не имеет, долго объяснять все моменты(все это просто придется переписать под корень). Но все новички в программировании пишут что-то подобное, это нормально.

    Могут отметить несколько вещей:
    1) Нейминг css классов - почитайте про БЭМ, у вас что-то невразумительное. Да и БЭМ тут не нужен, если прям строго взглянуть - у него свои задачи.
    2) Используйте строгое равенство ===
    3) Условия внутри методов просто кошмар. В целом в методах спагетти код по работе с dom. Это так не делается. Нужно декомпозировать логику и писать лаконичный и выразительный код.
    4) Что-то можно было передать через constructor(), при создании экземпляра класса. Зачем это все пихать в сам constructor.

    На счет html, то просто попробуйте сверстать лендинг, лучше поймете что к чему.

    В общем, никуда это не выкладывайте всерьез). Ну и советую использовать тайпскрипт.

    Реакт можно изучать конечно.
    Ответ написан
    Комментировать
  • Как вывести на страницу объект из localStorage, не зная key?

    @Sun_Day
    Возьмите свойство localStorage(в данном случае window.localStorage - это одно и то же).
    И обойдите его циклом, получив все value.
    localstorage
    for (let i = 0; i < localStorage.length; i+= 1) { 
    const key = localStorage.key(i)
    const value = localStorage[key];
    console.log(value);
    }

    Ну и дальше делайте что нужно со списком value'сов и выводите в html.
    Ответ написан
    Комментировать
  • В чем отличие модулей js в браузере (через тэг html) или в nodejs?

    @Sun_Day
    Разные среды разработки, разница в стиле разработки, если коротко.

    Тут все немного запутанно насчет Require и Common.

    Это модульные системы.

    До выхода стандарта ES6, когда в js по сути появилась модульная система из коробки, модули реализовывались в основном с помощью двух стандартов - это CommonJS и AMD.

    CommonJS - это стандарт по модульной системе в js вне браузера, для node.js. В node.js тоже есть встроенная функция require, есть module.exports. Все это реализация стандарта CommonJS.
    Nodejs сейчас es6 модульную систему поддерживает(import/export). То есть, официальный синтаксис джаваскрипта. И если коротко, то с выходом ES6, CommonJS немножко потерял свою былую целесообразность, поскольку появился официальный синтаксис javascript, который это реализовывает. Раньше в js, в рамках официального синтаксиса такого не было.

    AMD - это стандарт, который отпочковался от CommonJS, разработан для асинхронной загрузки модулей. Использует функцию define, которой описывается модуль и require, которой он подключается. Расшифровывается как Асинхронное определение модуля.

    RequireJS - это библиотека для поддержки асинхронных модулей в браузерах. То есть она для браузеров. Это не стандарт. Это реализация стандарта AMD.

    Объяснил как мог, не знаю как еще проще).
    Ответ написан
    Комментировать