`

用JS实现放大镜特效

阅读更多

先来张效果图:


 

这个特效是跟着慕课网上的视频学的,视频链接如下:https://www.imooc.com/learn/32

源码和技术点已经上传到附件,有需要的可以查看、下载。

下面直接上代码(PS:代码中的注释是根据个人理解添加的,并不是老师原有的注释):

页面结构

<div id="demo">
	<!--左侧小图片区域-->
    <div id="small-box">		
        <div id="mark"></div><!--左侧可以点击区域,类似于遮罩层,让鼠标一直在这个区域上移动。-->
        <div id="float-box"></div><!--左侧放大镜区域-->
        <img src="macbook-small.jpg"/>
    </div>
	<!--右侧大图片区域-->
    <div id="big-box">
        <img src="macbook-big.jpg"/>
    </div>
</div>

CSS样式

<style>
	* {
		margin: 0;
		padding: 0
	}

	#demo {
		display: block;
		width: 400px;
		height: 255px;
		margin: 50px;
		position: relative;
		border: 1px solid #ccc;
	}

	#small-box {
		position: relative;
		z-index: 1;
	}

	#float-box {
		display: none;
		width: 160px;
		height: 120px;
		position: absolute;
		background: #ffffcc;
		border: 1px solid #ccc;
		filter: alpha(opacity=50);
		opacity: 0.5;
	}

	#mark {
		position: absolute;
		display: block;
		width: 400px;
		height: 255px;
		background-color: #fff;
		filter: alpha(opacity=0);
		opacity: 0;
		z-index: 10;
		cursor:move;
	}

	#big-box {
		display: none;
		position: absolute;
		top: 0;
		left: 460px;
		width: 400px;
		height: 300px;
		overflow: hidden;
		border: 1px solid #ccc;
		z-index: 1;;
	}

	#big-box img {
		position: absolute;
		z-index: 5
	}
</style>

JS代码

window.onload=function(){
	var demoObj = document.getElementById("demo");//整个div所在对象

	var smallBoxObj = document.getElementById("small-box");//左侧小图片区域
	var markObj = document.getElementById("mark");//左侧可以点击区域
	var floatBoxObj = document.getElementById("float-box");//左侧放大镜区域
	var bigBoxObj = document.getElementById("big-box");//右侧大图片区域
	var bigBoxImageObj = bigBoxObj.getElementsByTagName("img")[0];
	//当鼠标进入到mark区域时,放大镜显示,大图片区域显示
	markObj.onmouseover=function(){
		floatBoxObj.style.display="block";
		bigBoxObj.style.display="block";
	};

	//当鼠标离开mark区域时,放大镜隐藏,大图片区域也隐藏
	markObj.onmouseout = function(){
		floatBoxObj.style.display="none";
		//bigBoxObj.style.display="none";
	};

	//当鼠标在mark区域移动时,放大镜和大图片区域根据鼠标的移动而移动
	markObj.onmousemove = function(ev){
		//1、先计算放大镜的移动情况
		var _event = ev || window.event;
		/*使用这种写法,鼠标图标一直在放大镜区域的左上角,不太美观,所以改成让其在放大镜区域的中间显示,也就是offsetWidth、offsetHeight的一半
		var left = _event.clientX - demoObj.offsetLeft - smallBoxObj.offsetLeft;				
		var top = _event.clientY - demoObj.offsetTop - smallBoxObj.offsetTop;
		*/

		var left = _event.clientX - demoObj.offsetLeft - smallBoxObj.offsetLeft - floatBoxObj.offsetWidth/2;			
		var top = _event.clientY - demoObj.offsetTop - smallBoxObj.offsetTop - floatBoxObj.offsetHeight/2;
		
		//1.1解决放大镜出界问题:离开smallBox所在区域
		//左侧出界:左侧边界的offsetLeft(_event.clientX - demoObj.offsetLeft - smallBoxObj.offsetLeft)比放大镜的offsetWidth/2还小时,为了满足“鼠标一直在中间显示”,此时放大镜将超出边界显示,此时让其left为0,与左侧边界重合

		//右侧出界:floatBoxObj必须markObj所在区域之内显示,当floatBoxObj的右侧不在markObj区域内时,右侧将出界,那么left应该是markObj的宽度与floatBoxObj宽度之差(在markObj或smallBoxObj的区域之内都可以,只要不超出这个区域的边界即可,因为左侧是在markObj上面移动,所以这里用markObj)				
		if(left<0){	
			left=0;
		}else if(left>(markObj.offsetWidth-floatBoxObj.offsetWidth)){
			//console.log("333333333333");
			left = markObj.offsetWidth-floatBoxObj.offsetWidth;
		}
		//同理解决高度出界的问题
		if(top<0){top=0;}
		else if(top>(markObj.offsetHeight-floatBoxObj.offsetHeight)){
			top = markObj.offsetHeight-floatBoxObj.offsetHeight;
		}	

		//console.log("left="+left+"\ttop="+top);
		//放大镜区域所在位置
		floatBoxObj.style.left = left+"px";
		floatBoxObj.style.top = top+"px";

		//2、在大图片区域显示图片
		//(????计算方法没太懂)
		var percentX = left / (markObj.offsetWidth - floatBoxObj.offsetWidth);
		var percentY = top / (markObj.offsetHeight - floatBoxObj.offsetHeight);

		bigBoxImageObj.style.left = -percentX * (bigBoxImageObj.offsetWidth - bigBoxObj.offsetWidth) + "px";
		bigBoxImageObj.style.top = -percentY * (bigBoxImageObj.offsetHeight - bigBoxObj.offsetHeight) + "px";
	};
};

在大图上显示那块儿没太懂,学习视频里面讲的也没看懂,有看懂的还望告知,谢谢!

  • 大小: 133.7 KB
  • 大小: 218.2 KB
  • 大小: 302.3 KB
  • 大小: 212.2 KB
  • 大小: 51.3 KB
  • 大小: 142.8 KB
  • 大小: 163.4 KB
  • 大小: 155.7 KB
分享到:
评论

相关推荐

    纯JS图片放大镜特效封装插件

    **纯JS图片放大镜特效封装插件**是一种利用JavaScript实现的网页交互效果,它允许用户在鼠标悬停在图片上时,看到图片的局部放大视图,为用户提供更清晰的产品细节展示,常见于电商网站的商品图片展示。这种效果通常...

    图片放大镜特效-淘宝宝贝放大镜特效

    在提供的压缩包文件中,`index.html`很可能是包含HTML结构和JavaScript代码的网页文件,`images`目录存放了图片资源,而`js`目录可能包含实现放大镜特效的JavaScript文件。通过分析这些文件,可以进一步了解具体实现...

    js图片放大镜特效代码

    在提供的压缩包文件"js图片放大镜特效代码.wps"中,你可以找到实现这些功能的具体代码。通过阅读和理解代码,新手和有基础的开发者都能进一步提升JavaScript和Web交互设计的能力。同时,这样的实践项目也是提高编程...

    仿淘宝展品细节展示放大镜特效.zip

    这种放大镜特效通常由JavaScript(JS)编写,它是一种广泛使用的客户端脚本语言,负责在用户浏览器端处理动态交互。在"JS特效-图片相册"这个标签中,我们可以理解到这个特效不仅局限于单一的图片放大,还可能涉及到...

    js特效窗口图片切换+放大镜

    "js特效窗口图片切换+放大镜"是一个典型的JavaScript实现的网页交互效果,它涉及到多个关键的技术点,包括图片的动态切换、滤镜应用、放大镜功能以及指定图片的点击跳转。下面我们将详细探讨这些知识点。 首先,**...

    js圆形放大镜网页特效

    "js圆形放大镜网页特效"就是一种常见的技术,它允许用户在鼠标悬停在某个产品图片上时,出现一个圆形的放大区域,使得用户可以更清晰地查看产品的细节。这种效果在电子商务网站中尤其常见,用于展示商品的细节。 ...

    各种js的放大镜特效

    在这个"各种js的放大镜特效"主题中,我们聚焦于如何利用JavaScript、HTML和jQuery来实现图片的放大镜效果,这是一种常见的增强用户体验的功能,特别是对于在线商品展示或图像细节查看。 1. **JavaScript基础**:...

    电商商品展示放大镜特效

    首先,我们来看看“放大镜特效”的技术实现。通常,这个功能是基于JavaScript和CSS3构建的。JavaScript用于监听用户的鼠标移动事件,当鼠标在图片上移动时,触发放大效果。CSS3则用来创建透明的“放大镜”层,该层...

    jQuery球状放大镜特效插件

    jQuery球状放大镜特效插件是一种创新的实现方式,它为用户提供了3D视觉效果,增强了用户体验。这款插件基于流行的JavaScript库jQuery构建,并结合了HTML5的技术优势,使得网页的图像展示更加生动和吸引人。 首先,...

    js仿京东主图放大镜特效.zip

    这个“js仿京东主图放大镜特效.zip”压缩包包含了一个实现这种效果的代码实例,适合开发者参考和使用。下面将详细介绍这个特效的实现原理和涉及的技术。 首先,这个特效的核心是利用JavaScript(可能是jQuery库)和...

    简单的jquery放大镜特效.zip

    "简单的jquery放大镜特效"是一个基于jQuery实现的网页元素放大功能,常见于电商网站的产品展示,让用户能更清晰地查看产品细节。这个功能通过鼠标悬停在图片上时,出现一个放大的浮动视窗来实现。 首先,我们要理解...

    jquery图片局部放大镜特效.rar

    "jQuery图片局部放大镜特效"是利用JavaScript库jQuery实现的一种高效、便捷的交互效果。在本案例中,我们将深入探讨这个主题,包括jQuery的基础知识,图片放大镜的原理,以及如何使用jQuery来实现这样的特效。 首先...

    js实现图片放大镜效果

    首先,我们来看"js实现图片放大镜效果"这一主题。这个功能通常涉及到JavaScript的事件监听、DOM操作以及图片处理。在给定的资源中,我们有一个名为`mz-packed.js`的文件,这很可能是封装好的jQuery插件,用于实现...

    arcgis js api 地图透镜或放大镜 卷帘效果

    基于ArcGIS api上实现地图操作特效,包括透镜、放大镜、卷帘功能 阅读源码快速了解实现思路 有问题q-q-541247221

    js放大镜 html特效

    本文将详细探讨如何使用JS实现HTML中的放大镜特效。 首先,我们要理解放大镜效果的基本原理。这个效果通常由两个部分组成:一个是原始图片,另一个是放大部分。当鼠标在原始图片上移动时,放大部分会显示一个放大的...

    jQuery商品图片放大镜特效.zip

    `js` 文件夹包含了JavaScript代码,这些代码实现了放大镜特效。主要的JavaScript文件可能是 `cloud-zoom.js` 或者类似的名称,它实现了jQuery插件的逻辑。这个插件通常监听用户的鼠标移动事件,动态调整放大镜区域的...

    淘宝的放大镜特效,下载即可使用

    淘宝的放大镜特效是一种常见的网页交互设计,常用于电商网站的商品展示,使用户能更清晰地查看商品细节。这个特效通常结合JavaScript、jQuery和CSS三种技术实现,为用户提供了一个直观的视觉体验。下面将详细解释...

    商品放大镜特效

    在本文中,我们将深入探讨实现商品放大镜特效的技术细节,以及相关的文件资源。 一、技术原理 商品放大镜特效通常基于JavaScript库,如jQuery,配合CSS样式和HTML结构来完成。jQuery是一个轻量级、高性能的...

    图片放大镜特效集合.rar

    文件名称列表中只有一个"图片放大镜特效集合",这可能意味着压缩包包含不同实现方式的代码文件,如独立的JavaScript文件、CSS文件或预编译后的资源。理解这些文件的组织结构有助于开发者快速集成和自定义特效。 8....

Global site tag (gtag.js) - Google Analytics