• Как добавить условие в простой скрипт?

    lina666
    @lina666
    Изучаю веб ЯП.
    Передайте аргумент resultType === XPathResult.BOOLEAN_TYPE
    document.evaluate(
      xpathExpression,
      contextNode,
      namespaceResolver,
      resultType,
      result
    );


    дальше просто проверка c помощью if
    Ответ написан
    1 комментарий
  • Адаптивный PWA select. Как это реализовать?

    lina666
    @lina666
    Изучаю веб ЯП.
    Готовы решения, можно искать в интернете, вероятно оно будет в каких то готовых UI библиотеках - Vuetify, Bootstrap и т.д или можете поискать просто в интернете готовый код.
    Встроенного функционала, который позволит сделать такое в браузерах нет, т.е прийдется реализовывать такой селектор самому при помощи html/css/js
    Ответ написан
    Комментировать
  • Как поменять картинки при клике на кнопку?

    lina666
    @lina666
    Изучаю веб ЯП.
    В твоем коде в целом все не совсем корректно, вот готовый пример, рабочего, с комментами, попробуй разобрать его, думаю станет понятно и сможешь свой поправить.
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .row {
                display: flex;
                flex-wrap: wrap;
            }
            .picture-block {
                flex: 0 0 50%;
            }
            .picture-block__img {
                width: 300px;
                height: 400px;
            }
            .button.--active {
                background: green;
            }
    
    
        </style>
    </head>
    <body>
    <div class="row">
        <div class="picture-block">
            <img
                    class="picture-block__img"
                    src="https://klike.net/uploads/posts/2021-12/1638345229_2.jpg"
                    alt=""
            >
            <div class="picture-block__control">
                <button
                        type="button"
                        class="button --active"
                        data-img="https://klike.net/uploads/posts/2021-12/1638345229_2.jpg"
                >
                    left
                </button>
                <button
                        type="button"
                        class="button"
                        data-img="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQwGZ9e0gkF00Cew42Qi2FjfZAUd7QNDp-6V0IjU-FR&s"
                >
                    right
                </button>
            </div>
        </div>
        <div class="picture-block">
            <img
                    class="picture-block__img"
                    src="https://klike.net/uploads/posts/2021-12/1638345229_2.jpg"
                    alt=""
            >
            <div class="picture-block__control">
                <button
                        type="button"
                        class="button --active"
                        data-img="https://klike.net/uploads/posts/2021-12/1638345229_2.jpg"
                >
                    left
                </button>
                <button
                        type="button"
                        class="button"
                        data-img="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQwGZ9e0gkF00Cew42Qi2FjfZAUd7QNDp-6V0IjU-FR&s"
                >
                    right
                </button>
            </div>
        </div>
    </div>
    
    
    
    <script>
    // Находим все кнопки
    document.querySelectorAll('.button')
        // Проходимся циклом по каждой
        .forEach(btn => {
            // Навешиваем на каждую слушатель, что бы при клике на кнопку срабатывала данная функция, можно повесить на родительский элемент и слушать клики внутри него
            // что бы не искать родителя в changeImage где то на это есть статья в learnJS, найди сам, я забыл как называется влом искать.  
            btn.addEventListener('click', changeImage)
        })
    function changeImage(event) {
        // Если кнопка активна и показывается это изображение, ничего не делаем, можно накинуть более конкретных проверок, например сравнивать url и т.д, но мне лень.
        if (event.target.classList.contains('--active')) {
            return
        }
        // event.target - кнопка по которой нажали - я как правило использую this и делаю все через ООП, но сейчас мне лень
    
        // Корневой элемент
        const parent = event.target.closest('.picture-block')
        // Все кнопки управления
        const controlButtons = parent.querySelectorAll('.button')
        // Блок с картинкой для замены
        const imgNode = parent.querySelector('.picture-block__img')
    
        if (event.target.dataset.img) {
            // подставим картинки
            imgNode.src = event.target.dataset.img
            // Удалим подсветку со всех кнопок
            controlButtons.forEach(i => i.classList.remove('--active'))
            // Добавим на нашу кнопку активный класс, для подсветки
            event.target.classList.add('--active')
        } else {
            console.error('img not found')
        }
    
    
    }
    </script>
    </body>
    </html>
    Ответ написан
    Комментировать
  • Насколько полезно писать велосипеды?

    lina666
    @lina666
    Изучаю веб ЯП.
    Я зашел в разработку на стеке Vue и его окружения Nuxt, Vuex и т.п.
    Начал копать в суть вещей только уже когда понял, что могу что то делать, но уперса в то, что не понимаю как некоторые вещи работают под капотом и это мешает мне делать задачи => недает расти по ЗП.

    В общем есть смысл ковырять, если чувствуешь, что стоишь на месте из за того, что не знаешь как реализовать что либо если делаешь шаг влево\вправо.
    Ответ написан
    Комментировать
  • Function Expression и Function Declaration, в чем отличия применения?

    lina666
    @lina666
    Изучаю веб ЯП.
    В основном когда у нас функция например должна быть динамична от какой то переменной и еще паре специфичных моментов, где то это даже есть на литкод.
    Главное понимать разницу в их работе, например, что если это fn Declaration то, ее можно вызвать до объявления и т.п
    const fn
    fn = foo === bar ? function() { alert(yes) } : function() { alert(no) }
    Ответ написан
    Комментировать
  • Как сделать чтобы скрипт window.screen.width срабатывал без перезагрузки страницы?

    lina666
    @lina666
    Изучаю веб ЯП.
    addEventListener("resize", (event) => {
    ... код который нужно выполнить при изменении размеров окна браузера.
    });
    Ответ написан
    Комментировать
  • Как задать цвет заднего фона для каждой колонки?

    lina666
    @lina666
    Изучаю веб ЯП.
    Как вариант вижу только разбивать все это дело на отдельные блоки. Судя по спецификации, в CSS нет определенного св-ва.
    Еще как вариант можно конечно, сделать блок абсолютный внутри с 3мя блоками, с такими же нужными отступами, но это так, костыльное решение в голове.
    Сколько верстаю, 1й раз вижу это св-во.

    UPD костыльный вариант работает ))).
    Еще как вариант, можно написать JS который будет разбивать текст на N кол-во блоков и распределять между 3мя дивами, это выйдет довольно быстро.
    Ответ написан
    2 комментария
  • Получить значение select который появится после загрузки страницы?

    lina666
    @lina666
    Изучаю веб ЯП.
    const selector = document.querySelector('#select')
    function fn() {
     ...  какой то твой код 
    
    // Удалить слушатель
    selector.removeEventListener('change', fn)
    }
    
    // Повесить слушатель который вызовет функцию при изменении
    selector.addEventListener('change', fn)

    Возможно не совсем точно, но таким способом можно будет выполнить какую то фунцию когда прийдет 1е значение, а потом убрать этот слушатель.

    Как это делать на jquery не знаю, не использовал его, но там примерно так же, только методы немного другие.
    Ответ написан
    Комментировать
  • Как отредактировать актуальные данные в localStorage по конкретному id в объекте?

    lina666
    @lina666
    Изучаю веб ЯП.
    // Получаем массив с объектами
    const arr = localeStorage.getItem('foo')
    // Ищем нужный объект по id
    const item = arr.find(i => i.id === 1) // если работаем с объектами, помним, что мы получаем ссылку на объект
    // Если находим, меняем какое то значение 
    if (item) item.key = 123123
    // Записываем массив с измененными данными в localeStorage
    localeStorage.setItem('foo', arr)
    Ответ написан
    4 комментария
  • Почему переменная не копирует ссылку на объект?

    lina666
    @lina666
    Изучаю веб ЯП.
    В 1ом варианте ты в объекте изменяешь св-во name
    Во 2ом варианте ты присваиваешь переменной новую ссылку на объект т.к создаешь новый и присваиваешь его переменной.
    Ответ написан
    Комментировать
  • Поддерживают ли сайты даркнета (.onion) React, Vue и PHP?

    lina666
    @lina666
    Изучаю веб ЯП.
    В целом у многих может быть отключен javaScript => работать какой нибудь фреймворк там не будет от слова со всем, следовательно vue, react, jQuery и любой js фреймворк отпадают.
    Думаю стоит этот момент обсудить детали с заказчиком, готовы ли они поддерживать пользователей с отключенным js, если да. Делаете без фреймворков :)

    Что будет собирать страницу на бекенде совершенное не важно, там работает все. Так что в целом на laravel + шаблонизатор можно будет сделать неплохой маркетплейс.

    UPD
    Хотя с другой стороны, как тогда делать чат, если не будет js => если все будет на одном сайте, то думаю можно будет и фреймворки юзать.
    Ответ написан
  • Приемы рендера компонентов вместо плейсхолдеров внутри строки во Vue?

    lina666
    @lina666
    Изучаю веб ЯП.
    В теории можно сделать что то такое

    <div v-html="serverString" class="container">
    После чего в mounted
    const placeholders = document.querySelector(placeholder)
    placeholderComponent.mount(placholder)


    В общем все тоже самое, как мы инициализируем Vue приложение изначально.

    Не уверен что данный подход сработает, но пока в голове только такой вариант крутится, если получится, желательно постарайтесь избавится от v-html из за возможности XSS атак.
    Ответ написан
    Комментировать
  • Как сделать, чтобы при нажатии на input submit не возвращало на начало страницы?

    lina666
    @lina666
    Изучаю веб ЯП.
    Если я правильно понял, то у тебя обычная стандартная форма, следовательно после отправки формы, у тебе идет перезагрузка страницы, можно решить если отправлять форму при помощи JS.
    const button = document.querySelector('кнопка в форме')
    button.addEventListener('click', function(event) {
     event.preventDefault()
     // код для отправки формы. 
    })
    Ответ написан
    Комментировать
  • Кто знает решение?

    lina666
    @lina666
    Изучаю веб ЯП.
    Хм, если я правильно все понял то задача простейшая.
    const Person = function (startName) {
      let name = ''
    
      const getName = function () {
        return name
      }
    
      const setName = function (val) {
        name = val
      }
    
      return {
        setName, getName
      }
    }; // modify this function
    
    const personModule = Person()
    personModule.setName('Kotaro')
    console.log(personModule.getName())
    Ответ написан
    1 комментарий
  • Почему не вызывается функция из подключенного скрипта?

    lina666
    @lina666
    Изучаю веб ЯП.
    попробуй так
    fucntion click() {
        let AboutMe = document.getElementById("AboutMe");
        if (AboutMe.getAttribute('class') == 'mainbarBUTTONS')
        AboutMe.setAttribute('class', 'mainbarBUTTONSpressed');
        else if (AboutMe.getAttribute('class') == 'mainbarBUTTONSpressed')
        AboutMe.setAttribute('class', 'mainbarBUTTONS');
    }
    Ответ написан
  • Как запустить Swiper на Nuxt (Vue) без компонента под Vue?

    lina666
    @lina666
    Изучаю веб ЯП.
    Да так же как и на ванильном JS, в компоненте в хуке mount работай как указано в доке.
    Если у тебя ssr то можешь делать проверку, что бы код выполнялся только у клиента if (process.client) кажется.
    const swiperContainer = this.$el.querySelector('swiper')
    const swiper = new Swiper(swiperContainer, {
      speed: 400,
      spaceBetween: 100,
    });


    Компонент vue это в целом просто обычная обертка и ничего более, можешь для своего проекта самостоятельно сделать какую тебе нужно.
    Ответ написан
    Комментировать
  • Как передать объект в класс js?

    lina666
    @lina666
    Изучаю веб ЯП.
    Класс может наследоваться от класса
    class Person {
      say() { console.log('person') }
    }
    
    class Man exntend Person {}
    
    new Man().say() // person
    Ответ написан
    Комментировать
  • Как выполнять итерацию по каждому клику?

    lina666
    @lina666
    Изучаю веб ЯП.
    1. Зачем было оборачивать все еще в 1 функцию
    2. Там цикл совсем не нужен внутри другой функции.
    3. Можешь использовать style и добавлять туда % нужный в width, если нужны классы можно сделать 4 класса и добавлять их, используя так же счетчик который будет пополняться на 1 после каждого вызова, т.е кликнули 3 раза.
    Сначала count = 1 поставили класс element.classList.add('line-active' + count

    Вот рабочий пример

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
    </head>
    <body>
      <div class="level">
        <div class="line">5%</div>
      </div>
      <button class="btn"></button>
    </body>
    </html>
    
    <code lang="css">
    .level {
      width: 100%;
      height: 50px;
      background: #eee;
    }
    .line {
      width: 10%;
      height: 50px;
      background: #ccc;
      display: flex;
      align-items: center;
      justify-content: center;
      transition: 0.3s;
    }
    
    .line.active1 {
        transition: 0.3s;
        width: 25%;
    }
    .btn {
      width: 10%;
      height: 20px;
      background: red;
      margin-top: 15px;
    }
    </code>


    let levelFull = document.querySelector('.line');
        let levelBtn = document.querySelector('.btn');
    let startPercent = 5
    
    function progressActive() {
        startPercent = startPercent + 25
        if (startPercent > 100) startPercent = 100
        levelFull.style.width = startPercent + '%'
        levelFull.textContent = startPercent + ' %'
     }
    
    levelBtn.addEventListener('click', progressActive);
    Ответ написан
    1 комментарий
  • Как сделать горизонтальную прокрутку как на мобильном устройстве?

    lina666
    @lina666
    Изучаю веб ЯП.
    Можешь отслеживать зажатие мыши над элементом. После чего читать движение влево вправо и на это же расстояние двигать скролл

    document.getElementById('block').mousemove = function(e) {
        if (e.which == 1) {} // Нажата левая кнопка мыши
        if (e.which == 2) {} // Нажато колёсико мыши
        if (e.which == 3) {} // Нажата правая кнопка мыши
    }


    В целом можешь между срабатываниями считать разницу в координатах и менять значение у елемента element.scrollLeft

    Я бы так сделал, но не знаю на сколько это нужно, скорее всего пользователь просто не поймет, что там нужно скролить, если ему это никак не обозначить + рушится опыт пользователя т.к я не видел, что бы где то на десктопе делали скролл вбок при помощи мыши (не считая слайдеров)
    Ответ написан
    1 комментарий
  • Как правильно сделать проверку со второго слова?

    lina666
    @lina666
    Изучаю веб ЯП.
    У тебя не совсем верная логика в js
    1. Ты инициализируешь cities внутри функции которую вызываешь при нажатии на кнопку => после выполнения функции просто теряешь данные.
    2. var желательно не использовать в новом js, можно но он не так явно работает из за приколов с областью видимости и инициализацией, лучше использовать let или const.
    3. Было близко, в своем коде ты получаешь последнее слово из массива cities, нужно так же по аналогии получить из него последнюю букву (пример в коде)
    let cities = [];
    
    function myGame() {
        const input = document.getElementById('input_city');
        const output = document.getElementById('output_city');
    
       //Если массив пустой добавим 1е слово без всяких проверок. 
      if (!cities.length) {
        console.log('Верно идем дальше');
            cities.push(input.value);
            input.value = '' 
        console.log(cities)
        return
      }
      const lastCity = cities[cities.length - 1];
      const lastLetter = lastCity[lastCity.length - 1];
    
      const firstLetter = input.value.substr(0, 1); // первая буква слова
    
        if (lastLetter.toLowerCase() === firstLetter.toLowerCase()) {
            console.log('Верно идем дальше');
            cities.push(input.value);
            input.value = ''   
        } else {
          console.log('Херня, давай сначала.')
        }
        console.log(cities);
    }
    Ответ написан
    2 комментария