我有一个图像,我想使用同一图像的较大版本创建一个新的 div(点击时)。
我尝试了四种方法:
function zoom_img (event) {
console.log(event.target);
console.log(event.target['data-loaded-src'])
const src = event.target['data-loaded-src']
return (
<div className='w-screen h-screen fixed flex justify-center items-center'>
<div className='w-9/12 h-5/6 bg-slate-200 opacity-50'>
<Image src={src} fill={true} />
</div>
</div>
)
}
...
<Image src={'/gafas.png'} width={150} height={150} alt='Gafas 1' onClick={zoom_img}/>
function Glasses ({src, height, width, alt}) {
function enlrg() {
console.log(src);
return (
<div className='w-screen h-screen fixed flex justify-center items-center'>
<div className='w-9/12 h-5/6 bg-slate-200 opacity-50'>
<Image src={src} fill={true} />
</div>
</div>
)
}
return (
<Image src={src} width={width} height={height} alt={alt} onClick={enlrg} />
)
}
...
<Glasses src={'/gafas.png'} width={150} height={150} alt='Gafas 1' />
function Glasses2 ({src, height, width, alt}) {
function enlrg() {
console.log(src);
let x = document.getElementById('temp');
x.classList.remove('hidden');
x.classList.add('flex');
}
return (
<Image src={src} width={width} height={height} alt={alt} onClick={enlrg} />
)
}
...
<Glasses2 src={'/gafas.png'} width={150} height={150} alt='Gafas 1' />
<div id='temp' className='w-screen h-screen fixed hidden justify-center items-center'>
<div className='w-9/12 h-5/6 bg-slate-200 opacity-50'>
<Image src={'/gafas.png'} fill={true} />
</div>
</div>
function zoom_img (event) {
console.log(event.target);
console.log(event.target['data-loaded-src'])
const src = event.target['data-loaded-src']
const new_cont = document.createElement('div');
const new_div = document.createElement('div');
const main = document.getElementById('main');
new_cont.classList.add('w-screen', 'h-screen', 'fixed', 'flex', 'justify-center', 'items-center');
new_div.classList.add('w-9/12', 'h-5/6', 'bg-slate-200', 'opacity-50');
// add img tag here
new_cont.appendChild(new_div);
main.appendChild(new_cont);
}
...
<Image src={'/gafas.png'} width={150} height={150} alt='Gafas 1' onClick={zoom_img} />
在每种方法中我都能看到控制台中的日志,但只有在方法 4 中我才能看到新的 div。
方法 4 是唯一正确的方法吗?如果可能的话,我更愿意使用图像组件。大家觉得怎么样?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
非常感谢@Atena Dadkhah。您的回答非常有效。
在项目中,不是一个而是一堆图像,因此最终代码如下所示:
function enlarge(e) { setLrg(true); let img = document.getElementById('largerImage'), src = e.target['data-loaded-src']; img['src'] = src; }然后是一堆像这样的图像:
然后是隐藏的div:
它仍然缺少关闭 div 的行为,但这应该很容易添加。
再一次。谢谢:)
你可以尝试这样的事情:
设置挂钩:
在此代码中,您实际上是在告诉 Next.JS,每当用户单击该图像时,将变量
zoomImage更改为 true,因此默认情况下隐藏的较大图像将具有显示块。 (我猜你正在使用 tailwindcss)