div 内 img 上的 Mouseenter 事件有效 sporadically/erratically
Mouseenter event on img inside div works sporadically/erratically
我有一个缩略图网格。悬停后,我想放大屏幕中央的图像。经典吧?
每个缩略图都包裹在 div 中。当我在 img 或 div 上应用 mouseenter 或 mouseover 事件时,它根本无法正常工作。我用鼠标悬停,有些缩略图放大,有些根本没有,有些需要第二次或第三次悬停,有些闪烁。
这是怎么回事?缩略图是否可能“隐藏”在某些东西后面,因此看不到鼠标指针?它与 divs 中的图像有关吗? (我试图将事件侦听器应用于 imgs 或 divs,但没有成功)。
<div id="editGrid">
<div> <img src="Gallery1.png" alt=""> </div>
<div> <img src="Gallery2.png" alt=""> </div>
<div> <img src="Gallery3.png" alt=""> </div>
</div>
const divs = document.querySelectorAll('#editGrid > div')
const images = document.querySelectorAll('#editGrid > div > img')
const bigImageArea = document.querySelector('#edit')
let bigImage
divs.forEach((image, i) => {
image.addEventListener('mouseenter', () => {
bigImage = images[i].cloneNode(false)
bigImage.style.position = 'fixed'
bigImage.style.left = '50vw'
bigImage.style.top = '50vh'
bigImage.style.transform = 'translate(-50%, -50%)'
bigImageArea.appendChild(bigImage)
})
image.addEventListener('mouseleave', () => {
bigImageArea.removeChild(bigImage)
})
})
您的 #edit
元素似乎与图像重叠并触发了 mouseleave
事件。您可以使用 pointer-events: none;
禁用该元素上的鼠标事件,也可以避免内联样式:
const divs = document.querySelectorAll('#editGrid > div')
const images = document.querySelectorAll('#editGrid > div > img')
const bigImageArea = document.querySelector('#edit')
let bigImage
divs.forEach((image, i) => {
image.addEventListener('mouseenter', () => {
bigImage = images[i].cloneNode(false)
bigImageArea.appendChild(bigImage)
})
image.addEventListener('mouseleave', () => {
bigImageArea.removeChild(bigImage)
})
})
#edit
{
pointer-events: none;
}
#edit > img
{
position: fixed;
left: 50vw;
top: 50vh;
transform: translate(-50%, -50%);
}
#editGrid > div
{
width: 30%;
}
#editGrid img
{
width: 100%;
}
<div id="editGrid">
<div><img src="https://lh3.googleusercontent.com/taykG37GWDgY-FGkdogDvsHSJMUGRMvkuVRT6yR-5UNkKvGRKeRlpGYXlslocOcS0txlfUdGW59JGtzADknxbMqnh6AtVCv9EXyB8nHp80YsRNA0Yw=w512-h342-n-l50-sg-rj" alt=""></div>
<div><img src="https://lh3.googleusercontent.com/fl-GT6w3Ls6RT4vYnbkuYUyLY3lZJH8VtZ7xzxiym9YYaoVRCnZehdz6Icd0oAf6i3H9-O5cCNs6eunlxWr_Csstgsb98DdzNdLFBOlhw9NUfHdyuQjI=w384-h512-n-l50-sg-rj" alt=""></div>
<div><img src="https://lh3.googleusercontent.com/9pPCK70Rw0k3wethMHb1qMaIB0VjeWLy57vYgSzKbF7oJuvO2nA0Nakk-95cvibWUDcEhYkfCKvdPKT03tXZd4M5jdhIEibLO9qw-XE=w512-h342-n-l50-sg-rj" alt=""></div>
</div>
<div id="edit"></div>
我有一个缩略图网格。悬停后,我想放大屏幕中央的图像。经典吧?
每个缩略图都包裹在 div 中。当我在 img 或 div 上应用 mouseenter 或 mouseover 事件时,它根本无法正常工作。我用鼠标悬停,有些缩略图放大,有些根本没有,有些需要第二次或第三次悬停,有些闪烁。
这是怎么回事?缩略图是否可能“隐藏”在某些东西后面,因此看不到鼠标指针?它与 divs 中的图像有关吗? (我试图将事件侦听器应用于 imgs 或 divs,但没有成功)。
<div id="editGrid">
<div> <img src="Gallery1.png" alt=""> </div>
<div> <img src="Gallery2.png" alt=""> </div>
<div> <img src="Gallery3.png" alt=""> </div>
</div>
const divs = document.querySelectorAll('#editGrid > div')
const images = document.querySelectorAll('#editGrid > div > img')
const bigImageArea = document.querySelector('#edit')
let bigImage
divs.forEach((image, i) => {
image.addEventListener('mouseenter', () => {
bigImage = images[i].cloneNode(false)
bigImage.style.position = 'fixed'
bigImage.style.left = '50vw'
bigImage.style.top = '50vh'
bigImage.style.transform = 'translate(-50%, -50%)'
bigImageArea.appendChild(bigImage)
})
image.addEventListener('mouseleave', () => {
bigImageArea.removeChild(bigImage)
})
})
您的 #edit
元素似乎与图像重叠并触发了 mouseleave
事件。您可以使用 pointer-events: none;
禁用该元素上的鼠标事件,也可以避免内联样式:
const divs = document.querySelectorAll('#editGrid > div')
const images = document.querySelectorAll('#editGrid > div > img')
const bigImageArea = document.querySelector('#edit')
let bigImage
divs.forEach((image, i) => {
image.addEventListener('mouseenter', () => {
bigImage = images[i].cloneNode(false)
bigImageArea.appendChild(bigImage)
})
image.addEventListener('mouseleave', () => {
bigImageArea.removeChild(bigImage)
})
})
#edit
{
pointer-events: none;
}
#edit > img
{
position: fixed;
left: 50vw;
top: 50vh;
transform: translate(-50%, -50%);
}
#editGrid > div
{
width: 30%;
}
#editGrid img
{
width: 100%;
}
<div id="editGrid">
<div><img src="https://lh3.googleusercontent.com/taykG37GWDgY-FGkdogDvsHSJMUGRMvkuVRT6yR-5UNkKvGRKeRlpGYXlslocOcS0txlfUdGW59JGtzADknxbMqnh6AtVCv9EXyB8nHp80YsRNA0Yw=w512-h342-n-l50-sg-rj" alt=""></div>
<div><img src="https://lh3.googleusercontent.com/fl-GT6w3Ls6RT4vYnbkuYUyLY3lZJH8VtZ7xzxiym9YYaoVRCnZehdz6Icd0oAf6i3H9-O5cCNs6eunlxWr_Csstgsb98DdzNdLFBOlhw9NUfHdyuQjI=w384-h512-n-l50-sg-rj" alt=""></div>
<div><img src="https://lh3.googleusercontent.com/9pPCK70Rw0k3wethMHb1qMaIB0VjeWLy57vYgSzKbF7oJuvO2nA0Nakk-95cvibWUDcEhYkfCKvdPKT03tXZd4M5jdhIEibLO9qw-XE=w512-h342-n-l50-sg-rj" alt=""></div>
</div>
<div id="edit"></div>