#javascript #autocomplete #soundcloud
#javascript #автозаполнение #soundcloud
Вопрос:
Я новичок в кодировании и испытываю трудности с определенным разделом. был бы признателен за некоторую помощь. Спасибо!
Я пытаюсь добавить URL-адрес следующим образом:
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/349298285amp;color=#f26016amp;auto_play=falseamp;hide_related=falseamp;show_comments=trueamp;show_user=trueamp;show_reposts=falseamp;show_teaser=true"></iframe>
в следующий раздел кода javascript.
// Auto Complete
const ac = document.querySelector('.autocomplete');
M.Autocomplete.init(ac, {
data: {
"Nik:11": null,
"Tell Me": null,
"Hypervent": null,
"Selfish Heart": null,
"Dont Make Me wait": null,
"What You Deserve": null,
"You Did Something": null,
"Quench My First": null,
"Rockstar": null,
"Dreamer": null,
"Ultraviolet": null,
"Win your Love": null,
}
});
По сути, я хочу, чтобы пользователь мог использовать автозаполнение в поиске, а затем, когда он нажимает на него, он переходит в sound cloud и воспроизводит эту песню.
Кто-нибудь знает, как я могу это сделать, также вот код для строки поиска?
Не могли бы вы объяснить, как я могу связать строку поиска с дорожкой, а также добавить встроенный проигрыватель на веб-сайт.
Заранее благодарю вас за помощь.
Ответ №1:
Вам нужно создать карту или функцию, чтобы получить идентификатор каждой песни на soundcloud. Затем, при инициализации элемента автозаполнения, вам нужно передать функцию onAutoComplete, выполняемую, когда пользователь выбирает опцию.
Я добавляю пример ниже (идентификаторы треков являются случайными), как вы можете видеть, опция changePlayerSong устанавливает URL-адрес с идентификатором песни, выбранным на карте, в элемент iframe (в этом случае я добавляю id =»player» в iframe).
// Map of songs that relates the String of the autocomplete with the soundcloud id
const SONG_MAP = {
"Nik:11": 349298284,
"Tell Me": 349298283,
Hypervent: 349298282,
"Selfish Heart": 349298281,
"Dont Make Me wait": 349298284,
"What You Deserve": 349298284,
"You Did Something": 349298284,
"Quench My First": 349298284,
Rockstar: 349298284,
Dreamer: 349298284,
Ultraviolet: 349298284,
"Win your Love": 349298284
};
// Changes the iframe with id="player" url to display the new soundcloud song
function changePlayerSong(songId) {
return `https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/${songId}amp;color=#f26016amp;auto_play=falseamp;hide_related=falseamp;show_comments=trueamp;show_user=trueamp;show_reposts=falseamp;show_teaser=true`;
};
// Configure the Autocomplete onload
document.addEventListener("DOMContentLoaded", function() {
const ac = document.querySelector(".autocomplete");
M.Autocomplete.init(ac, {
data: {
"Nik:11": null,
"Tell Me": null,
Hypervent: null,
"Selfish Heart": null,
"Dont Make Me wait": null,
"What You Deserve": null,
"You Did Something": null,
"Quench My First": null,
Rockstar: null,
Dreamer: null,
Ultraviolet: null,
"Win your Love": null
},
// Autocomplete function callback that is triggered when the user selects some value
onAutocomplete: function(value) {
document.querySelector("#player").src = changePlayerSong(SONG_MAP[value]);
}
});
});
Разбивка функций:
onAutocomplete: function(value) {
document.querySelector("#player").src = changePlayerSong(SONG_MAP[value]);
}
Эта функция получает результат автозаполнения, который выбирает пользователь, например, если пользователь выбирает опцию «Эгоистичное сердце» при вводе, значением будет «Эгоистичное сердце».
Затем выполнение SONG_MAP[значение] вернет нам SongID, объявленный в начале, например SONG_MAP[«Эгоистичное сердце»] вернет 349298281. Здесь мы уже получили SongID для передачи в качестве параметра проигрывателю. Для этого мы используем функцию changePlayerSong.
function changePlayerSong(songId) {
return `https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/${songId}amp;color=#f26016amp;auto_play=falseamp;hide_related=falseamp;show_comments=trueamp;show_user=trueamp;show_reposts=falseamp;show_teaser=true`;
};
Как вы можете видеть, эта функция получает параметр с именем SongID, который будет содержать номер песни, которую мы ранее извлекли из карты.
Эта функция вернет URL-адрес песни SoundCloud, обратите внимание, что синтаксис ${SongID} заменит $ {SongID} содержимым переменной, в данном случае числом, полученным в качестве параметра.
Опять же, в нашей функции onAutoComplete у нас уже есть результат функции changePlayerSong с URL-адресом проигрывателя. Теперь мы заменяем источник iframe, который отображает проигрыватель, следующей инструкцией
document.querySelector("#player").src = changePlayerSong(SONG_MAP[value]);
Это предложение будет искать элемент с id =»player» в нашем HTML и изменит свойство src (source) на новый URL выбранной песни
Свяжитесь со мной, если вам нужна помощь или дополнительная информация!
Комментарии:
1. я сделал именно то, что вы сказали, это в какой-то степени работает, я нажимаю на строку поиска, набираю нужную песню или выбираю из автозаполнения, и это приводит меня к песне, например hypervent. но когда я хочу перейти к другой песне, она просто перезагружает ту же песню. теперь я скопировал процесс, привязывающий идентификатор к карте, затем привязывающий функцию к идентификатору при автозаполнении. можете ли вы объяснить, что происходит не так.
2. Вы явно устанавливаете одно значение map для функций, вместо этого получая значение, предоставленное автозаполнением.
3. я добавил свой код, который я сделал, но, похоже, модераторы удалили отредактированную версию моего вопроса.
4. Да, вы пытались отредактировать мое сообщение, вместо этого вам следует опубликовать новый комментарий. В любом случае, я увидел ваш код, я создал codepen по следующему URL: codepen.io/anon/pen/KEggzw Я добавил больше комментариев к коду, особенно в функциях, которые вы указали неправильно. По сути, у вас было статическое значение для песен, вместо того, чтобы устанавливать их динамически со значением автозаполнения. Проверьте это и сообщите мне о любых сомнениях!
5. Привет, Серджио, спасибо тебе за твою помощь на данный момент. я буквально новичок в кодировании, никогда раньше не создавал свой собственный сайт, поэтому вам придется простить меня, поскольку я не все понимаю, но когда я увижу правильное решение, я буду знать на будущее, как вы это делаете. однако подумайте об этом, как о ребенке, выучивающем свои первые слова, и он просто не понимает этого, лол, пожалуйста, проверьте, что он по-прежнему работает так же, как и раньше. codepen.io/Bjorn_Ironside1986/pen/JzRWpp