犬と猫の画像を表示する[Visualforce]
概要
Visualforceで犬と猫の画像を表示します。
犬の画像はDog APIから、猫の画像はThe Cat APIから取得します。
ソースコード
DogCatPic.vfp
<apex:page docType="html-5.0" LightningStylesheets="true"> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>お犬様とお猫様</title> <apex:slds /> </head> <body> <div class="slds-align_absolute-center"> <div class="slds-size_2-of-3"> <apex:pageBlock > <div class="slds-grid slds-einstein-header slds-card__header"> <header class="slds-media slds-media_center slds-has-flexi-truncate"> <div class="slds-grid slds-grid_vertical-align-center slds-size_3-of-4 slds-medium-size_2-of-3"> <h1 class="slds-truncate" title="お犬様とお猫様"> <span class="slds-text-heading_large">お犬様とお猫様</span> </h1> </div> <div class="slds-einstein-header__figure slds-size_1-of-4 slds-medium-size_1-of-3"></div> </header> </div> <div class="slds-align_absolute-center"> <div class="slds-m-top_large"> <header class="slds-align_absolute-center"> <div class="slds-button-group" role="group"> <button id="dog" class="slds-button slds-button_neutral slds-text-heading_medium slds-p-around_small">今日のお犬様</button> <button id="cat" class="slds-button slds-button_neutral slds-text-heading_medium slds-p-around_small">今日のお猫様</button> </div> </header> <main class="slds-m-top_large"> <section class="pic-container"> </section> </main> </div> </div> </apex:pageBlock> </div> </div> <apex:include pageName="DogCatPicJs"/> </body> </html> </apex:page>
DogCatPicJs.vfp
<apex:page > <script> const dogUrl = 'https://dog.ceo/api/breeds/image/random'; // Dog API const catUrl = 'https://api.thecatapi.com/v1/images/search?format=json'; // The Cat API const petSearchButton = document.querySelectorAll('.slds-button'), container = document.querySelector('.pic-container'); let petInfo; // APIからペットの情報を取得する function requestPetInfo(baseUrl) { fetch(baseUrl).then(response => response.json()) .then(data => { this.petInfo = data; }) .catch(err => console.log(err)); } petSearchButton.forEach(function (button) { button.addEventListener('click', event => { event.preventDefault(); if(event.currentTarget.id === 'dog') { // Dog APIから犬の情報を取得する requestPetInfo(dogUrl); // 取得した犬の画像を追加する setTimeout(function () { container.innerHTML = `<img src="${this.petInfo.message}"/>`; container.classList.add('slds-box'); container.classList.add('slds-m-bottom_medium'); }, 1000); } else { // The Cat APIから猫の情報を取得する requestPetInfo(catUrl); // 取得した猫の画像を追加する setTimeout(function () { container.innerHTML = `<img src="${this.petInfo[0].url}"/>`; container.classList.add('slds-box'); container.classList.add('slds-m-bottom_medium'); }, 1000); } }) }) </script> </apex:page>