js实现仿京东商品放大镜和选项卡效果

5 篇文章 0 订阅
1 篇文章 0 订阅

效果:

 

实现思路

  1. 鼠标移入下面商品列表之后,在最上面显示对应的商品
  2. 默认情况下,黄色盒子和右侧大盒子是隐藏的
  3. 鼠标进入上面商品列表后,小黄盒子显示,右侧大盒子的商品显示
  4. 右侧商品的显示,是左侧商品的两倍并且是跟左侧黄色盒子移动距离相反

布局

<!-- 外层最大的盒子 -->
	<div class="bigBox">
		<!-- 左侧的小盒子 -->
		<div class="leftBox" id="leftBox1">
			<img src="./images/xie.jpg" alt="" id="xiaoxie">
			<div class="mark" id="mark1"></div>
		</div>
		<!-- 下面的商品小图标 -->
		<ul class="items">
			<li class="item"><img src="./images/xiaoxie.jpg" alt=""  class="item-img"></li>
			<li class="item"><img src="./images/xiaoxie1.jpg" alt="" class="item-img"></li>
			<li class="item"><img src="./images/xiaoxie2.jpg" alt="" class="item-img"></li>
			<li class="item"><img src="./images/xiaoxie3.jpg" alt="" class="item-img"></li>
			<li class="item"><img src="./images/xiaoxie4.jpg" alt="" class="item-img"></li>
		</ul>
		<!-- 右侧大盒子 放大图片 -->
		<div class="rightBox" id="rightBox1">
			<img src="./images/daxie.jpg" alt="" id="daxie">
		</div>
	</div>

css部分

<style>
		.bigBox{
			width: 1100px;
			margin:0 auto;
		}
		/*设置左侧盒子大小*/
		.leftBox{
			border:1px solid #000;
			float: left;
			position: relative;
			width: 350px;
			height: 350px;
		}
		.leftBox img{
			position: absolute;
			width: 300px;
		}
		.mark{
			width: 250px;
			height: 250px;
			position: absolute;
			z-index:333;
			background: yellow;
			opacity: 0.5;
			 /* 设置滤镜 */
    		filter:alpha(opacity=50);
    		/*默认隐藏*/
			display: none;
			cursor: move;
		}
		.rightBox{
			position: relative;
			width: 500px;
			height: 600px;
			float: left;
			border:1px solid #000;
			overflow: hidden;
			/*设置右侧盒子默认隐藏*/
			display: none;
			margin-left: 10px;
		}
		.rightBox #daxie{
			position: absolute;
			width: 100%;
			height: 100%;
		}
		.items{
			position: absolute;
			width: 360px;
			height: 80px;
			top:350px;
			left: 80px;
		}
		.items .item img{
			width: 60px;
			height: 60px;
		}
		.items .item{
			float: left;
			list-style: none;
			margin-right: 4px;
		}
	</style>

JS实现部分 

<script>
var item = document.getElementsByClassName("item");
var img = document.getElementsByClassName("item-img");
//创建一个下面商品小图标的数组,
var arr = ["./images/xie.jpg","./images/xie1.jpg","./images/xie2.jpg","./images/xie3.jpg","./images/xie4.jpg","./images/xie5.jpg"];
//右侧大图片的数组
var bigArrImg = ["./images/daxie.jpg","./images/daxie1.jpg"]
//设置左侧盒子的移入显示,移出隐藏事件
leftBox1.onmouseover = function(){
	mark1.style.display = "block"
	rightBox1.style.display = "block";
}
leftBox1.onmouseout = function(){
	mark1.style.display = "none"
	rightBox1.style.display = "none"
}
for(var i = 0; i < item.length;i++){
	item[i].index = i;
	item[i].onmouseover = function(){
		for(var j = 0; j< item.length;j++){
			item[j].style.border = "none"
		}
		this.style.border = "2px solid red";
		xiaoxie.setAttribute("src",arr[this.index])
		daxie.setAttribute("src",arr[this.index])
	}
}
// mark1.onmousemove = function(e){	,开始是这样写的,但是会出现,小黄盒子偏离现象
//为左侧盒子设置鼠标移动事件,给小黄盒子设置移动
leftBox1.onmousemove = function(e){
	var e = e||event;
	//设置鼠标x和y的最大移动距离
	var x = e.clientX-leftBox1.offsetLeft-mark1.offsetWidth/2
	var y = e.clientY-leftBox1.offsetTop-mark1.offsetHeight/2
	// 设置小黄盒子的最大移动距离
	var maxW = leftBox1.offsetWidth-mark1.offsetWidth;
	var maxH = leftBox1.offsetHeight-mark1.offsetHeight;
	if(x<0){
		x=0
	}
	if(y<0){
		y=0
	}
	if(x>maxW){
		x=maxW
	}
	if(y>maxH){
		y=maxH
	}
	mark1.style.left = x+"px";
	mark1.style.top = y+"px";
	// 右侧大盒子的实际移动距离是左侧的两倍,并且是相反的
	daxie.style.left = -x*2+"px"
	daxie.style.top = -y*2+"px"
}

总结

最后写完发现,黄色小盒子的在鼠标开始移入,会自动出现在左上角,不会出现在鼠标开始出现的位置

 

原因:鼠标移动事件应绑定给左侧大盒子,不是小黄盒子,就可以解决这个问题

 

 

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值