Сделать гифки появляются при нажатии кнопки
Я пытаюсь сделать страницу, которая имеет массив "тем". У каждой темы есть кнопка, и когда она нажата, на странице появляются картинки о теме. Пользователь также может ввести свою собственную тему, чтобы создать кнопку и получить больше картинок. Я использую Giphy API.
Я не могу понять, как заставить GIF-файлы появляться при нажатии кнопки. Мне удалось получить GIF-файлы на странице, но я понятия не имею, откуда они берутся, потому что они не имеют никакого отношения к моим темам. Я даже не уверен, что мои темы используются. Я пытался понять это в течение нескольких часов, и я действительно ошеломлен тем, что мне не хватает, чтобы переместить один. Любые предложения действительно ценятся
HTML
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="assets/style.css">
<title>Gif Tastic</title>
</head>
<body>
<div id="buttons"></div>
<div id="search"></div>
<div id="gifs"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="assets/javascript.js"></script>
</body>
</html>
JAVASCRIPT
$(document).ready(function() {
var topics = [
"cartoons",
"mma",
"dinosaur",
"mexico",
"monster",
"muay thai",
"mafia",
"guitar"
];
// Topic Buttons
function createBtn() {}
// Gifs
function displayGifs() {
var topic = $(this).attr("data-name");
var queryUrl =
"http://api.giphy.com/v1/gifs/search?q=" +
btn +
"&limit=10&api_key=pbQIp7jgT1wgUdEAxUYByhoM1KKnBzIU";
var apiKey = "pbQIp7jgT1wgUdEAxUYByhoM1KKnBzIU";
for (var i = 0; i < topics.length; i++) {
var btn = $("<button>" + topics[i] + "</button>");
btn.addClass("jsonData");
btn.attr("data-name", topics[i]);
btn.appendTo("#buttons");
$("btn").on("click", function() {
//displayGifs();
//console.log("data-name");
});
}
$.ajax({
url: queryUrl,
method: "GET"
}).then(function(response) {
if (response.data.length > 1) {
for (var i = 1; i < 9; i++) {
var result = response.data;
var img = $("<img>");
var imgUrl = result[i].images.original.url;
img.attr("src", imgUrl);
$("#gifs").append(img);
}
}
});
}
displayGifs();
createBtn();
});
2 ответа
Вы создаете кнопки в $(document).ready(). поэтому вы не можете получить доступ к $("#btn") в $(document).ready(). Вот почему ваше событие клика btn не зарегистрировано. Так что измените свой код, как показано ниже. это зарегистрирует событие нажатия кнопки.
for (var i = 0; i < topics.length; i++) {
var btn = $("<button>" + topics[i] + "</button>");
btn.addClass("jsonData");
btn.attr("data-name", topics[i]);
btn.attr("onclick", "displayGifs('"+topics[i]+"')");
btn.appendTo("#buttons");
}
Я немного изменил твой код. изменения: 1. Прикрепление события нажатия кнопки к кнопке 2. Отправка темы в качестве входного параметра в функцию щелчка.
$(document).ready(function() {
createBtn();
})
// Topic Buttons
function createBtn() {
var topics = [
"cartoons",
"mma",
"dinosaur",
"mexico",
"monster",
"muay thai",
"mafia",
"guitar"
];
for (var i = 0; i < topics.length; i++) {
var btn = $("<button>" + topics[i] + "</button>");
btn.addClass("jsonData");
btn.attr("data-name", topics[i]);
btn.attr("onclick", "displayGifs('"+topics[i]+"')");
btn.appendTo("#buttons");
}
}
// Gifs
function displayGifs(topic) {
// var topic = $(this).attr("data-name");
var queryUrl =
"http://api.giphy.com/v1/gifs/search?q=" +
topic
"&limit=10&api_key=pbQIp7jgT1wgUdEAxUYByhoM1KKnBzIU";
var apiKey = "pbQIp7jgT1wgUdEAxUYByhoM1KKnBzIU";
$.ajax({
url: queryUrl,
method: "GET"
}).then(function(response) {
if (response.data.length > 1) {
for (var i = 1; i < 9; i++) {
var result = response.data;
var img = $("<img>");
var imgUrl = result[i].images.original.url;
img.attr("src", imgUrl);
$("#gifs").append(img);
}
}
});
}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="assets/style.css">
<title>Gif Tastic</title>
</head>
<body>
<div id="buttons"></div>
<div id="search"></div>
<div id="gifs"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="assets/javascript.js"></script>
</body>
</html>
Похоже, у вас есть небольшая опечатка в вызове API, она должна ссылаться topic
вместо btn
вот так:
var queryUrl =
"http://api.giphy.com/v1/gifs/search?q=" +
topic +
"&limit=10&api_key=pbQIp7jgT1wgUdEAxUYByhoM1KKnBzIU";
Надеюсь, это поможет.