• Как сделать поочередное заполнение блоков?

    delphinpro
    @delphinpro
    frontend developer
    w = val * 100 / max; - ширина в процентах, если бы была одна линия.

    Линий 4, то есть на каждую по 25%

    ceil(w / 25) кол-во полностью закрашенных частей
    (w % 25) * 100 / 25 - ширина в процентах частично закрашенной части

    Итого, функция вычисления ширины полоски в каждой части может выглядеть как-то так:

    /**
     *  chapter - номер полоски, от 1 до 4
     *  val - текущее значение
     *  max - максимальное значение
     * Возвращает ширину полоски в процентах
     */
    getWidth(chapter, val, max) {
      const CHAPTERS = 4;
      const p = 100 / CHAPTERS;
      let full = Math.ceil(w / p);
      let w = val * 100 / max;
      if (chapter <= full) return 100;
      if (chapter === full + 1) return (w % p) * 100 / p;
      return 0;
    }


    <div class="chapter-progress"
        :style="{width: getWidth(chapter, property.value, property.maxValue)+'%'}"
    ></div>
    Ответ написан
  • Как в PHPStorm настроить Reformat Code, чтобы расставлялись возвращаемые значения для функций?

    delphinpro
    @delphinpro Куратор тега PhpStorm
    frontend developer
    Вы можете настроить инспекцию на отсутствие возвращаемого типа. Такие функции или методы будут подсвечиваться в редакторе, и шторм может вставить подходящий тип по Alt+Enter. Но автоматом, по сохранению, насколько мне известно он не будет исправлять подобные инспекции. Всё, что может быть исправлено, определяется настройками код-стайла, и там этого нет.

    spoiler
    6560ac487c1b2275320867.png
    Ответ написан
    Комментировать
  • Можно ли как-то изменить печать сайта?

    delphinpro
    @delphinpro Куратор тега Вёрстка
    frontend developer
    В этом же окне доп настройки

    6560726cae8e9823700173.png
    Ответ написан
    Комментировать
  • Обнаружил подозрительный JS код в header.php, в bitrix cms, на что похоже? Анимация?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Судите сами:

    function resize() {
        const el = document.getElementsByClassName('preloader-wrap')[0];
        let scale = 0 < window.innerWidth - window.innerHeight
                    ? window.innerWidth / 2200
                    : window.innerWidth / 800;
        el.style.transform = 'translate(-50%, -50%) scale(' + scale + ')';
    }
    
    function animAdd(selector, className, timeout) {
        const el = document.getElementsByClassName(selector)[0];
        setTimeout(function () {
            el.classList.add(className);
        }, timeout);
    }
    
    function animRem(selector, className, timeout) {
        const el = document.getElementsByClassName(selector)[0];
        setTimeout(function () {
            el.classList.remove(className);
        }, timeout);
    }
    
    function getRandom() {
        return 10 * Math.round((1500 * Math.random() + 500) / 10);
    }
    
    function animBannerAdd() {
        animAdd('preloader-item1', 'active', getRandom());
        animAdd('preloader-item2', 'active', getRandom());
        animAdd('preloader-item3', 'active', getRandom());
        animAdd('preloader-item4', 'active', getRandom());
        animAdd('preloader-item5', 'active', getRandom());
        animAdd('preloader-item6', 'active', getRandom());
        animAdd('preloader-item7', 'active', getRandom());
        animAdd('preloader-item8', 'active', getRandom());
        animAdd('preloader-item9', 'active', getRandom());
        animAdd('preloader-item10', 'active', getRandom());
        animAdd('preloader-item11', 'active', getRandom());
        animAdd('preloader-item12', 'active', getRandom());
        animAdd('preloader-item13', 'active', getRandom());
        animAdd('preloader-item14', 'active', getRandom());
        animAdd('preloader-item15', 'active', getRandom());
        animAdd('preloader-item16', 'active', getRandom());
        animAdd('preloader-item17', 'active', getRandom());
        animAdd('preloader-item18', 'active', getRandom());
        animAdd('preloader-item19', 'active', getRandom());
        animAdd('preloader-item20', 'active', getRandom());
        animAdd('preloader-item21', 'active', getRandom());
        animAdd('preloader-item22', 'active', getRandom());
        animAdd('preloader-item23', 'active', getRandom());
        animAdd('preloader-item24', 'active', getRandom());
        animAdd('preloader-item25', 'active', getRandom());
        animAdd('preloader-item26', 'active', getRandom());
        animAdd('preloader-item27', 'active', getRandom());
        animAdd('preloader-item28', 'active', getRandom());
        animAdd('preloader-item29', 'active', getRandom());
        animAdd('preloader-item30', 'active', getRandom());
        animAdd('preloader-item31', 'active', getRandom());
        animAdd('preloader-item32', 'active', getRandom());
    }
    
    function animBannerRem() {
        animRem('preloader-item1', 'active', 0);
        animRem('preloader-item2', 'active', 0);
        animRem('preloader-item3', 'active', 0);
        animRem('preloader-item4', 'active', 0);
        animRem('preloader-item5', 'active', 0);
        animRem('preloader-item6', 'active', 0);
        animRem('preloader-item7', 'active', 0);
        animRem('preloader-item8', 'active', 0);
        animRem('preloader-item9', 'active', 0);
        animRem('preloader-item10', 'active', 0);
        animRem('preloader-item11', 'active', 0);
        animRem('preloader-item12', 'active', 0);
        animRem('preloader-item13', 'active', 0);
        animRem('preloader-item14', 'active', 0);
        animRem('preloader-item15', 'active', 0);
        animRem('preloader-item16', 'active', 0);
        animRem('preloader-item17', 'active', 0);
        animRem('preloader-item18', 'active', 0);
        animRem('preloader-item19', 'active', 0);
        animRem('preloader-item20', 'active', 0);
        animRem('preloader-item21', 'active', 0);
        animRem('preloader-item22', 'active', 0);
        animRem('preloader-item23', 'active', 0);
        animRem('preloader-item24', 'active', 0);
        animRem('preloader-item25', 'active', 0);
        animRem('preloader-item26', 'active', 0);
        animRem('preloader-item27', 'active', 0);
        animRem('preloader-item28', 'active', 0);
        animRem('preloader-item29', 'active', 0);
        animRem('preloader-item30', 'active', 0);
        animRem('preloader-item31', 'active', 0);
        animRem('preloader-item32', 'active', 0);
    }
    
    document.addEventListener('DOMContentLoaded', function () {
        resize();
    });
    
    window.onresize = function () {
        resize();
    };
    
    console.log(getRandom());
    
    animBannerAdd();
    
    setInterval(function () {
        animBannerRem();
    }, 3000);
    
    setInterval(function () {
        animBannerAdd();
    }, 3000);
    Ответ написан
    2 комментария
  • Как во встроенном обработчике события передать в функцию строку?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    <button class="minibutton aligh-items-center"
            onmouseover="hoverb(this, '/img/blackheartFill.svg');"
            onmouseout="hoverb(this, '/img/blackheart.svg');"
    >
        <img src="/img/blackheart.svg" alt="">
    </button>


    function hoverb(button, img) {
        button.querySelector('img').setAttribute('src', img );
    }
    Ответ написан
    Комментировать
  • Как разделить (визуально) страницу на 4 части: 2 по горизонали, 2 по вертикали?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Ответ написан
    Комментировать
  • Как вытащить переменнную из подключенного JSON в JS?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    function getData() {
      return new Promise(resolve => {
        $.getJSON("https://www.cbr-xml-daily.ru/daily_json.js", function(data) {
            const kyrs = Math.ceil(100 / data.Valute.KZT.Value * data.Valute.EUR.Value).toString().replace(/(\d)(?=(\d{3})+$)/g, '$1 ');
            resolve(kurs);
        });
      })
    }
    
    function func1(kurs) {
      console.log(kurs);
    }
    
    function func2(kurs) {
      console.log(kurs);
    }
    
    async function go() {
      const kurs = await getData();
      $('#euro').html(kyrs);
      func1(kurs);
      func2(kurs);
    }
    
    go();
    Ответ написан
    Комментировать
  • Как сделать полосу вместо точек у слайдера?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    в простейшем случае стилизовать точки как полоски.
    Ползунок будет не скользить, а переключаться, зато просто.

    Если требуется именно ползунок, то делайте его как угодно, а потом связывайте со слайдом посредством событий https://owlcarousel2.github.io/OwlCarousel2/docs/a...
    Ответ написан
    Комментировать
  • Как настроить Laravel для создания простого бекенда?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    роуты почистил и всё.
    Да, часть миддлваров не будут использоваться для апи. Но разве это должно волновать? Лежат себе и лежат на диске. Там и вес-то их до килобайта не дотягивает.

    Есть ли способ сразу получить оптимизированное под написание апи решение?


    Ларка уже оптимизирована. Вам по умолчанию даже пакет для аутентификации по токенам включили. Просто используйте и не парьтесь.
    Ответ написан
    1 комментарий
  • Как объеденить круговой слайдер(диапозон) с полем ввода и кнопками + и -?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    событие update (ну или drug, я в доку не вникал) слайдера - это источник значения при изменении его слайдером. Здесь получаем это значение и вписываем его в input

    метод setValue наоборот устанавливает значение в слайдер

    По событию onchange или oninput на поле ввода вы получаете введенное значение и методом setValue устанавливаете его в слайдер.

    по кнопкам плюс/минус вы не трогаете слайдер. А устанавливаете значение в инпут и триггерите на инпуте событие onchange/oninput (по этому триггеру сработает обновление слайдера).

    то есть у вас почти правильно. только вот эту дичь нужно убрать $input.val = args.value; вообще непонятно, что вы собирались этим сделать.
    Добавить слушатель onchange на инпут
    И немного поправить drug
    Ответ написан
    4 комментария
  • Не получается сделать чтобы форма регистрации передавала данные в БД, как правильно это сделать и что заменить?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Снова регистрация... https://habr.com/ru/articles/665602/
    Ответ написан
    Комментировать
  • Параметры функцийв JS?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    /**
     * @param {string} text Входная строка, номер карты
     * @param {number} count Количество видимых цифр в конце
     */
    function getHiddenCard(text, count = 4) {
      if (text.length <= count) return text; // нечего скрывать звездами
    
      const visibleDigits = text.slice(-count); // Четыре последние цифры
      const stars = '*'.repeat(text.length - count); // Подсчет нужного кол-ва звезд
    
      return stars + visibleDigits;
    }
    Ответ написан
    Комментировать
  • Как запустить отправку формы?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Я эту библиотеку не использовал, так навскидку:

    Вот у вас прописана отправка сразу по добавлении:

    resumable.on('fileAdded', function (file) { // trigger when file picked
                        showProgress();
                        resumable.upload() // to actually start uploading.
                    });


    Уберите этот код, и отправляйте по клику

    button.addEventListener('click', ()=>{
                        showProgress();
                        resumable.upload() // to actually start uploading.
    });
    Ответ написан
    Комментировать
  • Зачем нужен интерфейс, если есть абстрактный класс?

    delphinpro
    @delphinpro
    frontend developer
    Класс может реализовать множество интерфейсов, но унаследовать только один абстрактный класс. Ну по крайней мере в определенных языках, про все не скажу.
    Ответ написан
    1 комментарий
  • Всегда ли значение margin-[x] полученное через getComputedStyle представлено в единице px?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Всегда в логических пикселях.
    Не только margin, а вообще все размерные свойства (padding, width, height и тд)
    Ответ написан
    3 комментария
  • Веб-сервер дома на виндовс для работы с python?

    delphinpro
    @delphinpro
    frontend developer
    Сначала установите локальный сервер (будет работать только на вашем компьютере) - Wamp, Xampp, OSPanel.
    Потом сделайте сайт.
    А уже потом думайте, как его опубликовать в сети интернет для всех.
    Ответ написан
    Комментировать
  • Как приручить событие "keydown" в браузере?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    1. вешаем на keydown одноразовый обработчик {once: true}
    2. в обработчике на keyup повторяем навешивание одноразового хэндлера на keydown


    Будет срабатывать один раз при нажатии.

    А вообще, если требуется одноразовое срабатывание за одно нажатие, то почему не использовать keypress?
    Ответ написан
    1 комментарий
  • Как перенести сайт на laravel?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    опен сервер пятой версии?
    два варианта
    1. выбрать ручное управление доменами, и прописать нужную директорию для сайта (/public)
    2. оставить автоматическое, но добавить в список автонаходимых директорий public

    в шестой версии просто для домена указывается нужный путь к public

    ps htaces трогать не нужно, если он стандартный для ларки и вы туда ничего сами не дописывали
    Ответ написан
    1 комментарий
  • Как всерстать вот так изображения?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Правки в вашем примере

    img{
        width:100%;
    +   height: 100%;
    +   object-fit: cover;
    }
    
    .img{
        width:700px;
        margin:auto;
        display: grid;
    -   grid-template-columns: repeat(3, 1fr);
    +   grid-template-columns: 2fr 3fr;
        grid-row-gap: 10px;
        grid-column-gap:20px;
    }
    
    .img div:nth-child(2){
    -   grid-column-start: 2;
    -   grid-column-end: 4;
    -   grid-row-start: 1;
    -   grid-row-end:3;
    +   grid-row: span 2;
    }
    Ответ написан
    1 комментарий