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
 
(14 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 52: Linha 52:
                 dropdown.style.display = dropdown.childNodes.length ? 'block' : 'none';
                 dropdown.style.display = dropdown.childNodes.length ? 'block' : 'none';
             } else {
             } else {
                dropdown.style.display = 'none';
            }
        });
        document.addEventListener('click', function(event) {
            if (!imageSearch.contains(event.target) && !dropdown.contains(event.target)) {
                 dropdown.style.display = 'none';
                 dropdown.style.display = 'none';
             }
             }
Linha 63: Linha 57:


document.addEventListener('keydown', function (event) {
document.addEventListener('keydown', function (event) {
    // Verifica se o dropdown está visível
     if (dropdown.style.display === 'none' || !dropdown.childNodes.length) {
     if (dropdown.style.display === 'none' || !dropdown.childNodes.length) {
         return; // Sai da função se o dropdown estiver escondido ou vazio
         return; // Sai da função se o dropdown estiver escondido ou vazio
     }
     }


    // Remove a seleção atual antes de navegar
     const allItems = dropdown.querySelectorAll('.dropdown-item');
     const allItems = dropdown.querySelectorAll('.dropdown-item');
     allItems.forEach(item => item.classList.remove('active'));
     let activeItem = document.querySelector('.dropdown-item.active');


     const activeItem = document.querySelector('.dropdown-item.active');
     if (event.key === 'ArrowDown') {
        allItems.forEach(item => item.classList.remove('active')); // Remove 'active'


    if (event.key === 'ArrowDown') {
         if (activeItem) {
         if (activeItem) {
             const nextItem = activeItem.nextElementSibling || dropdown.firstChild; // Vai para o próximo ou volta para o início
             const nextItem = activeItem.nextElementSibling || allItems[0];
             nextItem.classList.add('active');
             nextItem.classList.add('active');
             nextItem.scrollIntoView({ block: "nearest" }); // Garante que o item fique visível
             nextItem.scrollIntoView({ block: "nearest" });
         } else {
         } else {
             dropdown.firstChild.classList.add('active'); // Ativa o primeiro item se nenhum estiver ativo
             allItems[0].classList.add('active');
             dropdown.firstChild.scrollIntoView({ block: "nearest" });
             allItems[0].scrollIntoView({ block: "nearest" });
         }
         }
         event.preventDefault(); // Evita comportamento padrão
         event.preventDefault();
     } else if (event.key === 'ArrowUp') {
     } else if (event.key === 'ArrowUp') {
        allItems.forEach(item => item.classList.remove('active')); // Remove 'active'
         if (activeItem) {
         if (activeItem) {
             const previousItem = activeItem.previousElementSibling || dropdown.lastChild; // Vai para o anterior ou volta para o final
             const previousItem = activeItem.previousElementSibling || allItems[allItems.length - 1];
             previousItem.classList.add('active');
             previousItem.classList.add('active');
             previousItem.scrollIntoView({ block: "nearest" });
             previousItem.scrollIntoView({ block: "nearest" });
         } else {
         } else {
             dropdown.lastChild.classList.add('active'); // Ativa o último item se nenhum estiver ativo
             allItems[allItems.length - 1].classList.add('active');
             dropdown.lastChild.scrollIntoView({ block: "nearest" });
             allItems[allItems.length - 1].scrollIntoView({ block: "nearest" });
         }
         }
         event.preventDefault();
         event.preventDefault();
     } else if (event.key === 'Enter') {
     } else if (event.key === 'Enter') {
         if (activeItem) {
         if (activeItem) {
             activeItem.click(); // Simula um clique no item ativo
             activeItem.click();
         }
         }
         event.preventDefault();
         event.preventDefault();
Linha 102: Linha 96:
});
});


// 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) {
function showImageInfo(imageName) {
Linha 116: 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
        if (variation.descriptionIMG) {
            imagesHtml += `<img src="${variation.descriptionIMG}" alt="Description Image" style="margin-right: 5px; display: inline-block;"><br>`;
        }
        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>`;
        }


                    <img src="${variation.descriptionIMG}" alt="Description Image" style="margin-right: 5px; display: inline-block;"> <!-- Exibe a imagem antes da descrição -->
        imagesHtml += `
                    <br> ${variation.description} <br> <!-- Descrição após a imagem -->
                    <b>Como Obter</b>: <a href="${variation.obtain.url}" target="_blank">${variation.obtain.text}</a>
                 </div>
                 </div>
             </div>
             </div>
Linha 142: 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>