Widget:Test: mudanças entre as edições

De PokeXGames
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
 
(6 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 129: Linha 129:
         imagesHtml += `
         imagesHtml += `
             <div class="variation-item">
             <div class="variation-item">
            <img src="${variation.additionalImages[0].url}" alt="Variation Image" class="variation-image" data-variation-index="${index}" style="width: ${variation.additionalImages[0].width}px;">
                <img src="${variation.additionalImages[0].url}" alt="Variation Image" class="variation-image" data-variation-index="${index}" style="width: ${variation.additionalImages[0].width}px;">
                <div class="swap-button" data-variation-index="${index}"></div><br>
                <div class="swap-button" data-variation-index="${index}"></div><br>
                 <div class="image-info">
                 <div class="image-info">
        `;


              
        // Exibe `descriptionIMG` se estiver presente
                    <img src="${variation.descriptionIMG}" alt="Description Image" style="margin-right: 5px; display: inline-block;"> <!-- Exibe a imagem antes da descrição -->
        if (variation.descriptionIMG) {
                    <br> <b>Nome</b>: ${variation.description} <br> <!-- Descrição após a imagem -->
             imagesHtml += `<img src="${variation.descriptionIMG}" alt="Description Image" style="margin-right: 5px; display: inline-block;"><br>`;
                    <b>Como Obter</b>: <a href="${variation.obtain.url}" target="_blank">${variation.obtain.text}</a>
        }
                    <b>Cor Customizada</b>: ${variation.customColor ? 'Sim' : 'Não'}
 
                   
        imagesHtml += `<b>Nome</b>: ${variation.description} <br>`;
 
        // Exibe `obtain` se estiver presente
        if (variation.obtain) {
            imagesHtml += `<b>Como Obter</b>: <a href="${variation.obtain.url}" target="_blank">${variation.obtain.text}</a> <br>`;
        }
 
        // Exibe `customColor` se estiver presente
        if (variation.customColor) {
            imagesHtml += `<b>Cor Customizável</b>: ${variation.customColor} <br>`;
        }
 
        imagesHtml += `
                 </div>
                 </div>
             </div>
             </div>
Linha 158: Linha 171:


         button.addEventListener('click', () => {
         button.addEventListener('click', () => {
            currentImageIndex = (currentImageIndex + 1) % variation.additionalImages.length;
             const variationImage = button.previousElementSibling; // Atualiza a imagem da variação
             const variationImage = button.previousElementSibling; // Atualiza a imagem da variação
             variationImage.src = variation.additionalImages[currentImageIndex].url;
 
            variationImage.style.width = `${variation.additionalImages[currentImageIndex].width}px`;
            // Aplica o efeito de saída
            variationImage.classList.add('fade-out');
 
             // Aguarda o término da animação antes de trocar a imagem
            setTimeout(() => {
                currentImageIndex = (currentImageIndex + 1) % variation.additionalImages.length;
                variationImage.src = variation.additionalImages[currentImageIndex].url;
                variationImage.style.width = `${variation.additionalImages[currentImageIndex].width}px`;
 
                // Remove o efeito de saída e aplica o efeito de entrada
                variationImage.classList.remove('fade-out');
                variationImage.classList.add('fade-in');
 
                // Remove o efeito de entrada após a transição
                setTimeout(() => {
                    variationImage.classList.remove('fade-in');
                }, 300); // Duração da animação CSS (0.3s)
            }, 300); // Sincroniza com a duração do efeito de saída
         });
         });
     });
     });

Edição atual tal como às 17h14min de 29 de dezembro de 2024

<!DOCTYPE html> <html lang="pt-BR"> <head>

   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Busca de Imagens por Nome</title>
 

</head> <body>

   <form id="imageForm">
           <input type="text" id="imageSearch" placeholder="Digite o nome do Pokémon" autocomplete="off">
   </form>
   <script>
       const imageSearch = document.getElementById('imageSearch');
       const dropdown = document.getElementById('dropdown');
       const imageContainer = document.getElementById('imageContainer');
       imageSearch.addEventListener('input', function() {
           const searchValue = this.value.trim().toLowerCase();
           dropdown.innerHTML = ;
           if (searchValue) {
               Object.keys(imageList).forEach(imageName => {
                   if (imageName.toLowerCase().includes(searchValue)) {
                       const dropdownItem = document.createElement('div');
                       dropdownItem.classList.add('dropdown-item');
                       
                       const imgElement = document.createElement('img');
                       imgElement.src = imageList[imageName].imageUrl;
                       imgElement.alt = imageName;
                       
                       dropdownItem.appendChild(imgElement);
                       dropdownItem.appendChild(document.createTextNode(imageName));
                       
                       dropdownItem.addEventListener('click', function() {
                           showImageInfo(imageName);
                           dropdown.style.display = 'none';
                       });
                       dropdown.appendChild(dropdownItem);
                   }
               });
               dropdown.style.display = dropdown.childNodes.length ? 'block' : 'none';
           } else {
               dropdown.style.display = 'none';
           }
       });

document.addEventListener('keydown', function (event) {

   if (dropdown.style.display === 'none' || !dropdown.childNodes.length) {
       return; // Sai da função se o dropdown estiver escondido ou vazio
   }
   const allItems = dropdown.querySelectorAll('.dropdown-item');
   let activeItem = document.querySelector('.dropdown-item.active');
   if (event.key === 'ArrowDown') {
       allItems.forEach(item => item.classList.remove('active')); // Remove 'active'
       if (activeItem) {
           const nextItem = activeItem.nextElementSibling || allItems[0];
           nextItem.classList.add('active');
           nextItem.scrollIntoView({ block: "nearest" });
       } else {
           allItems[0].classList.add('active');
           allItems[0].scrollIntoView({ block: "nearest" });
       }
       event.preventDefault();
   } else if (event.key === 'ArrowUp') {
       allItems.forEach(item => item.classList.remove('active')); // Remove 'active'
       if (activeItem) {
           const previousItem = activeItem.previousElementSibling || allItems[allItems.length - 1];
           previousItem.classList.add('active');
           previousItem.scrollIntoView({ block: "nearest" });
       } else {
           allItems[allItems.length - 1].classList.add('active');
           allItems[allItems.length - 1].scrollIntoView({ block: "nearest" });
       }
       event.preventDefault();
   } else if (event.key === 'Enter') {
       if (activeItem) {
           activeItem.click();
       }
       event.preventDefault();
   }

});

// Adicionar eventos ao passar o mouse dropdown.addEventListener('mouseover', function (event) {

   if (event.target.classList.contains('dropdown-item')) {
       const allItems = dropdown.querySelectorAll('.dropdown-item');
       allItems.forEach(item => item.classList.remove('active')); // Remove 'active'
       event.target.classList.add('active'); // Adiciona 'active' ao item do mouse
   }

});

// Adicionar evento ao tirar o mouse do dropdown dropdown.addEventListener('mouseout', function () {

   const allItems = dropdown.querySelectorAll('.dropdown-item');
   allItems.forEach(item => item.classList.remove('active')); // Remove 'active'

});

       document.addEventListener('click', function(event) {
           if (!imageSearch.contains(event.target) && !dropdown.contains(event.target)) {
               dropdown.style.display = 'none';
           }
       });

function showImageInfo(imageName) {

   const imageInfo = imageList[imageName];
   let imagesHtml = `
           <img src="${imageInfo.imageUrl}" alt="${imageName}">
   `;
   imageInfo.variations.forEach((variation, index) => {
       imagesHtml += `
               <img src="${variation.additionalImages[0].url}" alt="Variation Image" class="variation-image" data-variation-index="${index}" style="width: ${variation.additionalImages[0].width}px;">

       `;
       // Exibe `descriptionIMG` se estiver presente
       if (variation.descriptionIMG) {
           imagesHtml += `<img src="${variation.descriptionIMG}" alt="Description Image" style="margin-right: 5px; display: inline-block;">
`; }
       imagesHtml += `Nome: ${variation.description} 
`;
       // Exibe `obtain` se estiver presente
       if (variation.obtain) {
           imagesHtml += `Como Obter: <a href="${variation.obtain.url}" target="_blank">${variation.obtain.text}</a> 
`; }
       // Exibe `customColor` se estiver presente
       if (variation.customColor) {
           imagesHtml += `Cor Customizável: ${variation.customColor} 
`; }
       imagesHtml += `
       `;
   });
imagesHtml += `

`;

   imageContainer.innerHTML = imagesHtml;
   imageContainer.classList.remove('hidden');
   // Alternar imagens ao clicar no botão de troca
   const swapButtons = document.querySelectorAll('.swap-button');
   swapButtons.forEach(button => {
       const index = button.getAttribute('data-variation-index');
       const variation = imageInfo.variations[index];
       let currentImageIndex = 0;
       button.addEventListener('click', () => {
           const variationImage = button.previousElementSibling; // Atualiza a imagem da variação
           // Aplica o efeito de saída
           variationImage.classList.add('fade-out');
           // Aguarda o término da animação antes de trocar a imagem
           setTimeout(() => {
               currentImageIndex = (currentImageIndex + 1) % variation.additionalImages.length;
               variationImage.src = variation.additionalImages[currentImageIndex].url;
               variationImage.style.width = `${variation.additionalImages[currentImageIndex].width}px`;
               // Remove o efeito de saída e aplica o efeito de entrada
               variationImage.classList.remove('fade-out');
               variationImage.classList.add('fade-in');
               // Remove o efeito de entrada após a transição
               setTimeout(() => {
                   variationImage.classList.remove('fade-in');
               }, 300); // Duração da animação CSS (0.3s)
           }, 300); // Sincroniza com a duração do efeito de saída
       });
   });

}

   </script>

</body> </html>