淘宝放大镜

Posted sheep2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了淘宝放大镜相关的知识,希望对你有一定的参考价值。

监听事件来实现淘宝放大镜效果

html + css

<style>
    * { margin: 0; padding: 0; }
    .wrap {
	position: relative;
	width: 400px;
	height: 400px;
	margin: 20px;
    }
    /* 设置初始尺寸 */
    .wrap img { width: 400px; height: 400px; }
    .wrap .mark {
	display: none;	/* 默认隐藏 */
	position: absolute;
	left: 0;
	top: 0;
	width: 100px;
	height: 100px;
	background-color: rgb(0, 0, 0, .4);
    }
    .hiddenwrap {
	display: none;	/* 默认隐藏 */
	overflow: hidden;  /* 溢出隐藏 */
	position: absolute;
	top: 0;
	left: 450px;
	width: 600px;
	height: 600px;
    }
    /* 设置放大尺寸 */
    .hiddenwrap img { width: 1000px; height: 1000px; }
</style>

<div class="wrap">
    <img src="./images/scale.jpg">
    <div class="mark"></div>
</div>

<div class="hiddenwrap">
    <img src="./images/scale.jpg" >
</div>

js实现

const wrap = document.querySelector(‘.wrap‘)
const mark = document.querySelector(‘.mark‘)
const hdWrap = document.querySelector(‘.hiddenwrap‘)
const largeImg = document.getElementsByTagName(‘img‘)[1]
		
/* 监听鼠标移入事件 */
wrap.onmouseenter = function () {
    //显示放大镜
    mark.style.display = ‘block‘
    //让隐藏部分显示
    hdWrap.style.display = ‘block‘
    /* 监听鼠标移动 */
    window.onmousemove = function (e) {
	let left = e.pageX - wrap.offsetLeft - mark.clientWidth / 2
	let top = e.pageY - wrap.offsetTop - mark.clientHeight / 2
	let maxLeft = wrap.clientWidth - mark.clientWidth
	let maxTop = wrap.clientHeight - mark.clientHeight
	//对移动空间进行限制
	left >= maxLeft ? left = maxLeft : left = left,
	left <= 0 ? left = 0 : left = left
	top >= maxTop ? top = maxTop : top = top,
	top <= 0 ? top = 0 : top = top
	//让鼠标位于放大镜中心
	mark.style.left = left + ‘px‘
	mark.style.top = top + ‘px‘
	/*显示需要放大部分*/
	hdWrap.scrollLeft = left / maxLeft * (largeImg.clientWidth - hdWrap.clientWidth)
	hdWrap.scrollTop = top / maxTop * (largeImg.clientHeight - hdWrap.clientHeight)
    }
			
    /* 监听鼠标离开 */
    wrap.onmouseleave = function (e) {
	//隐藏放大镜
	mark.style.display = ‘none‘
	//隐藏放大图
	hdWrap.style.display = ‘none‘
	//移除监听
	window.onmousemove = null
	wrap.onmouseleave = null
    }
}
		
/* 今日知识点:
    * 计算放大图片的偏移量涉及一点数学运算
    * 初始的偏移量之比 = 放大的偏移量之比
*/		

以上是关于淘宝放大镜的主要内容,如果未能解决你的问题,请参考以下文章

JQ实战天猫淘宝放大镜

JS之京东淘宝图片放大镜效果

JS实现淘宝商品图片放大效果(放大镜)

JS实现淘宝商品图片放大效果(放大镜)

JS实现淘宝商品图片放大效果(放大镜)

JS实现淘宝商品图片放大效果(放大镜)