• Что означает +function($)?

    mudrenokanton
    @mudrenokanton
    frontend dev
    Для того чтобы это не было объявлением функции, а ее вызовом.
    Там наверно еще в конце есть (), +function($) {}()

    ps: а на самом деле это сделано для того, чтобы сэкономить пару байт на символе и не писать (function($) {})()
    Ответ написан
    Комментировать
  • Есть ли еще спрос на front-end разработчиков "вау" сайтов?

    mudrenokanton
    @mudrenokanton
    frontend dev
    где можно найти компании, жаждущих таких специалистов?

    Амстердам, Калифорния, в меньшей степени Лондон, Берлин, Париж.

    А так лучше сами делайте или удаленно спасайте тех кто взял заказ и обосрался т.к. все лагает, а починить никто не может. Никто(или почти никто) вам нормально не заплатит в СНГ-ом офисе студии, даже если проекты по $200к+ на потоке.
    Ответ написан
  • Какой инструмент выбрать для веб-анимаций, с простым API и высокой производительностью?

    mudrenokanton
    @mudrenokanton
    frontend dev
    GSAP это золотой стандарт. Ничего там сложного, даже шпаргалки есть по нему:
    https://ihatetomatoes.net/wp-content/uploads/2016/...

    А так надо от задачи плясать. Может подойти и anime, и mo.js, или даже velocity.
    Но это от случая, GSAP же подойдет везде.
    Даже если интегрироваться с THREE и подобными canvas-based, то его Timeline очень удобен.
    Ответ написан
    1 комментарий
  • Стоит ли использовать React Components Libraries?

    mudrenokanton
    @mudrenokanton
    frontend dev
    Еще как стоит. Вы офигеете чето свое создавать, если предполагается широкий спектр функционала. А заказчик офигеет за это платить, если предварительно не было договорено и выделено **** часов на разработку кита.
    + Не так часто у нас в СНГ(а может и не только у нас) удается найти JS/React разработчика, который владеет CSS/SCSS на достаточном уровне для такой задачи.
    Лично я пользуюсь AntD и счастлив.
    MaterialUI тоже ничо, но только новая, со старой и инлайновыми стилями мне не по пути)

    ps:
    Если захотите делать свой кит, начните с разработки мультиселекта с контекстным поиском и таблицы с одновременно горизонтальным и вертикальным скроллом. А потом рекомендую сделать модалки (модалки в модалках поверх раскрытых селектов не забудьте потестить) и приступать к элементам формы с валидациями и т.п.) Кнопки и другие мелочи всегда успеете =)
    Ответ написан
    3 комментария
  • Когда использовать методы в конструкторе, а когда - в прототипе?

    mudrenokanton
    @mudrenokanton
    frontend dev
    Чисто технически, в конструктор могут прилететь свойства, которые будут участвовать в создании методов(методы в своем замыкании будут хранить их значения), а в инстанс самого объекта они не попадут, потому и методы прототипа к ним достучаться не смогут. И еще одно отличие в shadowing-e, если у инстанса есть метод и с таким же названем есть еще и метод в прототипе, то вызовется метод инстанса.

    А на деле, если есть цепочка наследования, то наследуются от .prototype через Object.create(), т.е. методы контруктора унаследованы не будут. Удобно, если мы этого не хотим (но так тоже бывает редко, потому что обычно вызывается родительский конструктор).
    Ответ написан
    Комментировать
  • Как правильно распарсить массив?

    mudrenokanton
    @mudrenokanton
    frontend dev
    const some = { areas: mh.map((el) => ({ id: el.id, title: el.title })) }
    Ответ написан
    Комментировать
  • Как обновить state в этом случае?

    mudrenokanton
    @mudrenokanton
    frontend dev
    this.setState((prevState) => {
      const prevArr = prevState.listObjects.slice();
      let el = prevArr.shift();
      el = { ...el, prop: 'value' }
      return ({ listObjects: [el, ...prevArr] });
    })


    upd. но лучше так:
    const changeListObjValue = (index, newValue) => {
      this.setState((prevState) => {
        const newArr = prevState.listObjects.slice();
        newArr.splice(index, 1, newValue)
        return ({ listObjects: newArr });
      })
    }
    Ответ написан
    2 комментария
  • Каким образом и через что можно морфировать svg вслед за курсором мыши?

    mudrenokanton
    @mudrenokanton
    frontend dev
    Обычно такие штуки пишут на canvas, многовато математики в 1 фрейм для dom объектов.
    Но в целом все плагины так и должны работать. Они принимают shape до и после. От вас требуется вычислить в нужный промежуток времени только shape после. По факту при движении мышкой вы тяните за 1-3 ближайшие вершины, можете их координаты и менять.
    Я бы наверно 1 раз посчитал shape в максимальной растяжке строго по оси, а потом бы вращал его за курсором с нужным растяжением.
    Ответ написан
    Комментировать
  • Как решить проблему с концентрацией?

    mudrenokanton
    @mudrenokanton
    frontend dev
    Чето тут многие пишут страшилки про болезни и докторов, а при этом сами говорят, что они не доктора и не разбираются.

    Я лично не вижу ничего криминального. Обычная привычка, зависимость. Мы склонны подсаживаться на "новизну". Можете почитать статейку на эту тему, если с английским дружите:
    https://medium.com/the-spike/the-crimes-against-do...

    В ней прикольно пишут и объясняют тот факт, почему люди подсаживаются не только на то, что вызывает приятные ощущения(типа винишка или созерцания сисек красивых барышень), а и на новости про то, что в Зимбабве кого-то изнасиловали. Люди сидят, смотрят эти новости, говорят "фу-фу, ну как можно" или "бедные жертвы, айайай", а на самом деле дофаминово кайфуют. Извращенство, но что поделать.

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

    По поводу отвыкания от телефонов и соц-сетей, если проблема локальная. Я особо никогда не зависал, но моментами бывало, что ловил себя на мысли, что надо бы меньше времени на них тратить. Что я делал? Брал бумажку и перед тем как зайти в fb или instagram — четко писал на этой бумажке "что я собираюсь сделать" | "зачем я хочу это сделать" | "что в итоге сделал" в 3 колонки. В начале выходило чето в стиле "зайти в fb" | "спросить человека X про встречу" | "тупил 30 минут скроля ленту". Со временем 2 и 3 колонка начали все меньше отличаться, а потом мне стало таааааак влом это записывать, что мне казалось проще тупо не заходить. Буквально 1-2 недели максимум такой терапии надо, а то и несколько дней.

    Правильно писал Стивен Кови про момент, между раздражителем и реакцией. Чем четче этот момент будешь чувствовать — тем прикольней жизнь будет.
    Ответ написан
    3 комментария
  • Правильно ли хранить абсолютно все состояния в Redux?

    mudrenokanton
    @mudrenokanton
    frontend dev
    Если есть взаимодействие между компонентами — лучше через actions. Тем более, что вы будете видеть все изменения в Redux devTools.

    Что касается локальных, типа управляемых форм, то тут надо быть мазохистом чтобы каждое действие через store и редюсеры гонять.
    Ответ написан
    Комментировать
  • Как идет наследование?

    mudrenokanton
    @mudrenokanton
    frontend dev
    При создании объекта — вызывается функция конструктор, у которой this привязана к этому объекту.

    Прототип (он же свойство .__proto__) этого, ново-созданного, объекта — объект, который является свойством .prototype у функции конструктора.

    Когда делаем такого рода наследование, мы не можем тупо присвоить одному свойству другое, т.к. объект передается по ссылке и мы в итоге сделаем еще одну ссылку на тот-же объект. И при изменении Rabbit.prototype будет меняться Animal.prototype. А нам такого счастья не надо, нам надо чтобы Rabbit.prototype.jump было только свойством(в цепочке прототипов) объектов Rabbit, потому нам надо привязать его к другому(новому) объекту, для этого нам и нужен Object.create().

    + мы в функции конструкторе Rabbit можем не дублировать создание свойств у Animal, а просто его вызвать с привязкой к текущему объекту: Animal.call(this, name)
    Ответ написан
    Комментировать
  • Как решить проблему с CSS анимацией кнопки в Firefox?

    mudrenokanton
    @mudrenokanton
    frontend dev
    preserve-3d в мозиле багнутое

    upd:
    пока вы писали я правильную схему нарулил =)
    https://codepen.io/just-a-training/pen/MowRJa?edit...
    у контейнера перспектива, у линка preserve, дальше трансформы

    В этой статье описана основная боль, надо бы мне еще раз ее прочесть (и вам тоже советую, это мало кто знает и понимает)
    Ответ написан
    5 комментариев
  • Какой JavaScript фреймворк выбрать?

    mudrenokanton
    @mudrenokanton
    frontend dev
    Посвятите 1-2 дня для того, чтобы познакомится с основным синтаксисом и идеологией этих фреймворков и выберете тот, что вам лично ближе. Самый верняковый путь, чем слушать мнение рандомных людей.

    Если вам интересны перспективы, то в аутсорсовых фирмах — подавляющее большинство Angular проектов, в продуктовых по миру чаще встречается React, а комьюнити сейчас больше всего хвалит и хайпит Vue.
    Ответ написан
    Комментировать
  • Как сверстать такую чудо юду на бутсрапе?

    mudrenokanton
    @mudrenokanton
    frontend dev
    Вообще можно многими вариантами. Самый простой и красивый это clip-path. Но если кто-то ноет про кросс-баузерность, то можно просто сделать skew блока, а потом обратный skew в самом блоке:
    https://codepen.io/just-a-training/pen/KqKJNR
    Ответ написан
    6 комментариев
  • Как теряется контекст в классовых компонентах, и как помогает bind?

    mudrenokanton
    @mudrenokanton
    frontend dev
    Внутри функции может потеряться контекст в зависимости от того, как она вызвана.
    // вызов
    obj.foo();
    // и вызов
    const bar =  obj.foo;
    bar();
    // оба вызывают foo, но во втором случае this внутри foo будет привязан не к obj, 
    // а к глобальному объекту

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

    mudrenokanton
    @mudrenokanton
    frontend dev
    Да, проблема не в JS. Можете поменять, например
    background-color: red;
    на
    background-image: linear-gradient(to left, red, red)

    https://jsfiddle.net/x2zgzpr3/14/
    Ответ написан
    2 комментария
  • Как правильно сделать initialState в redux?

    mudrenokanton
    @mudrenokanton
    frontend dev
    Вы когда создаете reducer, можете задать любой initialState. В доке пример:
    import { VisibilityFilters } from './actions'
    
    const initialState = {
      visibilityFilter: VisibilityFilters.SHOW_ALL,
      todos: []
    }
    
    function todoApp(state, action) {
      if (typeof state === 'undefined') {
        return initialState
      }
    
      // For now, don't handle any actions
      // and just return the state given to us.
      return state
    }

    Тут вместо пустого массива в вашем случае будет заполненный.
    Ответ написан
    22 комментария
  • Как вынести градиент для SVG в CSS?

    mudrenokanton
    @mudrenokanton
    frontend dev
    Вам не нужен CSS. Можно сделать так:
    <svg>
        <defs>
            <linearGradient id="gradient">
                <stop offset="0%" style="stop-color: deepPink"></stop>
                <stop offset="100%" style="stop-color: #009966"></stop>
            </linearGradient>
        </defs>
     
        <rect stroke="#eee" stroke-width="5" fill="url(#gradient)"></rect>
    </svg>
    Ответ написан
    5 комментариев
  • Где найти или как сделать индикатор громкости в приложении?

    mudrenokanton
    @mudrenokanton
    frontend dev
    Ваш кейс вообще очень простой. Рисуете все в SVG, потом у шкалы меняете stroke-dashoffset:
    https://css-tricks.com/svg-line-animation-works/
    Ответ написан
    Комментировать