Задать вопрос
  • Как во Vue использовать querySelectorAll?

    delphinpro
    @delphinpro
    frontend developer
    Возможно и бывают какие-то задачи, в которых такой доступ к DOM был бы оправданным.
    Но в целом это неправильно.

    У вас есть список проектов

    data: {
      projects: [ ... ]
    }


    Вот и выводите его в шаблонах

    <div class="project" v-for="p in projects">
      <div class="project__pin">{{ p.pin }}</div>
    </div>
    Ответ написан
    Комментировать
  • Возможно ли закрыть файл, открытый через include?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Невозможно закрыть файлы "открытый" функцией (конструкцией) include, потому что эта функция не открывает файл.

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

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    <div class="grid">
      <img src="">
      <img src="">
      <img src="">
      <img src="">
    </div>


    .grid {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      grid-template-rows: repeat(2, 1fr);
      gap: 1rem;
    }
    
    .grid img:nth-child(1),
    .grid img:nth-child(2) {
      grid-row: span 2;
    }
    Ответ написан
    Комментировать
  • Почему неправильно работает обработчик события click?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Переменная без let/const создается в глобальном объекте.
    Она одна, глобальная, и в ней в результате сохраняется одна последняя карточка

    Решение:

    - cardInnerWrapper = document.createElement('div')
    + let cardInnerWrapper = document.createElement('div')
    Ответ написан
    Комментировать
  • Как сверстать такой заголовок?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    &__span-1 {
        display: flex;
        gap: 1em; /* добавить промежуток между флекс-ячейками */


    Но там не нужен флекс. Вообще ничего не надо. Просто для &__span-2 добавить другой цвет и иконку. Вы слишком перемудрили.
    Ответ написан
    1 комментарий
  • Почему не удаеться получить доступ к свойству объекта ajax?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    потому что вы строку получили.

    Вам нужно либо самостоятельно распарсить ее в объект JSON.parse()
    Либо предоставить это jquery

    $.ajax({
        type: 'post',
        dataType: 'json', // Тип возвращаемых  данных
        url: name + '/' + id,


    В этом случае в success jquery вам передаст уже готовый объект
    Ответ написан
    1 комментарий
  • Как работать с точными числами в js, decamal?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    tofixed, умножение на 100 и деление. округление все это не подходит.


    А у вас нет других вариантов. В javascript только один числовой тип данных - Number.
    Остается только оперировать денежными величинами в их минимальной целочисленной "разрядности" (копейка, цент и т.д.). В основном все валюты делятся либо на 100 "копеек", либо на 1000, либо вообще не делятся. Привязку к делителю делать через название валюты.
    Вот насчет крипты я хз, как с ней работать.
    Ответ написан
  • Как сделать поочередное заполнение блоков?

    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 комментария
  • Параметры функцийв 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.
    });
    Ответ написан
    Комментировать