原生js实现放大镜效果

放大镜效果主要涉及3个鼠标事件:

1.onmouseover,鼠标移入浮动小方块和显示放大的区域显示;

2.onmousemove,鼠标移动,小方块和放大区域一起移动;

3.onmouseout,鼠标移除小方块和放大区域消失。

其实放大镜效果最主要的是小方块与放大区域的比例及位置:

	<div id="small_box">
		<div class="small_Pic">
			<div id="float_box"></div>
			<img src="1.png"  />
		</div>
	</div>
	<div id="big_box">
		<div class="big_Pic">
			<img src="1.png"  />
		</div>
	</div>
	*{padding: 0;margin: 0;}
	img{border: none;}
	#small_box{
		width: 350px;
		height: 175px;
		border: 1px solid #666;
		overflow: hidden;
		position: relative;
		top:200px;
		left: 100px;
		display: inline-block;
	}
	.small_Pic img{
		width: 350px;
		height: 175px;
	}
	#big_box{
		width: 350px;
		height: 175px;
		border: 1px solid #666;
		position: absolute;
		top:200px;
		left: 500px;
		overflow: hidden;
		display: none;
	}
	.big_Pic img{
		width: 1400px;
		height: 700px;
		position: absolute;
	}
	#float_box{
		width: 100px;
		height: 50px;
		background-color: #000;
		opacity: 0.5;
		position: absolute;
	    display: none;
		cursor: move;
		z-index: 99;
	}

js代码:

	window.onload=function(){
		/*获取页面元素*/
		var small_box=document.getElementById(‘small_box‘);
		var float_box=document.getElementById(‘float_box‘);
		var big_box=document.getElementById(‘big_box‘);
		var big_box_img=big_box.getElementsByTagName(‘img‘)[0];

        /*鼠标移入时,放快与放大区域显示*/
		small_box.onmouseover=function(e){
			float_box.style.display=‘block‘;
			big_box.style.display=‘block‘;
		}

		/*鼠标移动时触发*/
		small_box.onmousemove=function(e){
			e=e||window.event;
			//e.clientX是被触发时鼠标指针向对于浏览器页面的水平坐标
			var float_box_left=e.clientX-small_box.offsetLeft-50;  //求出鼠标位于浮动层的中心
			var float_box_top=e.clientY-small_box.offsetTop-25;

			var left=float_box.offsetLeft*big_box_img.offsetWidth/small_box.offsetWidth;//求上图的x2值,即图片偏移方框的左距
			var top=float_box.offsetTop*big_box_img.offsetHeight/small_box.offsetHeight;//求上图的x2值,即图片偏移方框的高度
			 big_box_img.style.left=-left+‘px‘;
			 big_box_img.style.top=-top+‘px‘;

			 /*控制浮动层不能超出方框的范围*/
			if(float_box_left<0){
				float_box.style.left=0;
			}
			else if(float_box_left>(small_box.offsetWidth-100)){
				float_box.style.left=small_box.offsetWidth-100+‘px‘;
			}
			else{
				float_box.style.left=float_box_left+‘px‘;
			}
			if(float_box_top<0){
				float_box.style.top=0;
			}
			else if(float_box_top>(small_box.offsetHeight-50)){
				float_box.style.top=small_box.offsetHeight-50+‘px‘;
			}
			else{
				float_box.style.top=float_box_top+‘px‘;
			}
		}

		/*鼠标移出时触发*/
		small_box.onmouseout=function(){
			float_box.style.display=‘none‘;
			big_box.style.display=‘none‘;
		}
	}

效果是实现了,但是由于除数时有小数点的偏差,可能效果也有一点偏差,大致就是这样。最重要的还是实现效果中的思维逻辑。

推荐网址:http://www.imooc.com/learn/32,放大镜教学视频。

时间: 2024-10-26 08:27:48

原生js实现放大镜效果的相关文章

图片切换特效(1):原生JS图片切换效果

转自:http://www.codefans.net/jscss/code/4699.shtml <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

原生JS实现分页效果1.0

不太完整,写的太急,等等加上完整注释,写起来还是有些难度的,写的有点水,后面再改进改进. <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>原生JS实现分页效果</title> <style> body{ margin:100px 200px; } #page{ margin:20px 0; } #

React.js实现原生js拖拽效果及思考

一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖拽效果. 首先,其实拖拽效果的思路是很简单的.主要就是三个步骤: 1.onmousedown的时候,启动可拖拽事件,记录被拖拽元素的原始坐标参数. 2.onmousemove的时候,实时记录鼠标移动的距离,结合被拖拽元素第一阶段的坐标参数,计算并设置新的坐标值. 3.onmouseup的时候,关闭可拖拽事件

原生JS实现分页效果2.0(新增了上一页和下一页,添加当前元素样式)

虽然写的很烂,但至少全部都是自己写的,因为这个没有固定的顺序,所以就没有封装,如果你技术好的话,可以你写的分享给我,谢谢. <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>原生JS实现分页效果</title> <style> body{ margin:100px 200px; } #page{ m

原生js实现的效果

原生js实现tooltip提示框的效果 在js的世界里面,每一个小的特效都那么微不足道,却又那么的令人向往与好奇.前端工程师的任务特别高大上,因为他们的一个小小的设计就会激发别人的求知欲.比如说我,只是随机一瞟,便看到了这个tooltip的特效,就有一种想要征服它的愿望. 比如这个tooltip的效果展示: 这个便是tooltip提示框的效果. 在Hbulider上的代码展示: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta

原生js简易日历效果实现

这里我们将用原生js实现简易的日历,原理和之前的原生js选项卡差不多,不过也有些区别: 首先html代码: <div class="container"> <div class="container_cont"> <ul id="cont_ul"> <li class="active"> <span>1</span> <p>jan</p&

再谈React.js实现原生js拖拽效果

前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目地就是要尽量避免直接操作dom元素,所以我们在对dom元素进行操作的时候需要注意,我之前为了获取form的参数就直接用了var dragBox=document.getElementById('form')去找dom,但是其实记录from的初始位置,可以在其子组件更新父组件参数的时候调用.即在MyF

原生js显示分页效果

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>原生js分页</title> <style type="text/css"> #pageNav { display: inline-block; } #pageNav a { display: inline-block; wi

js实现放大镜效果

html部分 <div id="box"> <img width="100%" height="100%" src="images/1.png" alt="#"> <div id="move"></div> </div> <div id="bimg"> <img id="b_bim