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
 
(10 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 'active'


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 'active'


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');
Linha 110: Linha 105:
});
});


// Adicionar evento ao tirar o mouse do dropdown
dropdown.addEventListener('mouseout', function () {
dropdown.addEventListener('mouseout', function () {
    if (usingKeyboard) return; // Ignora eventos de mouse enquanto o teclado está em uso
    const allItems = dropdown.querySelectorAll('.dropdown-item');
    allItems.forEach(item => item.classList.remove('active')); // Remove 'active'
});
dropdown.addEventListener('click', function () {
    usingKeyboard = false; // Reseta a flag ao clicar
     const allItems = dropdown.querySelectorAll('.dropdown-item');
     const allItems = dropdown.querySelectorAll('.dropdown-item');
     allItems.forEach(item => item.classList.remove('active')); // Remove 'active'
     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 136: 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 162: 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>