• Как убрать меню бургер при нажатии на контент сайта?

    FinGanapre
    @FinGanapre
    Создайте за меню прозрачный div на весь экран и обработайте на нём клик. При желании, можно задавать ему какой-либо цвет если потребуется в дальнейшем затемнять всё, кроме меню, когда оно открыто.
    Ответ написан
  • Как запускать событие только во время открытия меню?

    FinGanapre
    @FinGanapre
    https://developer.mozilla.org/en-US/docs/Web/API/M...

    Небольшой пример:

    <div class="class1 class2">some elem</div>
    <button class="btn">toggle</button>


    window.onload = e => {
      // получаем элементы
      const $div = document.querySelector('.class1')
      const $btn = document.querySelector('.btn')
      
      // функция, переключающая класс ( нужна для демонстрации )
      const toggle = e => $div.classList.toggle('class2')
      
      // функция, которая будет выполняться при изменении атрибутов у $div
      const obsCallback = ( ml, ob ) => {
        // за место вывода в консоль после проверки на существование класса подставляем нужные функции
        ml[0].target.classList.contains('class2') ? console.log(true) : console.log(false)
      }
      
      // создание обсервера и передача нашей функции
      const observer = new MutationObserver(obsCallback)
      
      // опции (за чем будем следить)
      const observerOptions = {
        childList: false,
        attributes: true,
        subtree: false
      }
      
      // начинаем наблюдать
      observer.observe($div, observerOptions)
      
      // просто повесил событие на кнопку чтобы менять класс у $div
      $btn.addEventListener('click', toggle)
    }
    Ответ написан
    2 комментария
  • Как по всему документу скрыть значения которые имеют undefined?

    FinGanapre
    @FinGanapre
    Грустно, что так вышло, но это уже другая история:)

    Какая структура у JSON который приходит на клиент для вывода?
    Можно отфильтровать данные перед выводом на стороне клиента и работать с уже "чистыми".

    Например так:
    const serverData = [
      {
        answ1: 'text 1',
        answ2: 'text 2',
        answ3: undefined
      },
      {
        answ1: undefined,
        answ2: 'text 2',
        answ3: undefined
      }
    ]
    
    const clearData = serverData
      .map( item => Object.values( item ) )
      .filter( item => item !== undefined )
    
    console.log(clearData)
    Ответ написан
    Комментировать
  • Значение const брать из id, а не задавать?

    FinGanapre
    @FinGanapre
    <textarea id="text">some text inside</textarea>

    window.onload = e => {
      // получить элемент по id
      const textarea = document.getElementById( 'text' )
    
      // получить текущее значение
      console.log( textarea.value )
      
      // установить новое значение
      textarea.value = 'new textarea text'
    }
    Ответ написан
    Комментировать
  • Как преобразовать массив с 3 индекса?

    FinGanapre
    @FinGanapre
    А почему не while?

    const arr = [1,2,3,4,5,6]
    let num = 10
    let index = 3
    
    while ( num > 0 ) {
      if ( !arr[index] ) {
        index = 0
      }
      
      arr[index] += 1
    	
      index++
      num--
    }
    
    console.log( arr )
    Ответ написан
    2 комментария
  • Как добавить кнопке функцию удаление строки из таблицы (таблица на js)?

    FinGanapre
    @FinGanapre
    Если не думать о производительности, то примерно так. С вашим кодом очень сложно работать. Разделите логику на вывод шаблона и функцию, которая будет прослушивать события (некий контроллер) и запускать нужные функции ( удаление, редактирование и т.д. ). Я не выводил таблицу целиком при первом рендеринге, можно добавить это. Обычно такие задачи решают добавив шаблонизатор (JSX к примеру) и описывая всё через ООП. Либо сразу взять удобный фреймворк для фронта, если на проекте много таких задач.

    <!DOCTYPE html>
    <html lang="ru">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
    </head>
    <body>
    	<table id="some-table">
    		<thead>
    			<tr>
    				<th>Наименование</th>
    				<th>Описание</th>
    				<th>Количество</th>
    				<th>Действия</th>
    			</tr>
    		</thead>
    		<tbody>
    		</tbody>
    	</table>
    </body>
    </html>


    window.onload = () => {
    	const table = document.getElementById('some-table')
    	const tableBody = table.querySelector('tbody')
    
    	let serverData = [
    		{
    			id: parseInt( Math.random() * 1000 ),
    			name: 'name 1',
    			description: 'description 1',
    			qnt: '5'
    		},
    		{
    			id: parseInt( Math.random() * 1000 ),
    			name: 'name 2',
    			description: 'description 2',
    			qnt: '2'
    		},
    		{
    			id: parseInt( Math.random() * 1000 ),
    			name: 'name 2',
    			description: 'description 2',
    			qnt: '8'
    		}
    	]
    
    
    
    	const render = html => tableBody.innerHTML = html
    
    	const template = data => {
    		return data.map( item => {
    			return `
    				<tr>
    					<td>${ item.name }</td>
    					<td>${ item.description }</td>
    					<td>${ item.qnt }</td>
    					<td><button data-id="${ item.id }" data-action="remove">Удалить</button></td>
    				</tr>
    			`
    		}).join('')
    	}
    
    	const rmv = id => {
    		serverData = serverData.filter( item => item.id !== parseInt( id ) )
    	}
    
    	const tableHandler = e => {
    		const $el = e.target
    		
    		switch( $el.dataset.action ) {
    			case 'remove':
    				rmv( $el.dataset.id )
    				break
    		}
    		
    		render( template( serverData ) )
    	}
    
    	const run = () => {
    		render( template( serverData ) )
    		table.addEventListener( 'click', tableHandler )
    	}
    
    	run()
    }
    Ответ написан
    Комментировать
  • Как получать информацию страницы REST API?

    FinGanapre
    @FinGanapre
    В целом, в rest стараются делать такие ендпоинты, которые нужны приложению на клиентской стороне. Но, в данном случае я бы обратил внимание на то, что товаров в конкретной категории может быть очень много и вы будете делить их по 10 / 20 / 50 и т.д. При этом, информацию о самой категории логичнее получить один раз. Т. е., я бы поделил это на два запроса. И выглядеть это будет намного логичнее, когда вам где-то понадобиться получить только список товаров определённой категории.
    Ответ написан
    Комментировать
  • Как обработать MIDI файл фортепьянного произведения чтобы его слушать в хорошем качестве?

    FinGanapre
    @FinGanapre
    Воспользоваться любой удобной вам DAW( cubase, fruity loops, ableton, bitwig studio, reaper ) и плагином kontakt6, подгрузив в него библиотеку клавишных. После записи вы сможете скорректировать своё исполнение (подвигать ноты, уменьшать/увеличивать длительность нажатия) и обработать дорожку как угодно (эквализация, компрессия, реверберация, делей, хорус, фэйзер, расширение стерео...).

    Из библиотек под контакт для клавишных можно посмотреть на следующие:
    Galaxy Vintage D
    Viena concert grand
    The maverick
    The Giant
    Una Corda

    Посмотрите обзоры на youtube на них и выберите какая больше подходит под ваши нужды.
    Ответ написан
    Комментировать
  • Зачем в рест апи ид шлется в самом урле, а не в дате или не в квери?

    FinGanapre
    @FinGanapre
    Если запрос сделан методом GET, то параметры получают из url. В других методах ( POST, PUT, DELETE ) данные получают из тела запроса и url.

    Методом GET получают, например, все новости сайта не передавая никаких параметров.
    Если нужно получить одну новость, то передают к примеру её id.

    Методом GET отправляются все запросы с браузера ( то, что написано в адресной строке ).

    query параметры нужны, например, для организации лимита вывода новостей на одну страницу.
    Ответ написан
    Комментировать
  • Проблема с hover?

    FinGanapre
    @FinGanapre
    Заверните картинку и текст в div. По ховеру на этот див меняйте стили картинки и текста.
    Например так
    Для вывода текста можно сделать ещё одну подложку и применить к ней фон. Тут много вариантов.

    В вашей реализации ховер проподает т.к. вы отслеживаете его у картинки. Как только картинку закрывает текст - событие ховер с неё уходит.
    Ответ написан
    Комментировать
  • Как изменить стиль добавленный через .css()?

    FinGanapre
    @FinGanapre
    Проблема с контекстом выполнения.
    Когда вы передаёте функцию в setTimeout, её контекст (this) - это не тот контекст (this), который вы бы хотели получить.

    Используйте стрелочную функцию для сохранения контекста (стрелочные функции в js не имеют собственного контекста):
    setTimeout(() => {
    $(this).css('border-color', 'none');
    },1000);


    Или сохраните контекст (this) в переменную, которую получите через замыкание:
    var that = this;
    setTimeout( function() {
    $(that).css('border-color', 'none');
    },1000);
    Ответ написан
    Комментировать
  • Как получить названия репозиториев на гитхабе с помощью cheeriojs?

    FinGanapre
    @FinGanapre
    Если я правильно понял о каком элементе идёт речь, то следует изменить селектор на ".repo-list a.v-align-middle"
    Ответ написан