php 鼠标点击图片放大,鼠标移入放大图片预览效果实现

该博客详细介绍了如何使用CSS和JavaScript实现网页中图片在鼠标移入时放大的功能。通过监听鼠标的移动事件,动态调整背景图片的位置,为用户提供更好的视觉体验。代码适用于PC端和移动端,确保了在不同设备上的兼容性。
摘要由CSDN通过智能技术生成

商城项目中,有鼠标移入图片放大的功能,研究一下实现

Image zoom

body {

display: flex;

justify-content: center;

align-items: center;

min-height: 100vh;

}

#image {

width: 300px;

height: 300px;

background-color: #000;

background-image: url(https://placekitten.com/900/900);

background-size: 300px 300px;

background-repeat: no-repeat;

}

#image[zoomed] {

background-size: 900px 900px;

background-position: calc(var(--x) * 100%) calc(var(--y) * 100%);

}

let el = document.querySelector('#image')

// PC端操作

el.addEventListener('mouseenter', enterHandler)

el.addEventListener('mousemove', moveHandler)

el.addEventListener('mouseleave', leaveHandler)

// 移动端操作

el.addEventListener('touchstart', enterHandler)

el.addEventListener('touchmove', moveHandler)

el.addEventListener('touchend', leaveHandler)

function enterHandler(e) {

e.target.setAttribute('zoomed', 1)

moveHandler(e)

}

function moveHandler(e) {

// getBoundingClientRect用于获取元素相对于视窗的位置集合。集合中有top, right, bottom, left等属性

let rect = e.target.getBoundingClientRect()

let offsetX, offsetY

let isH5 = ['touchstart', 'touchmove', 'touchend'].includes(e.type)

// 是移动端,并且touches事件存在

if (isH5 && e.touches[0]) {

offsetX = e.touches[0].pageX - rect.left

offsetY = e.touches[0].pageY - rect.top

e.preventDefault()

} else {

// PC端

offsetX = e.offsetX

offsetY = e.offsetY

}

// 元素的位置信息

let x = offsetX / rect.width

let y = offsetY / rect.height

// 设置元素属性,用于计算background-position的位置

e.target.style.setProperty('--x', x)

e.target.style.setProperty('--y', y)

}

function leaveHandler(e) {

e.target.removeAttribute('zoomed')

moveHandler(e)

}

具体效果复制下去打开看看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值