• Почему частицы на canvas сходят с ума от прозрачного фона?

    ProjectSoft
    @ProjectSoft
    Front-end && Back-end разработчик
    //background fill
    context.clearRect(0,0,displayWidth,displayHeight);
    context.fillStyle = "rgba(0,0,0,0)";
    context.fillRect(0,0,displayWidth,displayHeight);

    И будет счастье
    Ответ написан
    1 комментарий
  • Почему vue watch не работает?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Во-первых, событие должно быть input, а не change. Во-вторых, нативные события, и события, которые генерирует jquery (на них vue, очевидно, плевать) - это не одно и то же. Так что

    $('#dateStart').trigger('change');

    следует заменить на что-то вроде

    this.dispatchEvent(new Event('input'));

    UPD. Пара примеров того, как это может выглядеть:

    раз - с использованием jquery-ui datepicker
    два - с использованием air-datepicker.
    Ответ написан
    4 комментария
  • Как переместить в конец массива элементы имеющие определённое свойство?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    arr.sort((a, b) => a.pos ? 1 : (b.pos ? -1 : 0))
    Ответ написан
    Комментировать
  • Что это за метод сжатия?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    p[...] - это номера цветов из общей палитры, индексы от 0 до 3.
    Дальше идут сами цвета точек.
    Цифра 0..3 - индекс цвета в палитре спрайта
    x - начало повторений. Сразу после него идет цифра индекса цвета, дальше до запятой - количество повторений (x011, - повторить 0 одиннадцать раз).
    "p[0,2,5,8]x022,1111x010,x18,x07,x110,x05,x17,33111000x18,32311000x19,3311003333x111,001133x110,001113x110,011213x110,011113x110,011113x110,0011233x15,x35,00222331133322200222203333002222"
    Получаем строку из 256 символов
    0000000000000000000000111100000000001111111100000001111111111000001111111331110001111111132311000111111111331100333311111111111001133111111111100111311111111110112131111111111011113111111111101111311111111110011233111113333300222331133322200222203333002222

    Разбиваем на 16 подстрок
    0000000000000000
    0000001111000000
    0000111111110000
    0001111111111000
    0011111113311100
    0111111113231100
    0111111111331100
    3333111111111110
    0113311111111110
    0111311111111110
    1121311111111110
    1111311111111110
    1111311111111110
    0112331111133333
    0022233113332220
    0222203333002222

    Заменяем индексы цветами из палитры, получаем жучка yj-zin3n79g0u0dgucf6teanlfm.png
    P.S. Если массив индексов палитры не указан, то используется полная базовая палитра. Для палитры спрайта до 10 цветов включительно индексы кодируются одной цифрой (0-9), до 100 цветов - двумя цифрами (00-99), и т.д.
    Ответ написан
    3 комментария
  • Почему даже максимальная ставка не влияет на выигрыш крупной суммы?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Вы серьезно?

    Если даже на условные фишки слоты все сжирают есть ли вообще смысл играть (плюсовать) их?

    конечно нету, это математически доказано миллион раз. При длинной истории игр казино всегда в плюсе, а Вы в проигрыше. Это вложено в логику любого автомата (слотов или еще чего-то).
    Единственной вариант выиграть - это сыграть 1 раз в жизни, чудом сорвать джекпот и больше никогда не играть. И то это маловероятный сценарий. А учитывая человеческую психологию - невозможный.
    Чем больше игр тем больше теория вероятности и статистика будут забирать у Вас деньги. Везение может сработать в 1 игре. При 1000 игр уже везение не при чем, уже работает математика и она работает в данном случае против Вас. Так устроен мир казино. В этом суть.

    Возьмите кубик, допустим только 5 и 6 это Ваш выигрыш, а 1,2,3,4 - выигрыш казино. Бросьте 5 раз и возможно вы будете в плюсе. Бросьте 1000 раз и я готов гарантировать, что в плюсе будет казино. А онлайн слоты имеет логику, намного более печальную для Вас, чем этот кубик.

    Математику учат сейчас в школе, Маск планирует на Марс лететь, создаются нейронные сети. Откуда в этом мире берутся люди, которые пытаются выиграть у казино?
    Ответ написан
    Комментировать
  • Проблема c CORS запросом, как исправить?

    bingo347
    @bingo347
    Crazy on performance...
    заголовки вида Access-Control-Allow-* - это заголовки ответа, их должен отправлять сервер в ответ на запрос
    притом если запрос OPTIONS (браузер шлет сам перед основным запросом для проверки прав), то сервер должен так же ответить этими заголовками, но со статусом 204 и без тела
    Ответ написан
    2 комментария
  • Web3.js 1.0.0-beta.34 - как правильно отправлять токены с кошелька на кошелёк?

    yartem
    @yartem Автор вопроса
    frontend newbie
    Сам спросил, сам и отвечу.

    Решение, как выяснилось, лежало немного в иной плоскости. Вот код:

    const
      tokenAddress = '0x58....e4',
      fromAddress = '0xaA....46c',
      privateKey = '0x09........79',
      toAddress = '0xE3....f7',
      decimals = web3.utils.toBN(0),
      amount = web3.utils.toBN(5),
      value = amount.mul(web3.utils.toBN(10).pow(decimals)), // value = 5 = 5*(10^0)
      sender = web3.eth.accounts.privateKeyToAccount(privateKey),
      token = abi => new web3.eth.Contract(abi, tokenAddress).methods;
    
    axios.get('https://api.etherscan.io/api?module=contract&action=getabi&address=' + tokenAddress)
    .then(answer => {
      const
        abi = JSON.parse(answer.data.result),
        data = token(abi)["transfer"](toAddress, value).encodeABI(),
        tx = {
          gas: '2000000',
          from: fromAddress,
          to: tokenAddress,
          data,
        };
    
      token(abi).name().call().then(console.log);
      token(abi).symbol().call().then(console.log);
      token(abi).balanceOf(fromAddress).call().then(console.log);
    
      sender.signTransaction(tx)
      .then(signedTx => {
        web3.eth.sendSignedTransaction(signedTx.rawTransaction)
        .then(console.log);
      });
    });


    Судя по всему, проблема была в том, что транзакция не была подписана. Так как перевод токенов, это не отправка какого-нибудь сообщения в духе "Hello world!", а вполне себе переброска реальных бабок, такая транзакция не может осуществляться с кошелька хозяина без его ведома. В статье How to send ERC20 token with Web3.js@1.0.0, ссылку на которую я приводил выше, и которой я руководствовался в процессе написания первоначального варианта кода, этот момент как-то странно обойдён автором. Если придирчиво изучить демо-сайт, ссылку на него Hideyoshi Moriya приводит в конце своей статьи, можно заметить, что автор использует MetaMask API, что многое объясняет, но о чём ни слова нет в самой статье. Судя по всему, MetaMask позволяет решить вопрос авторизации своими методами.

    Я же продолжил свои исследования. Усиленно копая интернет, через достаточно небольшой промежуток времени, наткнулся на аналогичный моему вопрос человека с ником Dmitry на русском сегменте StackOverflow.com: Как отправить токены ethereum с помощью web3.js. Цитировать его я не буду, но вот ответ человека с ником user3655581 привлёк моё внимание:

    Для того, чтобы перевести токены - нужно вызвать соответствующий метод контракта токена, предварительно его подписав. Примерный код:
    const sender = web3.eth.accounts.privateKeyToAccount(privateKeyFrom);
    const tokenContract = new web3.eth.Contract(abi, contractAddress);
    const data = tokenContract.methods["transfer"](toAddress, amount).encodeABI();
    const tx = { 
      gas: '2000000',
      from: fromAddress,
      to: contractAddress,      
      data,
    };
    const signedTx = await sender.signTransaction(tx);
    const result = await web3.eth
      .sendSignedTransaction(signedTx.rawTransaction);



    Руководствуясь приведённым кодом, я соорудил решение для своей задачи. Токены в количестве 5 штук успешно переправлены с одного кошелька на другой.

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

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    одинаковые по высоте пилим флексами
    левый и верхний бордеры имитируем псевдоэлементами

    собственно самое сложное сделать блюр по внешней кромке картинки, но с этим как раз у вас проблемы нет =))
    Сейчас попробую накидать примерчик

    Ответ написан
    2 комментария
  • Как организовать async/await совместро с axios и FileReader?

    rockon404
    @rockon404
    Frontend Developer
    async enableCropper() {
      await this.preview({});
      console.log('Все готово');
    },
    
    async preview(params) {
      const { data } = await axios.post('/api/images/preview', params, {
        responseType: 'blob',
      });
      await this.loadImage(data);
    },
    
    loadImage(src) {
      return new Promise(resolve => {
        const reader = new window.FileReader();
        reader.readAsDataURL(src); 
        reader.onload = () => {
          this.$refs.cropper.replace(reader.result);
          console.log('Картинка готова');
          resolve();
        };
      }); 
    },

    И хорошо бы обработку ошибок добавить.
    Ответ написан
    Комментировать
  • Замена onmousemove?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Добавляем pointer-events: none; элементу .bigImage - всё окей, никаких скачков.
    Ответ написан
    Комментировать
  • Как достать PromiseStatus из fetch?

    lavezzi1
    @lavezzi1
    Вам не нужны статусы. Единственное что вам нужно, это узнать что промис разрезолвился. Просто дождитесь этого через await.

    Вариант с async/await.
    export default {
        data(){
            return {
                blockBtn: false
            }
        },
        methods: {
            async isWait(url) {
                this.blockBtn = true;
                let dosomething = await fetch(url)
                
                this.blockBtn = false;
            }
        }
    }


    Вариант с then
    export default {
        data(){
            return {
                blockBtn: false
            }
        },
        methods: {
            isWait(url) {
                this.blockBtn = true;
                let dosomething = fetch(url).then(() => {
                     this.blockBtn = false;
                });
            }
        }
    }


    Живой пример: https://jsfiddle.net/ujnpzqgf/

    Ответ написан
    1 комментарий
  • Можно ли в DevTools увидеть все работающие ивент листенеры?

    Может это?
    5bf6bef393857475572717.jpeg
    Ответ написан
    Комментировать
  • Почему действия в цикле работают через раз?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Потому что вы удаляете элементы из перебираемого массива.
    Например:
    Массив [a, b, c, d]
    Цикл 0: (i==0) удалить element[a], удалить a. В итоге массив [b, c, d]. Увеличить i на 1.
    Цикл 1: (i==1) i указывает на c. Удалить element[c], удалить c. В итоге массив [b, d]. i++
    Цикл 2: не выполняется, т.к. i >= length
    Итог: b и d мы просто пропустили.
    Ответ написан
    1 комментарий
  • Если ограничения на использования метода render как стрелочной функции в React?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    немного подумав решил заменить конструкцию

    Не надо так делать. Никогда не используйте для функций свойства класса, если можно обойтись методом.
    Пример:
    Array(1000)].map(_ => <SomeComponent />);
    Если в компоненте SomeComponent render прописан методом, то для каждого экземпляра он будет вызываться из прототипа. Если же свойством, то вы вместе с экземплярами создадите 1000 копий одной и той же функции.
    Ответ написан
    Комментировать
  • Как деструктуризировать state в React ESLint?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    const { id } = this.state;

    Еще из примера не понятно зачем вы задаете данные массивом и делаете деструктуризацию. Такая структура тяжелей читается и поддерживается, а создание массива и деструктуризация, в этом случае, лишняя операция. Правильней будет так:
    const { id } = this.state;
    const newOrder = { id, ... };
    const orders = [];
    Ответ написан
    1 комментарий
  • Как я могу внести изменения в файл библиотеки в папке node_modules?

    RubaXa
    @RubaXa
    1. Скорей всего вы правите не тот файл, ибо часто есть как исходники, так и собранная версия, поэтому нужно посмотреть на точку входа в `package.json` -> `main`
    2. Возможно у вас кеш в браузере, а его можно отключит в DevTools -> Network -> Disable cache
    3. Вместо того, чтобы залезать в node_modules, вы может в DevTools -> Sources просто поставить брейкпоинт в нужном месте и выводить нужную инфу в Watch, или даже отредактировать файл (да-да, прямо в хроме)
    Ответ написан
    Комментировать
  • Как пробросить ошибку вниз?

    rockon404
    @rockon404
    Frontend Developer
    Запись вида:
    try {
      throw new Error('Ooops!');
    } catch (e) {
      throw e;
    }

    Равносильна:
    throw new Error('Ooops!');

    Ошибку в блоке catch надо не инициировать, а обрабатывать:

    try {
      throw new Error('Ooops!');
    } catch (e) {
      alert(e);  // например, выводим ошибку в alert
    }
    Ответ написан
    2 комментария
  • Как построить такой график?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Получилось вот, что

    а если другие цифры поставить, совсем иначе получится. Вот ведь какая штука графики. Их вид зависит от того по каким данным их строишь.

    Рекомендую закинуть код на https://jsfiddle.net или https://codepen.io
    Ответ написан
    9 комментариев
  • Как заполнить весь экран кружками?

    @SeaBreeze876
    Front-end разработчик
    Вы рисуете на 1 больше, ошибка в цикле
    for (let i = 0; i < max; i++) {
    Ответ написан
    Комментировать