• Стилизация json на странице html. Как сделать?

    @sewaca
    const data = [ /* Array with JSON data */ ];
    document.body.innerHTML = data.map((item)=>`
      <i class="fa fa-user-circle" aria-hidden="true"></i> ${item.name} 
      <i class="fa fa-envelope" aria-hidden="true"></i> ${item.email}
      `)
      .join(" ");

    В data пишите свой массив
    Если надо менять не весь контент на странице, а только в каком-то месте, то вместо document.body пишите селектор на этот элемент
    Ответ написан
    3 комментария
  • Как наложить несколько прозрачных png-изображений, чтобы они показывались по отдельности при наведении курсора?

    @sewaca
    В идеале бы посмотреть демку, а то не оч понятно почему надписи должны быть картинкой
    В общем случае я бы просто юзал position: absolute на надписях и менял opacity при наведении. Не понимаю с чем возникла проблема
    Ответ написан
    Комментировать
  • Как создать анимированную интерактивную схему?

    @sewaca
    Как сейчас реализована анимация:
    У вас есть 50 срендереных картинок анимации вроде этой и каждые n милисекунд меняется номер картинки
    13.webp
    В таком виде реализации вы ограничены по плавности анимации именно количеством таких кадров и в целом больше ничем

    Как можно сделать лучше:
    Вариант 1.
    Анимация станет плавнее, если просто будете вопроизводить ее в 60 fps.
    То есть просто поменяете код для смены аттрибута src на что-то такое:
    let i = 0;
    let a = setInterval(()=>{
        document.querySelector("body > div.page > div.places > div > div > div > div.places-map-wrap > div > div > img").src= "/assets/images/home_sequence/" + i + ".webp";
        i = (i + 1) % 49;
    }, 1000/60) // 1000 / 60 означает что вы хотите вопроизводить 60 кадров в секунду

    Минусы: из-зи увеличения fps таким способом увеличится и скорости анимации

    Вариант 2.
    Cделать не 50 типовых картинок, а 100 и менять их способом из варианта 1 c фпс в два раза выше чем сейчас
    Тогда удастся сохранить и скорость анимации и сделать плавнее
    Минусы: много работы (придется переделывать раскадровку всей анимации) + упадет скорость сайта из-за того что придется загружать в два раза больше картинок

    Вариант 3.
    ВОЗМОЖНО самый удачный, но ТОЧНО самый сложный и требующий много сил. Используйте вместо картинок вида
    13.webp
    canvas и библиотеку three.js (тут уже как-то самому придется разбираться, советов дать не могу, потому что сам недостаточно работал с этой библиотекой
    Минусы: вполне вероятно, что из-за того что на сайт добавится +1 библиотека, а также 3д модельки скорость сайта будет не сильно отличаться от второго варианта.
    Плюс по сравнению с вариантом № 2: Вы получите полную свободу в управлении этой анимацией. Сможете когда надо замедлить, когда надо ускорить без лишней работы
    В целом скорость сайта не должна стать большой проблемой, потому что это не первый экран и даже не самое важное в карте. Соответственно можно что-то подгрузить попозже, что-то пораньше, что-то вообще не подгружать если слабый инет
    Иными словами, загружать эту анимацию только после того как загрузили все остальное

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

    @sewaca
    JS выполняется на стороне клиента. Он не меняет файлы на сервере (потому что насколько я понял из вашего вопроса, вам нужно именно это)
    Если хотите менять классы в самом html файле то в vs code выделите слово element, нажпмите shift+ctrl+l вроде и напишите новый класс
    Ну либо используйте сборщики + шаблонизаторы, чтобы сильно не страдать когда надо что-то поменять в коде
    Ответ написан
    Комментировать
  • Как добавить недостающие открывающиеся html теги?

    @sewaca
    Это стандартная задача на правильную скобочную последовательность, просто немного в другом виде
    Примеров и решений в интернете уйма, изучайте
    Но вообще, лучше бы разобраться и нормально копировать эти строки, без недостающих открывающихся тегов))
    (ссылка на объяснение задачи на максимале https://e-maxx.ru/algo/bracket_sequences)
    Ответ написан
    Комментировать
  • В стандартном редакторе блоки разделены а в сайте нет. как настроит?

    @sewaca
    Если используется grid то пропишите для контейнера gap: 5px и padding 5px
    Если используете table, то пропишите для контейнера border-spacing: 5px
    Ответ написан
    Комментировать
  • Как это сверстать?

    @sewaca
    Верстка это всегда два этапа: разбить на блоки, затем написать стили
    Вот разбиение на блоки (как я его вижу):
    64c97313e2db3324720313.png
    При написании стилей используйте flexbox'ы и grid'ы (в этом случае можно обойтись только флексами)
    Если есть вопрос по какому-то конкретному моменту в стилях (например правый нижний угол сообщения) - пишите в коменты к ответу место по которому вопрос
    P.S. и еще, пожалуйста, не используйте для текста div. Для этого больше подходят теги p, span и т.п. Лучше привыкать использовать правильные теги, это сильно поможет в семантической верстке потом
    Ответ написан
  • Как обрезать кнопку, чтобы осталась граница?

    @sewaca
    Если честно, я бы лишний раз не шаманил и просто сделал бы рамочку с помощью before и background-image (экспортнуть рамочку в svg)
    Вариант Mors Clamor с polygon в целом правильнее, но конкретно в случае border'a, насколько я помню, он просто обрежет рамку. В общем попробуйте сначала его вариант.
    Если не получится, можете использовать мой вариант :)
    Ответ написан
    Комментировать
  • Как получить первоначальное значение dataset по клику?

    @sewaca
    // ... предыдущий код
    btnSwap.addEventListener('click', function() {
        btnSwap.dataset.storage = (btnSwap.dataset.storage === 'local' ? 'api' : 'local');
        console.log(btnSwap.dataset.storage);
        console.log(btnSwap.dataset);
      })
    // ... следующий код
    Ответ написан
    1 комментарий
  • Почему локально видео не показывается?

    @sewaca
    В чем проблема
    На самом деле проблема (скорее особенность) внутри плагина, который вы используете для загрузки видео с ютуба.
    При загрузке видео ваша ссылка меняется на ссылку вида: //www.youtube.com/...
    Первые две черточки перед www (//) говорят о том, что нужно сохранить протокол общения таким, каким он был у вашей страницы.
    То есть если вы открыли страницу по http, то и запрос получится http://www.youtube.com/..., а если открыли локально (file://) то и запрос получается file://www.youtube.com/...

    Решения:
    Плохое: лезть в код плагина и менять // на https://
    Хорошее:
    использовать live server или его аналоги для запуска проекта. Тогда страница откроется на адресе, к примеру, http://localhost:3000/ и проблем не будет

    Надеюсь смог помочь
    Ответ написан
    Комментировать
  • Как изменить код?

    @sewaca
    Ответ написан
    Комментировать
  • Как выполнить поиск по странице сайта?

    @sewaca
    Для начала давайте поймем а что именно вам нужно
    Если задача кликнуть, значит элемент, очевидно, должен быть кликабельным
    Значит это либо button, либо input[type="button"], либо тег a

    Код который вы привели в пример (назвав его 1 вариантом) выбирает все теги на странице, а затем проверяет каждый из них. Это значит, что кнопка, прописанная в html как <button> <span>текст</span> </button> будет кликнута (а точнее, будет вызван обработчик клика по ней) как минимум 2 раза (первый, когда кликаем на тег span, второй когда жмем на тег button)
    Отсюда и возникает баг с многоразовым нажатием

    Если задача и правда сводится к тому, что нужно проверить все элементы, и, если они содержат какой-то текст, кликнуть на них, то логичнее использовать код, который и выбирает только кликабельные элементы. Примерно так:
    const items = document.querySelectorAll("input[type=button], button, a");
    
    items.forEach((item)=>{
          if (item.textContent.includes("Your Text Here")){
                console.log("success"); 
                items[i].click();
          }
    });

    Это не только поможет избежать багов, но и существенно ускорит ваш код

    P.S.: Любые операции с DOM-деревом заметно замедляют ваш код. Старайтесь как можно реже использовать подход с проверкой содержимого всех DOM-элементов (как в этом кейсе).
    Ответ написан
    Комментировать
  • Не находит элемент в блоке?

    @sewaca
    Скорее всего проблема с тем, что DOM-дерево еще не обновилось на тот момент
    Операции с дом очень тяжелые, поэтому выполняются в последнюю очередь
    Можете попробовать запихнуть цикл в
    setTimeout(()=>{
    for ... 
    }, 0)

    Это сделает из вашего цикло (микрозадачи) макрозадачу
    Ответ написан
    Комментировать
  • PDF сохраняется на машину вместо передачи на mail Что не так?

    @sewaca
    wp_handle_upload - сохраняет файл в соответствующий каталог wp-content/uploads/.... и возращает массив вида:

    Array
    (
    	[file] => sites/wptest.ru/www/wp-content/uploads/2014/06/Daft-Punk-Something-About-Us.mp3
    	[url] => http://wptest.ru/wp-content/uploads/2014/06/Daft-Punk-Something-About-Us.mp3
    	[type] => audio/mpeg
    )


    В wp_mail под переменной attachments нужно передавать массив с абсолютным путем к файлу, то есть $movefile['file'];
    Чтобы файл не сохранялся на сервере - можно удалять его wp_delete_file( $movefile['file'] ) после отправки письма
    Ответ написан
  • Как сделать такой эффект, представленный ниже?

    @sewaca
    внизу почти(посередине сайта :D )
    Просто когда убираешь показывание блоков, надо делать
    window.scroll(0, document.querySelector(css путь к этому блоку).offsetTop );
    Ответ написан
    Комментировать
  • Как задать высоту 100% в CSS Grid?

    @sewaca
    Можно ссылку на конкретный пример? не очень понятно что именно требовалось сделать
    Вообще, исходя из услышанного, лучше просто написать height: 100%
    Ответ написан
  • Как сделать так, чтобы ссылка внутри активного li меняла цвет?

    @sewaca
    Чтобы не прописывать !important - увеличьте вложенность стилей для активного a
    В вашем случае, надо прописывать правила для
    .facilities-block .sidebar li.clicked a
    Ответ написан
  • Как заказчик будет вносить правки на сайт?

    @sewaca
    Правки разного характера есть
    Если подразумевается перетаскивание блоков верстки заказчиком то тогда надо смотреть в сторону конструкторов уже
    Если просто правки текста, картинок и тп (содержимого короче), то тогда стоит делать натяжку на cms
    К коду никаких особенностей нет, за исключением того, что зачастую для всех страниц css в один файл объединяется
    В остальном, просто добавляется php и так и происходит натяжка
    Ответ написан
  • С помощью чего можно сделать эффект как на фото?

    @sewaca
    Просто padding добавляются вверх вниз, а у контейнера, который содержит все три карточки display: flex; align-items: center;
    Для карточки прописываешь при наведении добавление padding-top padding-bottom и цвета другие и все
    Ответ написан
    Комментировать
  • Элементы flex-box сжимаются даже с заданной шириной. Это нормальное поведение?

    @sewaca
    flex-shrink: 0; и никаких min-width не надо уже
    Ответ написан
    Комментировать