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
 
(8 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 55: Linha 55:
             }
             }
         });
         });
let usingKeyboard = false; // Flag para controlar interações via teclado


document.addEventListener('keydown', function (event) {
document.addEventListener('keydown', function (event) {
Linha 67: Linha 65:


     if (event.key === 'ArrowDown') {
     if (event.key === 'ArrowDown') {
        usingKeyboard = true; // Ativa a flag de interação por teclado
         allItems.forEach(item => item.classList.remove('active')); // Remove 'active'
         allItems.forEach(item => item.classList.remove('active')); // Remove todas as seleções


         if (activeItem) {
         if (activeItem) {
Linha 80: Linha 77:
         event.preventDefault();
         event.preventDefault();
     } else if (event.key === 'ArrowUp') {
     } else if (event.key === 'ArrowUp') {
        usingKeyboard = true; // Ativa a flag de interação por teclado
         allItems.forEach(item => item.classList.remove('active')); // Remove 'active'
         allItems.forEach(item => item.classList.remove('active')); // Remove todas as seleções


         if (activeItem) {
         if (activeItem) {
Linha 100: Linha 96:
});
});


// Adicionar eventos ao passar o mouse
dropdown.addEventListener('mouseover', function (event) {
dropdown.addEventListener('mouseover', function (event) {
    if (usingKeyboard) return; // Ignora eventos de mouse enquanto o teclado está em uso
     if (event.target.classList.contains('dropdown-item')) {
     if (event.target.classList.contains('dropdown-item')) {
         const allItems = dropdown.querySelectorAll('.dropdown-item');
         const allItems = dropdown.querySelectorAll('.dropdown-item');
         allItems.forEach(item => item.classList.remove('active')); // Remove todas as seleções
         allItems.forEach(item => item.classList.remove('active')); // Remove 'active'
         event.target.classList.add('active'); // Adiciona 'active' ao item do mouse
         event.target.classList.add('active'); // Adiciona 'active' ao item do mouse
     }
     }
});
});


dropdown.addEventListener('mouseout', function (event) {
// Adicionar evento ao tirar o mouse do dropdown
     if (usingKeyboard) return; // Ignora eventos de mouse enquanto o teclado está em uso
dropdown.addEventListener('mouseout', function () {
 
     const allItems = dropdown.querySelectorAll('.dropdown-item');
    if (event.target.classList.contains('dropdown-item')) {
    allItems.forEach(item => item.classList.remove('active')); // Remove 'active'
        event.target.classList.remove('active'); // Remove a seleção do item do mouse
    }
});
});


dropdown.addEventListener('click', function () {
    usingKeyboard = false; // Reseta a flag ao clicar
    const allItems = dropdown.querySelectorAll('.dropdown-item');
    allItems.forEach(item => item.classList.remove('active')); // Remove todas as seleções
});
         document.addEventListener('click', function(event) {
         document.addEventListener('click', function(event) {
             if (!imageSearch.contains(event.target) && !dropdown.contains(event.target)) {
             if (!imageSearch.contains(event.target) && !dropdown.contains(event.target)) {
Linha 141: 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">
        `;


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