• Как реализовать такую расстановку блоков на FlexBox CSS?

    Eridani
    @Eridani
    Мимо проходил
    Это column count
    .blog__block {
        column-count:3;
    }
    
    .blog__item {
        width:100%;
      margin-bottom: 30px;
        border-radius: 4px;
        box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.10);
    }
    Ответ написан
    4 комментария
  • Какие есть сервисы контроля удаленных сотрудников?

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

    lazalu68
    @lazalu68
    Salmon
    Насколько я понял, в window.navigator об этом никакой инфы нету. А раз нету, то придётся по каким-то конкретным признакам определять запрещает ли браузер отслеживание, например через печенюхи. В любом случае, из найденных материалов мне показалось, что опция "Prevent cross site tracking" просто врубает ITP 2.x, о котором в интернетах достаточно инфы. Один из способов который я вижу основывается на том, что фрейм обращающийся к подконтрольному вам ресурсу сообщает родительскому документу получилось ли у него достучаться до каких-то важных печенюх или нет.

    ЗЫ: либо я нашел решение, либо одно из трёх - ITP 2.0 вводит метод document.hasStorageAccess, соответственно можно проверять какое значение возвращает этот метод и уже от этого плясать. Вот тут чувак накатал небольшой скрипт для подобной проверки. Проверил на восьмом ифоне этот метод, он возвращает false если опция "Prevent cross site tracking" выключена, и true - если включена.

    Если "Prevent cross site tracking" это действительно только об ITP 2.0 и вдобавок я нигде не ошибаюсь в рассуждениях, то функция проверки может выглядеть как-то так:

    async function ITPIsActive() {
    	if (document.hasStorageAccess && document.requestStorageAccess) {
            const access = await new Promise(function(res, rej) {
                document.hasStorageAccess().then(res, rej).catch(rej);
            });
    
            return access;
        } else {
            return false;
        }
    }
    Ответ написан
    1 комментарий
  • Как реализовать автоматическое соединение Websocket при падении сервера?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    1. setInterval вообще не нужен
    2. this.socket = new WebSocket - на этой строке в строгом режиме будет ошибка (this === undefined), а в нестрогом (почему его нет?) создаст socket в глобальном объекте (что плохо)
    3. После создания соединения, события нужно снова навесить

    У меня лично вот так вот все организовано:
    const url = `${location.protocol === 'http:' ? 'ws:' : 'wss:'}//${location.host}/`;
    
    var socket;
    var connected = false;
    
    typeof WebSocket !== 'undefined' && function connect() {
        socket = new WebSocket(url);
        socket.onmessage = onMessage;
        socket.onopen = () => connected = true;
        socket.onerror = err => {
            console.error(err);
            socket.onclose = null;
            connected = false;
            socket.close();
            connect();
        };
        socket.onclose = event => {
            console.info(`WebSocket closed with code ${event.code}! ${event.reason}`);
            connected = false;
            if(event.wasClean) return;
            connect();
        };
    }();
    
    function onMessage(event) {
        //...
    }
    Ответ написан
    1 комментарий
  • Как отправить форму обратной связи?

    @matios
    Technical Team Lead
    Сделайте
    var_dump($_POST); exit;

    Посмотрите, какие данные приходят с формы. Затем инспектируйте остальные переменные. Так и найдете в чем причина
    Ответ написан
    Комментировать
  • Как работает рекурсия?

    Stalker_RED
    @Stalker_RED
    Я добавил пару строчек для наглядности (#6 и #10)
    https://jsfiddle.net/sa544rer/1/

    Так понятнее?
    Ответ написан
    3 комментария
  • Как работает this?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ох...

    Для начала нам стоит прояснить что в javascript "методы" это обычные функции, которые просто привязаны к объекту. Если не вдаваться в подробности работы интерпритатора, вы можете спокойно вынести содержимое конструктора и заменить this на экземпляр объекта.

    Если совсем упростить - в javascript нет "методов", у объектов могут быть только свойства. "Методы" реализуются присваиванием функции (обычно анонимной) к свойству объекта.

    Теперь про this. this - это контекст вызова. Это "волшебная" переменная указывает на контекст, в котором мы вызвали какую-либо функцию. Она никак не фиксируется, и мы можем крутить и вертеть ей как хотим.

    По умолчанию она указывает на "владельца" функции. Тот объект, в контексте которого мы вызвали функцию.

    function foo() {console.log(this);}
    
    function MyObject() {
        this.foo = foo;
    }
    
    var hashMap = {
        foo: foo
    };
    
    var obj = {};
    var instance = new MyObject();
    obj.bar = instance.foo;  // мы можем даже красть методы
    
    foo(); // выведет window, если для браузера и мы вызывали в глобальном контексте
    instance.foo(); // выведет instance так как в контексте этого объекта мы это дело и вызывали
    hashMap.foo(); // выведет hashMap по той же причине
    obj.bar(); // выведет obj опять же потому что мы вызывали функцию в этом контексте
    foo.call('my own context') //мы можем задать свой контекст


    Зачем присваивается this и используется в дальнейшем?


    У функции есть своя область видимости. Ей доступны все переменные/идентификаторы которые определены в ее области видимости и выше в плодь до глобальной. То есть наши обработчики событий будут всегда видеть переменные объявленные в конструкторе. Причем именно то что было на момент вызова конструктора (то есть сохраняется во времени даже после завершения работы функции). Это к слову является типичной проблемой мемориликов, так как иногда люди забывают почистить за собой ссылки на объекты.

    У нас конечно есть еще функция bind, которая позволяет явно зафиксировать контекст, но иногда удобнее так.

    Именно за счет областей видимости функций в javascript мы достигаем инкапсуляции, скрываля приватные штуки внутри нашей области видимости и выплевывая наружу только то, что нужно. Самая настоящая инкапсуляция, модификаторы доступа в этом плане - просто кастыли (хотя для восприятия они проще).
    Ответ написан
    12 комментариев
  • Как найти самое большое число в подмасиве?

    Stalker_RED
    @Stalker_RED
    Это вообще в одну строку делается.
    var input = [
      [-1,-3,-2],
      [1,3,5],
      [2,6,3],
      [7,3,3]
    ];
    
    var result = input.map(a=>a.reduce((a, b)=>Math.max(a, b))) // all magic here
    
    console.log(result) // [-1,5,6,7]


    UPD: То-же самое, но подробнее:
    var result = input.map(function(subArray) { 
      return subArray.reduce(function(prev, current){
        return Math.max(prev, current);
      })
    })

    array.map() - делает какие-то вычисления с каждым элементом массива, в нашем случае со "строкой" из двумерного массива. Возвращает новый массив с результатами.

    array.reduce() - проходит по всем элементам массива, возвращает один элемент.
    Например
    [1,2,3,4,50].reduce((prev, current)=>prev + current)
    вернет сумму всех элементов.

    Math.max() - сравнивает два числа, возвращает то что побольше.

    => - стрелочная функция.
    Позволяет записать короткие анонимные функции еще короче.
    В основном за счет экономии на словах function и return. Если у функции только один аргумент на входе, или только одно действие, то можно еще и скобочки выбросить.

    var x = function (element) {
      return element.width
    }
    превращается в
    var x = element => element.width

    UPD2: как подсказывает Panya, можно написать еще короче:
    var result = input.map(a=>Math.max.apply(null,a))
    Ответ написан
  • Как работает конструктор наследования?

    In4in
    @In4in
    °•× JavaScript Developer ^_^ ו°
    В prototype по умолчанию всегда находится свойство constructor, указывающее на функцию-конструктор.


    function Rabbit(){}
    console.log( Rabbit.prototype.constructor ); //Rabbit


    Автор кода выше переопределяет prototype целиком:
    Square.prototype = new Rectangle();
    console.log( Square.prototype.constructor ) // Rectangle


    Собственно, далее он присваивает constructor'у правильное значение (Square).

    Делается это не для работоспособности кода, а во избежание ошибок в дальнейшем, ведь обращаясь к constructor мы ожидаем получить ссылку на функцию-конструктор объекта, а ни как не его прототипа.
    Ответ написан
    1 комментарий
  • Физика шара в арканоиде?

    @patch1
    Пинка дай когда скорость снижается Addforce - cсылка
    скорость шара в 2d пространстве - ccылка

    еще варианты
    1. Массу убрать на 0 (не помню можно ли)
    2. Linear Drag - Коэффициент натяжения влияющий на смещение позиции. ставим в 1. 0 - эт отключения
    3. Angular Drag -Коэффициент натяжения влияющий на вращение объекта (думаю с помощью этого можно без остановочно крутить объект вокруг своей оси))).
    4. Edit>Project setting> Physic2d - Gravity X,Y = 0; а поумолчанию стоит -9.81 (хотя тог да бы объект не останавливался а падал) хначит наверно отключено
    Ответ написан
    Комментировать
  • Существует ли элегантный алгоритм для поворота 4×4 матрицы на 90 градусов?

    @Aves
    var a = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
    var b = [];
    
    for (var y=0; y<4; y++) {
        for (var x=0; x<4; x++) {
            b[x*4+y] = a[y*4+x];
        }
    }
    Ответ написан
    Комментировать